diff --git a/CMakeLists.txt b/CMakeLists.txt index 47f08657217dc0f8fc22c5c5d68bf5d970aea0e7..bdfc779878277f48a0077489b9bb8a794a517379 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -305,7 +305,6 @@ set(SRC_FILES src/SideBarActions.cpp src/Splitter.cpp src/TextInputWidget.cpp - src/TopRoomBar.cpp src/TrayIcon.cpp src/UserInfoWidget.cpp src/UserSettingsPage.cpp @@ -514,7 +513,6 @@ qt5_wrap_cpp(MOC_HEADERS src/SideBarActions.h src/Splitter.h src/TextInputWidget.h - src/TopRoomBar.h src/TrayIcon.h src/UserInfoWidget.h src/UserSettingsPage.h diff --git a/README.md b/README.md index fb0167c8deac7dff6ee139c6d94ab72c3935598f..2d24165c5924de44498d3ba80b1ef19769ce3d9d 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,7 @@ Nheko can use bundled version for most of those libraries automatically, if the To use them, you can enable the hunter integration by passing `-DHUNTER_ENABLED=ON`. It is probably wise to link those dependencies statically by passing `-DBUILD_SHARED_LIBS=OFF` You can select which bundled dependencies you want to use py passing various `-DUSE_BUNDLED_*` flags. By default all dependencies are bundled *if* you enable hunter. +If you experience build issues and you are trying to link `mtxclient` library without hunter, make sure the library version(commit) as mentioned in the `CMakeList.txt` is used. Sometimes we have to make breaking changes in `mtxclient` and for that period the master branch of both repos may not be compatible. The bundle flags are currently: diff --git a/resources/langs/nheko_cs.ts b/resources/langs/nheko_cs.ts new file mode 100644 index 0000000000000000000000000000000000000000..384434121e8e74ed953cfd149e21117198f9cb11 --- /dev/null +++ b/resources/langs/nheko_cs.ts @@ -0,0 +1,1995 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="cs"> +<context> + <name>Cache</name> + <message> + <location filename="../../src/Cache.cpp" line="+1658"/> + <source>You joined this room.</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ChatPage</name> + <message> + <location filename="../../src/ChatPage.cpp" line="+218"/> + <source>Failed to invite user: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <location line="+947"/> + <source>Invited user: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-458"/> + <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+415"/> + <source>Room %1 created.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+26"/> + <source>Confirm invite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>Failed to invite %1 to %2: %3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>Confirm kick</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>Failed to kick %1 to %2: %3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Kicked user: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>Confirm ban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>Failed to ban %1 in %2: %3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Banned user: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>Confirm unban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>Failed to unban %1 in %2: %3</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Unbanned user: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-874"/> + <source>Failed to upload media. Please try again.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+334"/> + <source>Cache migration failed!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>Incompatible cache version</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+67"/> + <source>Failed to restore OLM account. Please login again.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Failed to restore save data. Please login again.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+165"/> + <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+99"/> + <location line="+251"/> + <source>Please try to login again: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-219"/> + <source>Failed to join room: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You joined the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Failed to remove invite: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>Room creation failed: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+16"/> + <source>Failed to leave room: %1</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>CommunitiesListItem</name> + <message> + <location filename="../../src/CommunitiesListItem.cpp" line="+133"/> + <source>All rooms</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Favourite rooms</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Low priority rooms</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Server Notices</source> + <comment>Tag translation for m.server_notice</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <location line="+2"/> + <source> (tag)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source> (community)</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>EditModal</name> + <message> + <location filename="../../src/dialogs/RoomSettings.cpp" line="+72"/> + <source>Apply</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>Name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Topic</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>EmojiPicker</name> + <message> + <location filename="../qml/emoji/EmojiPicker.qml" line="+117"/> + <location line="+139"/> + <source>Search</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-42"/> + <source>People</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Nature</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Food</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Activity</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Travel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Objects</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Symbols</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Flags</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>EncryptionIndicator</name> + <message> + <location filename="../qml/EncryptionIndicator.qml" line="+36"/> + <source>Encrypted</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>This message is not encrypted!</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>InviteeItem</name> + <message> + <location filename="../../src/InviteeItem.cpp" line="+18"/> + <source>Remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>LoginPage</name> + <message> + <location filename="../../src/LoginPage.cpp" line="+90"/> + <source>Matrix ID</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>e.g @joe:matrix.org</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Your login name. A mxid should start with @ followed by the user id. After the user id you need to include your server name after a :. +You can also put your homeserver address there, if your server doesn't support .well-known lookup. +Example: @user:server.my +If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+21"/> + <source>Password</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Device name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>A name for this device, which will be shown to others, when verifying your devices. If none is provided a default is used.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>The address that can be used to contact you homeservers client API. +Example: https://server.my:8787</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+16"/> + <location line="+191"/> + <source>LOGIN</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-100"/> + <source>Autodiscovery failed. Received malformed response.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Autodiscovery failed. Unknown error when requesting .well-known.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+25"/> + <source>The required endpoints were not found. Possibly not a Matrix server.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Received malformed response. Make sure the homeserver domain is valid.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>An unknown error occured. Make sure the homeserver domain is valid.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+55"/> + <source>SSO LOGIN</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+25"/> + <source>Empty password</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+52"/> + <source>SSO login failed</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MemberList</name> + <message> + <location filename="../../src/dialogs/MemberList.cpp" line="+90"/> + <source>Room members</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>OK</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MessageDelegate</name> + <message> + <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> + <source>redacted</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Encryption enabled</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>room name changed to: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+0"/> + <source>removed room name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>topic changed to: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+0"/> + <source>removed topic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>%1 created and configured room: %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>Negotiating call...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-12"/> + <source>%1 answered the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>%1 ended the call.</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>Placeholder</name> + <message> + <location filename="../qml/delegates/Placeholder.qml" line="+4"/> + <source>unimplemented event: </source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>QuickSwitcher</name> + <message> + <location filename="../../src/QuickSwitcher.cpp" line="+74"/> + <source>Search for a room...</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RegisterPage</name> + <message> + <location filename="../../src/RegisterPage.cpp" line="+88"/> + <source>Username</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Password</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Please choose a secure password. The exact requirements for password strength may depend on your server.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Password confirmation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Homeserver</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+17"/> + <source>REGISTER</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+55"/> + <source>No supported registration flows!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+135"/> + <source>Invalid username</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Password is not long enough (min 8 chars)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Passwords don't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Invalid server name</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RoomInfo</name> + <message> + <location filename="../../src/Cache.cpp" line="+1443"/> + <source>no version stored</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RoomInfoListItem</name> + <message> + <location filename="../../src/RoomInfoListItem.cpp" line="+102"/> + <source>Leave room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Tag room as:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+18"/> + <source>Favourite</source> + <comment>Standard matrix tag for favourites</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Low Priority</source> + <comment>Standard matrix tag for low priority rooms</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Server Notice</source> + <comment>Standard matrix tag for server notices</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Adds or removes the specified tag.</source> + <comment>WhatsThis hint for tag menu actions</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+38"/> + <source>New tag...</source> + <comment>Add a new tag to the room</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>New Tag</source> + <comment>Tag name prompt title</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Tag:</source> + <comment>Tag name prompt</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+173"/> + <source>Accept</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Decline</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>SideBarActions</name> + <message> + <location filename="../../src/SideBarActions.cpp" line="+40"/> + <source>User settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Create new room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Join a room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+16"/> + <source>Start a new chat</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>Room directory</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>StatusIndicator</name> + <message> + <location filename="../qml/StatusIndicator.qml" line="+14"/> + <source>Failed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Sent</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Received</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Read</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TextInputWidget</name> + <message> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> + <source>Send a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> + <source>Write a message...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+31"/> + <source>Send a message</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>Emoji</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+94"/> + <source>Select a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+0"/> + <source>All Files (*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+64"/> + <source>Place a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Hang up</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../src/TextInputWidget.h" line="-5"/> + <source>Connection lost. Nheko is trying to re-connect...</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TimelineModel</name> + <message> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> + <source>Message redaction failed: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+195"/> + <source>Save image</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Save video</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Save audio</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Save file</source> + <translation type="unfinished"></translation> + </message> + <message numerus="yes"> + <location line="+129"/> + <source>%1 and %2 are typing.</source> + <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> + <translation type="unfinished"> + <numerusform></numerusform> + <numerusform></numerusform> + <numerusform></numerusform> + </translation> + </message> + <message> + <location line="+68"/> + <source>%1 opened the room to the public.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>%1 made this room require and invitation to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+23"/> + <source>%1 made the room open to guests.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>%1 has closed the room to guest access.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+23"/> + <source>%1 made the room history world readable. Events may be now read by non-joined people.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>%1 set the room history visible to members from this point on.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 set the room history visible to members since they were invited.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 set the room history visible to members since they joined the room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+22"/> + <source>%1 has changed the room's permissions.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+33"/> + <source>%1 was invited.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>%1 changed their display name and avatar.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>%1 changed their display name.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>%1 changed their avatar.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>%1 changed some profile info.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>%1 joined.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>%1 rejected their invite.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Revoked the invite to %1.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 left the room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Kicked %1.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Unbanned %1.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>%1 was banned.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-11"/> + <source>%1 redacted their knock.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-943"/> + <source>You joined this room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+945"/> + <source>Rejected the knock from %1.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>%1 left after having already left!</source> + <comment>This is a leave event after the user already left and shouldn't happen apart from state resets</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source> Reason: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-5"/> + <source>%1 knocked.</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TimelineRow</name> + <message> + <location filename="../qml/TimelineRow.qml" line="+94"/> + <source>React</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+16"/> + <source>Reply</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>Options</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TimelineView</name> + <message> + <location filename="../qml/TimelineView.qml" line="+61"/> + <source>React</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Reply</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Read receipts</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Mark as read</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>View raw message</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>View decrypted raw message</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Redact message</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Save as</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>No room open</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+53"/> + <source>Back to room list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+28"/> + <source>Room options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Invite users</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Members</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Leave room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../../src/TrayIcon.cpp" line="+122"/> + <source>Show</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Quit</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>UserInfoWidget</name> + <message> + <location filename="../../src/UserInfoWidget.cpp" line="+95"/> + <source>Logout</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+20"/> + <source>Set custom status message</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Custom status message</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Status:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>Set presence automatically</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Online</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Unavailable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Offline</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>UserSettingsPage</name> + <message> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> + <source>Minimize to tray</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Start in tray</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Group's sidebar</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-3"/> + <source>Circular Avatars</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-63"/> + <source>CALLS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+58"/> + <source>Keep the application running in the background after closing the client window.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Start the application in the background without showing the client window.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Change the appearance of user avatars in chats. +OFF - square, ON - Circle.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Show a column containing groups and tags next to the room list.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Decrypt messages in sidebar</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Decrypt the messages shown in the sidebar. +Only affects messages in encrypted chats.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Show buttons in timeline</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Show buttons to quickly reply, react or access additional options next to each message.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Limit width of timeline</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Set the max width of messages in the timeline (in pixels). This can help readability on wide screen, when Nheko is maximised</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Typing notifications</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Show who is typing in a room. +This will also enable or disable sending typing notifications to others.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Sort rooms by unreads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Display rooms with new messages first. +If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. +If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms, that you have muted, will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Read receipts</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Show if your message was read. +Status is displayed next to timestamps.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Send messages as Markdown</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Allow using markdown in messages. +When disabled, all messages are sent as a plain text.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Desktop notifications</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Notify about received message when the client is not currently focused.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Alert on notification</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Show an alert when a message is received. +This usually causes the application icon in the task bar to animate in some fashion.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Highlight message on hover</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Change the background color of messages when you hover over them.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Large Emoji in timeline</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Make font size larger if messages with only a few emojis are displayed.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Scale factor</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Change the scale factor of the whole user interface.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Font size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Font Family</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>Theme</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Device ID</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Device Fingerprint</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-120"/> + <source>Session Keys</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>IMPORT</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>EXPORT</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-25"/> + <source>ENCRYPTION</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-78"/> + <source>GENERAL</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+30"/> + <source>INTERFACE</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+172"/> + <source>Emoji Font Family</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+191"/> + <source>Open Sessions File</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <location line="+18"/> + <location line="+9"/> + <location line="+2"/> + <location line="+2"/> + <location line="+19"/> + <location line="+11"/> + <location line="+18"/> + <location line="+2"/> + <location line="+2"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-74"/> + <location line="+32"/> + <source>File Password</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-31"/> + <source>Enter the passphrase to decrypt the file:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <location line="+32"/> + <source>The password cannot be empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-8"/> + <source>Enter passphrase to encrypt your session keys:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+15"/> + <source>File to save the exported session keys</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WelcomePage</name> + <message> + <location filename="../../src/WelcomePage.cpp" line="+47"/> + <source>Welcome to nheko! The desktop client for the Matrix protocol.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Enjoy your stay!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+23"/> + <source>REGISTER</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>LOGIN</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>descriptiveTime</name> + <message> + <location filename="../../src/Utils.cpp" line="+146"/> + <source>Yesterday</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>dialogs::CreateRoom</name> + <message> + <location filename="../../src/dialogs/CreateRoom.cpp" line="+36"/> + <source>Create room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>Name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Topic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Alias</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>Room Visibility</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>Room Preset</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>Direct Chat</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>dialogs::FallbackAuth</name> + <message> + <location filename="../../src/dialogs/FallbackAuth.cpp" line="+30"/> + <source>Open Fallback in Browser</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Confirm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>Open the fallback, follow the steps and confirm after completing them.</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>dialogs::InviteUsers</name> + <message> + <location filename="../../src/dialogs/InviteUsers.cpp" line="+42"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>User ID to invite</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>dialogs::JoinRoom</name> + <message> + <location filename="../../src/dialogs/JoinRoom.cpp" line="+30"/> + <source>Join</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Room ID or alias</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>dialogs::LeaveRoom</name> + <message> + <location filename="../../src/dialogs/LeaveRoom.cpp" line="+31"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>Are you sure you want to leave?</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>dialogs::Logout</name> + <message> + <location filename="../../src/dialogs/Logout.cpp" line="+47"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>Logout. Are you sure?</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>dialogs::PreviewUploadOverlay</name> + <message> + <location filename="../../src/dialogs/PreviewUploadOverlay.cpp" line="+41"/> + <source>Upload</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+84"/> + <source>Media type: %1 +Media size: %2 +</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>dialogs::ReCaptcha</name> + <message> + <location filename="../../src/dialogs/ReCaptcha.cpp" line="+31"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Confirm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>Solve the reCAPTCHA and press the confirm button</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>dialogs::ReadReceipts</name> + <message> + <location filename="../../src/dialogs/ReadReceipts.cpp" line="+120"/> + <source>Read receipts</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Close</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>dialogs::ReceiptItem</name> + <message> + <location line="-46"/> + <source>Today %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Yesterday %1</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>dialogs::RoomSettings</name> + <message> + <location filename="../../src/dialogs/RoomSettings.cpp" line="+135"/> + <source>Settings</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Info</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> + <source>Internal ID</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>Room Version</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Notifications</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Muted</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Mentions only</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>All messages</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+97"/> + <source>Room access</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Anyone and guests</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Anyone</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Invited users</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+50"/> + <source>Encryption</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>End-to-End Encryption</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Encryption is currently experimental and things might break unexpectedly. <br>Please take note that it can't be disabled afterwards.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+27"/> + <source>Respond to key requests</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Whether or not the client should respond automatically with the session keys + upon request. Use with caution, this is a temporary measure to test the + E2E implementation until device verification is completed.</source> + <translation type="unfinished"></translation> + </message> + <message numerus="yes"> + <location line="+51"/> + <source>%n member(s)</source> + <translation type="unfinished"> + <numerusform></numerusform> + <numerusform></numerusform> + <numerusform></numerusform> + </translation> + </message> + <message> + <location line="+140"/> + <source>Failed to enable encryption: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+147"/> + <source>Select an avatar</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+0"/> + <source>All Files (*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+12"/> + <source>The selected file is not an image</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Error while reading file: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+35"/> + <location line="+20"/> + <source>Failed to upload image: %s</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>dialogs::UserProfile</name> + <message> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> + <source>Ban the user from the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>Ignore messages from this user</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>Kick the user from the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>Start a conversation</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>Confirm DM</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+54"/> + <source>Devices</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>emoji::Panel</name> + <message> + <location filename="../../src/emoji/Panel.cpp" line="+122"/> + <source>Smileys & People</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Animals & Nature</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Food & Drink</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Activity</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Travel & Places</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Objects</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Symbols</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Flags</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>message-description sent:</name> + <message> + <location filename="../../src/Utils.h" line="+106"/> + <source>You sent an audio clip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 sent an audio clip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You sent an image</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 sent an image</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You sent a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 sent a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You sent a video</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 sent a video</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You sent a sticker</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 sent a sticker</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You sent a notification</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 sent a notification</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1: %2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>You sent an encrypted message</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 sent an encrypted message</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You ended a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 ended a call</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>popups::UserMentions</name> + <message> + <location filename="../../src/popups/UserMentions.cpp" line="+64"/> + <source>This Room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>All Rooms</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>utils</name> + <message> + <location filename="../../src/Utils.h" line="+4"/> + <source>Unknown Message Type</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts index 1ba573705a211720f4db69c33c15e2eb79613d6e..0958017f521b054ac1ef7c98c41d77aa332fa12d 100644 --- a/resources/langs/nheko_de.ts +++ b/resources/langs/nheko_de.ts @@ -4,7 +4,7 @@ <context> <name>Cache</name> <message> - <location filename="../../src/Cache.cpp" line="+1359"/> + <location filename="../../src/Cache.cpp" line="+1658"/> <source>You joined this room.</source> <translation>Du bist dem Raum beigetreten.</translation> </message> @@ -12,33 +12,53 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+229"/> + <location filename="../../src/ChatPage.cpp" line="+218"/> <source>Failed to invite user: %1</source> <translation>Nutzer konnte nicht eingeladen werden: %1</translation> </message> <message> <location line="+4"/> - <location line="+926"/> + <location line="+947"/> <source>Invited user: %1</source> <translation>Eingeladener Benutzer: %1</translation> </message> <message> - <location line="-474"/> + <location line="-458"/> <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> - <translation>Migrieren des Caches auf die aktuelle Version fehlgeschlagen. Das kann verschiedene Gründe als Ursache haben. Bitte lege einen Bugreport an und verwende in der Zwischenzeit eine ältere Version. Alternativ kannst du das Cache manuell entfernen.</translation> + <translation>Das Migrieren des Caches auf die aktuelle Version ist fehlgeschlagen. Das kann verschiedene Gründe als Ursache haben. Bitte melde den Fehler und verwende in der Zwischenzeit eine ältere Version. Alternativ kannst du das Cache manuell löschen.</translation> </message> <message> - <location line="+439"/> + <location line="+415"/> <source>Room %1 created.</source> <translation>Raum %1 erzeugt.</translation> </message> <message> - <location line="+30"/> + <location line="+26"/> + <source>Confirm invite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to invite %1 to %2: %3</source> <translation>Einladung von %1 in Raum %2 fehlgeschlagen: %3</translation> </message> <message> - <location line="+19"/> + <location line="+15"/> + <source>Confirm kick</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to kick %1 to %2: %3</source> <translation>%1 konnte nicht aus %2 gekickt werden: %3</translation> </message> @@ -48,7 +68,17 @@ <translation>%1 wurde gekickt.</translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm ban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to ban %1 in %2: %3</source> <translation>%1 konnte nicht aus %2 verbannt werden: %3</translation> </message> @@ -58,7 +88,17 @@ <translation>%1 wurde gebannt.</translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm unban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to unban %1 in %2: %3</source> <translation>Verbannung von %1 aus %2 konnte nicht aufgehoben werden: %3</translation> </message> @@ -68,12 +108,12 @@ <translation>Verbannung von %1 wurde aufgehoben.</translation> </message> <message> - <location line="-828"/> + <location line="-874"/> <source>Failed to upload media. Please try again.</source> <translation>Medienupload fehlgeschlagen. Bitte versuche es erneut.</translation> </message> <message> - <location line="+296"/> + <location line="+334"/> <source>Cache migration failed!</source> <translation>Cache migration fehlgeschlagen!</translation> </message> @@ -85,31 +125,31 @@ <message> <location line="+1"/> <source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source> - <translation>Das Cache auf der Festplatte wurde mit einer neueren Nheko version angelegt. Bitte aktualisiere Nheko oder entferne das Cache.</translation> + <translation>Der Cache auf der Festplatte wurde mit einer neueren Nheko - Version angelegt. Bitte aktualisiere Nheko oder entferne den Cache.</translation> </message> <message> - <location line="+111"/> + <location line="+67"/> <source>Failed to restore OLM account. Please login again.</source> <translation>Wiederherstellung des OLM Accounts fehlgeschlagen. Bitte logge dich erneut ein.</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Failed to restore save data. Please login again.</source> <translation>Gespeicherte Nachrichten konnten nicht wiederhergestellt werden. Bitte melde Dich erneut an.</translation> </message> <message> - <location line="+156"/> + <location line="+165"/> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <translation>Fehler beim Setup der Verschlüsselungsschlüssel. Servermeldung: %1 %2. Bitte versuche es später erneut.</translation> </message> <message> - <location line="+54"/> - <location line="+252"/> + <location line="+99"/> + <location line="+251"/> <source>Please try to login again: %1</source> <translation>Bitte melde dich erneut an: %1</translation> </message> <message> - <location line="-187"/> + <location line="-219"/> <source>Failed to join room: %1</source> <translation>Konnte Raum nicht betreten: %1</translation> </message> @@ -198,22 +238,22 @@ <location filename="../qml/emoji/EmojiPicker.qml" line="+117"/> <location line="+139"/> <source>Search</source> - <translation type="unfinished"></translation> + <translation>Suche</translation> </message> <message> <location line="-42"/> <source>People</source> - <translation type="unfinished"></translation> + <translation>Leute</translation> </message> <message> <location line="+2"/> <source>Nature</source> - <translation type="unfinished"></translation> + <translation>Natur</translation> </message> <message> <location line="+2"/> <source>Food</source> - <translation type="unfinished"></translation> + <translation>Essen</translation> </message> <message> <location line="+2"/> @@ -223,7 +263,7 @@ <message> <location line="+2"/> <source>Travel</source> - <translation type="unfinished"></translation> + <translation>Reisen</translation> </message> <message> <location line="+2"/> @@ -251,7 +291,44 @@ <message> <location line="+2"/> <source>This message is not encrypted!</source> - <translation>Diese Nachricht ist nicht verschlüsselt!</translation> + <translation>Diese Nachricht ist unverschlüsselt!</translation> + </message> +</context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation type="unfinished">-- Verschlüsseltes Event (keine Schlüssel zur Entschlüsselung gefunden) --</translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation type="unfinished">-- Entschlüsselungsfehler (Fehler bei Suche nach megolm Schlüsseln in Datenbank) --</translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation type="unfinished">-- Entschlüsselungsfehler (%1) --</translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation type="unfinished">-- Verschlüsseltes Event (Unbekannter Eventtyp) --</translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation type="unfinished"></translation> </message> </context> <context> @@ -371,6 +448,7 @@ Beispiel: https://mein.server:8787</translation> <name>MessageDelegate</name> <message> <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> <source>redacted</source> <translation>gelöscht</translation> </message> @@ -404,6 +482,36 @@ Beispiel: https://mein.server:8787</translation> <source>%1 created and configured room: %2</source> <translation>%1 hat den Raum erstellt: %2</translation> </message> + <message> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>%1 answered the call.</source> + <translation>%1 hat den Anruf angenommen.</translation> + </message> + <message> + <location line="+6"/> + <source>%1 ended the call.</source> + <translation>%1 hat den Anruf beendet.</translation> + </message> + <message> + <location line="+6"/> + <source>Negotiating call...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Placeholder</name> @@ -492,7 +600,7 @@ Beispiel: https://mein.server:8787</translation> <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+984"/> + <location filename="../../src/Cache.cpp" line="+1443"/> <source>no version stored</source> <translation>keine Version gespeichert</translation> </message> @@ -616,13 +724,13 @@ Beispiel: https://mein.server:8787</translation> <context> <name>TextInputWidget</name> <message> - <location filename="../../src/TextInputWidget.cpp" line="+460"/> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> <source>Send a file</source> <translation>Versende Datei</translation> </message> <message> <location line="+13"/> - <location filename="../../src/TextInputWidget.h" line="+145"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> <source>Write a message...</source> <translation>Schreibe eine Nachricht…</translation> </message> @@ -637,7 +745,7 @@ Beispiel: https://mein.server:8787</translation> <translation>Emoji</translation> </message> <message> - <location line="+86"/> + <location line="+94"/> <source>Select a file</source> <translation>Datei auswählen</translation> </message> @@ -646,6 +754,16 @@ Beispiel: https://mein.server:8787</translation> <source>All Files (*)</source> <translation>Alle Dateien (*)</translation> </message> + <message> + <location line="+64"/> + <source>Place a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Hang up</source> + <translation type="unfinished"></translation> + </message> <message> <location filename="../../src/TextInputWidget.h" line="-5"/> <source>Connection lost. Nheko is trying to re-connect...</source> @@ -655,30 +773,20 @@ Beispiel: https://mein.server:8787</translation> <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+891"/> - <source>-- Decryption Error (failed to communicate with DB) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment> - <translation>-- Entschlüsselungsfehler (Fehler bei Kommunikation mit Datenbank) --</translation> - </message> - <message> - <location line="+20"/> - <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> - <translation>-- Entschlüsselungsfehler (Fehler bei Suche nach megolm Schlüsseln in Datenbank) --</translation> - </message> - <message> - <location line="+13"/> - <source>-- Decryption Error (%1) --</source> - <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1.</comment> - <translation>-- Entschlüsselungsfehler (%1) --</translation> - </message> - <message> - <location line="+99"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> <source>Message redaction failed: %1</source> <translation>Nachricht zurückziehen fehlgeschlagen: %1</translation> </message> <message> - <location line="+488"/> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+195"/> <source>Save image</source> <translation>Bild speichern</translation> </message> @@ -697,20 +805,8 @@ Beispiel: https://mein.server:8787</translation> <source>Save file</source> <translation>Datei speichern</translation> </message> - <message> - <location line="-643"/> - <source>-- Encrypted Event (No keys found for decryption) --</source> - <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> - <translation>-- Verschlüsseltes Event (keine Schlüssel zur Entschlüsselung gefunden) --</translation> - </message> - <message> - <location line="+82"/> - <source>-- Encrypted Event (Unknown event type) --</source> - <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> - <translation>-- Verschlüsseltes Event (Unbekannter Eventtyp) --</translation> - </message> <message numerus="yes"> - <location line="+693"/> + <location line="+129"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation> @@ -764,7 +860,7 @@ Beispiel: https://mein.server:8787</translation> <translation>%1 hat die Berechtigungen dieses Raums bearbeitet.</translation> </message> <message> - <location line="+48"/> + <location line="+33"/> <source>%1 was invited.</source> <translation>%1 wurde eingeladen.</translation> </message> @@ -829,12 +925,12 @@ Beispiel: https://mein.server:8787</translation> <translation>%1 hat das Anklopfen zurückgezogen.</translation> </message> <message> - <location line="-1281"/> + <location line="-943"/> <source>You joined this room.</source> <translation>Du bist dem Raum beigetreten.</translation> </message> <message> - <location line="+1283"/> + <location line="+945"/> <source>Rejected the knock from %1.</source> <translation>Hat das Anklopfen von %1 abgewiesen.</translation> </message> @@ -858,12 +954,12 @@ Beispiel: https://mein.server:8787</translation> <context> <name>TimelineRow</name> <message> - <location filename="../qml/TimelineRow.qml" line="+91"/> + <location filename="../qml/TimelineRow.qml" line="+94"/> <source>React</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> + <location line="+16"/> <source>Reply</source> <translation>Antworten</translation> </message> @@ -876,7 +972,7 @@ Beispiel: https://mein.server:8787</translation> <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+54"/> + <location filename="../qml/TimelineView.qml" line="+61"/> <source>React</source> <translation type="unfinished"></translation> </message> @@ -916,47 +1012,50 @@ Beispiel: https://mein.server:8787</translation> <translation>Speichern unter...</translation> </message> <message> - <location line="+14"/> + <location line="+12"/> <source>No room open</source> <translation>Kein Raum geöffnet</translation> </message> <message> - <location line="+271"/> - <source>Close</source> - <translation>Schließen</translation> + <location line="+53"/> + <source>Back to room list</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TopRoomBar</name> <message> - <location filename="../../src/TopRoomBar.cpp" line="+86"/> - <source>Room options</source> - <translation>Raumoptionen</translation> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Mentions</source> - <translation>Erwähnungen</translation> + <location line="+28"/> + <source>Room options</source> + <translation type="unfinished">Raumoptionen</translation> </message> <message> - <location line="+34"/> + <location line="+7"/> <source>Invite users</source> - <translation>Benutzer einladen</translation> + <translation type="unfinished">Benutzer einladen</translation> </message> <message> - <location line="+6"/> + <location line="+4"/> <source>Members</source> - <translation>Teilnehmer</translation> + <translation type="unfinished">Teilnehmer</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Leave room</source> - <translation>Raum verlassen</translation> + <translation type="unfinished">Raum verlassen</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Settings</source> - <translation>Einstellungen</translation> + <translation type="unfinished">Einstellungen</translation> + </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation>Schließen</translation> </message> </context> <context> @@ -1018,7 +1117,7 @@ Beispiel: https://mein.server:8787</translation> <context> <name>UserSettingsPage</name> <message> - <location filename="../../src/UserSettingsPage.cpp" line="+535"/> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> <source>Minimize to tray</source> <translation>Ins Benachrichtigungsfeld minimieren</translation> </message> @@ -1038,7 +1137,12 @@ Beispiel: https://mein.server:8787</translation> <translation>Runde Profilbilder</translation> </message> <message> - <location line="-5"/> + <location line="-63"/> + <source>CALLS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+58"/> <source>Keep the application running in the background after closing the client window.</source> <translation type="unfinished"></translation> </message> @@ -1201,7 +1305,17 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Erscheinungsbild</translation> </message> <message> - <location line="+3"/> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> <source>Device ID</source> <translation>Geräte-ID</translation> </message> @@ -1211,7 +1325,7 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Gerätefingerabdruck</translation> </message> <message> - <location line="-113"/> + <location line="-120"/> <source>Session Keys</source> <translation>Sitzungsschlüssel</translation> </message> @@ -1231,22 +1345,22 @@ This usually causes the application icon in the task bar to animate in some fash <translation>VERSCHLÜSSELUNG</translation> </message> <message> - <location line="-71"/> + <location line="-78"/> <source>GENERAL</source> <translation>ALLGEMEINES</translation> </message> <message> - <location line="+29"/> + <location line="+30"/> <source>INTERFACE</source> <translation>OBERFLÄCHE</translation> </message> <message> - <location line="+166"/> + <location line="+172"/> <source>Emoji Font Family</source> <translation>Emojischriftart</translation> </message> <message> - <location line="+179"/> + <location line="+191"/> <source>Open Sessions File</source> <translation>Öffne Sessions Datei</translation> </message> @@ -1318,11 +1432,24 @@ This usually causes the application icon in the task bar to animate in some fash <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+147"/> + <location filename="../../src/Utils.cpp" line="+146"/> <source>Yesterday</source> <translation>Gestern</translation> </message> </context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation type="unfinished">Akzeptieren</translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>dialogs::CreateRoom</name> <message> @@ -1446,6 +1573,19 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Willst du dich wirklich abmelden?</translation> </message> </context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation type="unfinished">Abbrechen</translation> + </message> +</context> <context> <name>dialogs::PreviewUploadOverlay</name> <message> @@ -1644,7 +1784,7 @@ Medien-Größe: %2 <context> <name>dialogs::UserProfile</name> <message> - <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> <source>Ban the user from the room</source> <translation>Banne den Nutzer aus diesem Raum</translation> </message> @@ -1664,7 +1804,17 @@ Medien-Größe: %2 <translation>Gespräch beginnen</translation> </message> <message> - <location line="+61"/> + <location line="+14"/> + <source>Confirm DM</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+54"/> <source>Devices</source> <translation>Geräte</translation> </message> @@ -1715,7 +1865,7 @@ Medien-Größe: %2 <context> <name>message-description sent:</name> <message> - <location filename="../../src/Utils.h" line="+103"/> + <location filename="../../src/Utils.h" line="+106"/> <source>You sent an audio clip</source> <translation>Du hast eine Audiodatei gesendet.</translation> </message> @@ -1794,6 +1944,36 @@ Medien-Größe: %2 <source>%1 sent an encrypted message</source> <translation>%1 hat eine verschlüsselte Nachricht gesendet.</translation> </message> + <message> + <location line="+5"/> + <source>You placed a call</source> + <translation>Du hast angerufen</translation> + </message> + <message> + <location line="+3"/> + <source>%1 placed a call</source> + <translation>%1 hat angerufen</translation> + </message> + <message> + <location line="+5"/> + <source>You answered a call</source> + <translation>Du hast einen Anruf angenommen</translation> + </message> + <message> + <location line="+3"/> + <source>%1 answered a call</source> + <translation>%1 hat einen Anruf angenommen</translation> + </message> + <message> + <location line="+5"/> + <source>You ended a call</source> + <translation>Du hast einen Anruf beendet</translation> + </message> + <message> + <location line="+3"/> + <source>%1 ended a call</source> + <translation>%1 hat einen Anruf beendet</translation> + </message> </context> <context> <name>popups::UserMentions</name> diff --git a/resources/langs/nheko_el.ts b/resources/langs/nheko_el.ts index 47405976aa1bfd82a4fd234fb3ed176f790bb331..d0a46653e5553120fae4d3b451084ceb94c6c941 100644 --- a/resources/langs/nheko_el.ts +++ b/resources/langs/nheko_el.ts @@ -4,7 +4,7 @@ <context> <name>Cache</name> <message> - <location filename="../../src/Cache.cpp" line="+1359"/> + <location filename="../../src/Cache.cpp" line="+1658"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> @@ -12,33 +12,53 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+229"/> + <location filename="../../src/ChatPage.cpp" line="+218"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+926"/> + <location line="+947"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="-474"/> + <location line="-458"/> <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+439"/> + <location line="+415"/> <source>Room %1 created.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+30"/> + <location line="+26"/> + <source>Confirm invite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to invite %1 to %2: %3</source> <translation type="unfinished"></translation> </message> <message> - <location line="+19"/> + <location line="+15"/> + <source>Confirm kick</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to kick %1 to %2: %3</source> <translation type="unfinished"></translation> </message> @@ -48,7 +68,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm ban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to ban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -58,7 +88,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm unban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to unban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -68,12 +108,12 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-828"/> + <location line="-874"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+296"/> + <location line="+334"/> <source>Cache migration failed!</source> <translation type="unfinished"></translation> </message> @@ -88,28 +128,28 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+111"/> + <location line="+67"/> <source>Failed to restore OLM account. Please login again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Failed to restore save data. Please login again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+156"/> + <location line="+165"/> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+54"/> - <location line="+252"/> + <location line="+99"/> + <location line="+251"/> <source>Please try to login again: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="-187"/> + <location line="-219"/> <source>Failed to join room: %1</source> <translation type="unfinished"></translation> </message> @@ -254,6 +294,43 @@ <translation type="unfinished"></translation> </message> </context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>InviteeItem</name> <message> @@ -367,6 +444,7 @@ Example: https://server.my:8787</source> <name>MessageDelegate</name> <message> <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> <source>redacted</source> <translation type="unfinished"></translation> </message> @@ -400,6 +478,36 @@ Example: https://server.my:8787</source> <source>%1 created and configured room: %2</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>%1 answered the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>%1 ended the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Negotiating call...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Placeholder</name> @@ -488,7 +596,7 @@ Example: https://server.my:8787</source> <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+984"/> + <location filename="../../src/Cache.cpp" line="+1443"/> <source>no version stored</source> <translation type="unfinished"></translation> </message> @@ -612,13 +720,13 @@ Example: https://server.my:8787</source> <context> <name>TextInputWidget</name> <message> - <location filename="../../src/TextInputWidget.cpp" line="+460"/> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> <source>Send a file</source> <translation type="unfinished"></translation> </message> <message> <location line="+13"/> - <location filename="../../src/TextInputWidget.h" line="+145"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> <source>Write a message...</source> <translation>ΓÏάψε Îνα μήνυμα...</translation> </message> @@ -633,7 +741,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+86"/> + <location line="+94"/> <source>Select a file</source> <translation>Διάλεξε Îνα αÏχείο</translation> </message> @@ -643,38 +751,38 @@ Example: https://server.my:8787</source> <translation>Όλα τα αÏχεία (*)</translation> </message> <message> - <location filename="../../src/TextInputWidget.h" line="-5"/> - <source>Connection lost. Nheko is trying to re-connect...</source> + <location line="+64"/> + <source>Place a call</source> <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+891"/> - <source>-- Decryption Error (failed to communicate with DB) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment> + <location line="+3"/> + <source>Hang up</source> <translation type="unfinished"></translation> </message> <message> - <location line="+20"/> - <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <location filename="../../src/TextInputWidget.h" line="-5"/> + <source>Connection lost. Nheko is trying to re-connect...</source> <translation type="unfinished"></translation> </message> +</context> +<context> + <name>TimelineModel</name> <message> - <location line="+13"/> - <source>-- Decryption Error (%1) --</source> - <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1.</comment> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> + <source>Message redaction failed: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="+99"/> - <source>Message redaction failed: %1</source> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> <translation type="unfinished"></translation> </message> <message> - <location line="+488"/> + <location line="+195"/> <source>Save image</source> <translation type="unfinished">Αποθήκευση Εικόνας</translation> </message> @@ -693,20 +801,8 @@ Example: https://server.my:8787</source> <source>Save file</source> <translation type="unfinished"></translation> </message> - <message> - <location line="-643"/> - <source>-- Encrypted Event (No keys found for decryption) --</source> - <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+82"/> - <source>-- Encrypted Event (Unknown event type) --</source> - <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> - <translation type="unfinished"></translation> - </message> <message numerus="yes"> - <location line="+693"/> + <location line="+129"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation type="unfinished"> @@ -760,7 +856,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+48"/> + <location line="+33"/> <source>%1 was invited.</source> <translation type="unfinished"></translation> </message> @@ -825,12 +921,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-1281"/> + <location line="-943"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1283"/> + <location line="+945"/> <source>Rejected the knock from %1.</source> <translation type="unfinished"></translation> </message> @@ -854,12 +950,12 @@ Example: https://server.my:8787</source> <context> <name>TimelineRow</name> <message> - <location filename="../qml/TimelineRow.qml" line="+91"/> + <location filename="../qml/TimelineRow.qml" line="+94"/> <source>React</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> + <location line="+16"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -872,7 +968,7 @@ Example: https://server.my:8787</source> <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+54"/> + <location filename="../qml/TimelineView.qml" line="+61"/> <source>React</source> <translation type="unfinished"></translation> </message> @@ -912,47 +1008,50 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+12"/> <source>No room open</source> <translation type="unfinished"></translation> </message> <message> - <location line="+271"/> - <source>Close</source> + <location line="+53"/> + <source>Back to room list</source> <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TopRoomBar</name> <message> - <location filename="../../src/TopRoomBar.cpp" line="+86"/> - <source>Room options</source> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Mentions</source> + <location line="+28"/> + <source>Room options</source> <translation type="unfinished"></translation> </message> <message> - <location line="+34"/> + <location line="+7"/> <source>Invite users</source> - <translation>Î Ïοσκάλεσε χÏήστες</translation> + <translation type="unfinished">Î Ïοσκάλεσε χÏήστες</translation> </message> <message> - <location line="+6"/> + <location line="+4"/> <source>Members</source> - <translation>ΜÎλη</translation> + <translation type="unfinished">ΜÎλη</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Leave room</source> - <translation>ΒγÎÏ‚ από τη συνομιλία</translation> + <translation type="unfinished">ΒγÎÏ‚</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Settings</source> - <translation>Ρυθμίσεις</translation> + <translation type="unfinished">Ρυθμίσεις</translation> + </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation type="unfinished"></translation> </message> </context> <context> @@ -1014,7 +1113,7 @@ Example: https://server.my:8787</source> <context> <name>UserSettingsPage</name> <message> - <location filename="../../src/UserSettingsPage.cpp" line="+535"/> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> <source>Minimize to tray</source> <translation>Ελαχιστοποίηση</translation> </message> @@ -1034,7 +1133,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-5"/> + <location line="-63"/> + <source>CALLS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+58"/> <source>Keep the application running in the background after closing the client window.</source> <translation type="unfinished"></translation> </message> @@ -1197,7 +1301,17 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Φόντο</translation> </message> <message> - <location line="+3"/> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> <source>Device ID</source> <translation type="unfinished"></translation> </message> @@ -1207,7 +1321,7 @@ This usually causes the application icon in the task bar to animate in some fash <translation type="unfinished"></translation> </message> <message> - <location line="-113"/> + <location line="-120"/> <source>Session Keys</source> <translation type="unfinished"></translation> </message> @@ -1227,22 +1341,22 @@ This usually causes the application icon in the task bar to animate in some fash <translation type="unfinished"></translation> </message> <message> - <location line="-71"/> + <location line="-78"/> <source>GENERAL</source> <translation>ΓΕÎΙΚΑ</translation> </message> <message> - <location line="+29"/> + <location line="+30"/> <source>INTERFACE</source> <translation type="unfinished"></translation> </message> <message> - <location line="+166"/> + <location line="+172"/> <source>Emoji Font Family</source> <translation type="unfinished"></translation> </message> <message> - <location line="+179"/> + <location line="+191"/> <source>Open Sessions File</source> <translation type="unfinished"></translation> </message> @@ -1314,11 +1428,24 @@ This usually causes the application icon in the task bar to animate in some fash <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+147"/> + <location filename="../../src/Utils.cpp" line="+146"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> </context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation type="unfinished">Αποδοχή</translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>dialogs::CreateRoom</name> <message> @@ -1442,6 +1569,19 @@ This usually causes the application icon in the task bar to animate in some fash <translation>ΑποσÏνδεση. Είστε σίγουÏοι;</translation> </message> </context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation type="unfinished">ΆκυÏο</translation> + </message> +</context> <context> <name>dialogs::PreviewUploadOverlay</name> <message> @@ -1638,7 +1778,7 @@ Media size: %2 <context> <name>dialogs::UserProfile</name> <message> - <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> <source>Ban the user from the room</source> <translation type="unfinished"></translation> </message> @@ -1658,7 +1798,17 @@ Media size: %2 <translation type="unfinished"></translation> </message> <message> - <location line="+61"/> + <location line="+14"/> + <source>Confirm DM</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+54"/> <source>Devices</source> <translation type="unfinished"></translation> </message> @@ -1709,7 +1859,7 @@ Media size: %2 <context> <name>message-description sent:</name> <message> - <location filename="../../src/Utils.h" line="+103"/> + <location filename="../../src/Utils.h" line="+106"/> <source>You sent an audio clip</source> <translation type="unfinished"></translation> </message> @@ -1788,6 +1938,36 @@ Media size: %2 <source>%1 sent an encrypted message</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+5"/> + <source>You placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You ended a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 ended a call</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>popups::UserMentions</name> diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts index 1e9128d0822a77e9639618d3707c7fcae031ae06..bfbbd987600b43f6866a523a9f89688e6ddd52e1 100644 --- a/resources/langs/nheko_en.ts +++ b/resources/langs/nheko_en.ts @@ -4,7 +4,7 @@ <context> <name>Cache</name> <message> - <location filename="../../src/Cache.cpp" line="+1359"/> + <location filename="../../src/Cache.cpp" line="+1658"/> <source>You joined this room.</source> <translation>You joined this room.</translation> </message> @@ -12,33 +12,53 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+229"/> + <location filename="../../src/ChatPage.cpp" line="+218"/> <source>Failed to invite user: %1</source> <translation>Failed to invite user: %1</translation> </message> <message> <location line="+4"/> - <location line="+926"/> + <location line="+947"/> <source>Invited user: %1</source> <translation>Invited user: %1</translation> </message> <message> - <location line="-474"/> + <location line="-458"/> <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> <translation>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</translation> </message> <message> - <location line="+439"/> + <location line="+415"/> <source>Room %1 created.</source> <translation>Room %1 created.</translation> </message> <message> - <location line="+30"/> + <location line="+26"/> + <source>Confirm invite</source> + <translation>Confirm invite</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation>Do you really want to invite %1 (%2)?</translation> + </message> + <message> + <location line="+11"/> <source>Failed to invite %1 to %2: %3</source> <translation>Failed to invite %1 to %2: %3</translation> </message> <message> - <location line="+19"/> + <location line="+15"/> + <source>Confirm kick</source> + <translation>Confirm kick</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation>Do you really want to kick %1 (%2)?</translation> + </message> + <message> + <location line="+11"/> <source>Failed to kick %1 to %2: %3</source> <translation>Failed to kick %1 to %2: %3</translation> </message> @@ -48,7 +68,17 @@ <translation>Kicked user: %1</translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm ban</source> + <translation>Confirm ban</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation>Do you really want to ban %1 (%2)?</translation> + </message> + <message> + <location line="+11"/> <source>Failed to ban %1 in %2: %3</source> <translation>Failed to ban %1 in %2: %3</translation> </message> @@ -58,7 +88,17 @@ <translation>Banned user: %1</translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm unban</source> + <translation>Confirm unban</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation>Do you really want to unban %1 (%2)?</translation> + </message> + <message> + <location line="+11"/> <source>Failed to unban %1 in %2: %3</source> <translation>Failed to unban %1 in %2: %3</translation> </message> @@ -68,12 +108,12 @@ <translation>Unbanned user: %1</translation> </message> <message> - <location line="-828"/> + <location line="-874"/> <source>Failed to upload media. Please try again.</source> <translation>Failed to upload media. Please try again.</translation> </message> <message> - <location line="+296"/> + <location line="+334"/> <source>Cache migration failed!</source> <translation>Cache migration failed!</translation> </message> @@ -88,28 +128,28 @@ <translation>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</translation> </message> <message> - <location line="+111"/> + <location line="+67"/> <source>Failed to restore OLM account. Please login again.</source> <translation>Failed to restore OLM account. Please login again.</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Failed to restore save data. Please login again.</source> <translation>Failed to restore save data. Please login again.</translation> </message> <message> - <location line="+156"/> + <location line="+165"/> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <translation>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</translation> </message> <message> - <location line="+54"/> - <location line="+252"/> + <location line="+99"/> + <location line="+251"/> <source>Please try to login again: %1</source> <translation>Please try to login again: %1</translation> </message> <message> - <location line="-187"/> + <location line="-219"/> <source>Failed to join room: %1</source> <translation>Failed to join room: %1</translation> </message> @@ -155,7 +195,7 @@ <location line="+2"/> <source>Server Notices</source> <comment>Tag translation for m.server_notice</comment> - <translation type="unfinished"></translation> + <translation>Server Notices</translation> </message> <message> <location line="+2"/> @@ -203,42 +243,42 @@ <message> <location line="-42"/> <source>People</source> - <translation type="unfinished"></translation> + <translation>People</translation> </message> <message> <location line="+2"/> <source>Nature</source> - <translation type="unfinished"></translation> + <translation>Nature</translation> </message> <message> <location line="+2"/> <source>Food</source> - <translation type="unfinished"></translation> + <translation>Food</translation> </message> <message> <location line="+2"/> <source>Activity</source> - <translation type="unfinished">Activity</translation> + <translation>Activity</translation> </message> <message> <location line="+2"/> <source>Travel</source> - <translation type="unfinished"></translation> + <translation>Travel</translation> </message> <message> <location line="+2"/> <source>Objects</source> - <translation type="unfinished">Objects</translation> + <translation>Objects</translation> </message> <message> <location line="+2"/> <source>Symbols</source> - <translation type="unfinished">Symbols</translation> + <translation>Symbols</translation> </message> <message> <location line="+2"/> <source>Flags</source> - <translation type="unfinished">Flags</translation> + <translation>Flags</translation> </message> </context> <context> @@ -251,7 +291,44 @@ <message> <location line="+2"/> <source>This message is not encrypted!</source> - <translation type="unfinished"></translation> + <translation>This message is not encrypted!</translation> + </message> +</context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation>-- Encrypted Event (No keys found for decryption) --</translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation>-- Decryption Error (failed to retrieve megolm keys from db) --</translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation>-- Decryption Error (%1) --</translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation>-- Encrypted Event (Unknown event type) --</translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation>-- Replay attack! This message index was reused! --</translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation>-- Message by unverified device! --</translation> </message> </context> <context> @@ -298,7 +375,7 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th <message> <location line="+2"/> <source>A name for this device, which will be shown to others, when verifying your devices. If none is provided a default is used.</source> - <translation type="unfinished"></translation> + <translation>A name for this device, which will be shown to others, when verifying your devices. If none is provided a default is used.</translation> </message> <message> <location line="+6"/> @@ -371,6 +448,7 @@ Example: https://server.my:8787</translation> <name>MessageDelegate</name> <message> <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> <source>redacted</source> <translation>redacted</translation> </message> @@ -405,12 +483,27 @@ Example: https://server.my:8787</translation> <translation>%1 created and configured room: %2</translation> </message> <message> - <location line="+6"/> - <source>%1 placed a %2 call.</source> - <translation>%1 placed a %2 call.</translation> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation>%1 placed a voice call.</translation> </message> <message> - <location line="+6"/> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation>%1 placed a video call.</translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation>%1 placed a call.</translation> + </message> + <message> + <location line="+19"/> + <source>Negotiating call...</source> + <translation>Negotiating call…</translation> + </message> + <message> + <location line="-12"/> <source>%1 answered the call.</source> <translation>%1 answered the call.</translation> </message> @@ -507,7 +600,7 @@ Example: https://server.my:8787</translation> <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+984"/> + <location filename="../../src/Cache.cpp" line="+1443"/> <source>no version stored</source> <translation>no version stored</translation> </message> @@ -522,49 +615,49 @@ Example: https://server.my:8787</translation> <message> <location line="+7"/> <source>Tag room as:</source> - <translation type="unfinished"></translation> + <translation>Tag room as:</translation> </message> <message> <location line="+18"/> <source>Favourite</source> <comment>Standard matrix tag for favourites</comment> - <translation type="unfinished"></translation> + <translation>Favourite</translation> </message> <message> <location line="+3"/> <source>Low Priority</source> <comment>Standard matrix tag for low priority rooms</comment> - <translation type="unfinished"></translation> + <translation>Low Priority</translation> </message> <message> <location line="+3"/> <source>Server Notice</source> <comment>Standard matrix tag for server notices</comment> - <translation type="unfinished"></translation> + <translation>Server Notice</translation> </message> <message> <location line="+12"/> <source>Adds or removes the specified tag.</source> <comment>WhatsThis hint for tag menu actions</comment> - <translation type="unfinished"></translation> + <translation>Adds or removes the specified tag.</translation> </message> <message> <location line="+38"/> <source>New tag...</source> <comment>Add a new tag to the room</comment> - <translation type="unfinished"></translation> + <translation>New tag…</translation> </message> <message> <location line="+4"/> <source>New Tag</source> <comment>Tag name prompt title</comment> - <translation type="unfinished"></translation> + <translation>New Tag</translation> </message> <message> <location line="+1"/> <source>Tag:</source> <comment>Tag name prompt</comment> - <translation type="unfinished"></translation> + <translation>Tag:</translation> </message> <message> <location line="+173"/> @@ -631,13 +724,13 @@ Example: https://server.my:8787</translation> <context> <name>TextInputWidget</name> <message> - <location filename="../../src/TextInputWidget.cpp" line="+460"/> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> <source>Send a file</source> <translation>Send a file</translation> </message> <message> <location line="+13"/> - <location filename="../../src/TextInputWidget.h" line="+145"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> <source>Write a message...</source> <translation>Write a message…</translation> </message> @@ -652,7 +745,7 @@ Example: https://server.my:8787</translation> <translation>Emoji</translation> </message> <message> - <location line="+86"/> + <location line="+94"/> <source>Select a file</source> <translation>Select a file</translation> </message> @@ -661,6 +754,16 @@ Example: https://server.my:8787</translation> <source>All Files (*)</source> <translation>All Files (*)</translation> </message> + <message> + <location line="+64"/> + <source>Place a call</source> + <translation>Place a call</translation> + </message> + <message> + <location line="+3"/> + <source>Hang up</source> + <translation>Hang up</translation> + </message> <message> <location filename="../../src/TextInputWidget.h" line="-5"/> <source>Connection lost. Nheko is trying to re-connect...</source> @@ -670,30 +773,20 @@ Example: https://server.my:8787</translation> <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+891"/> - <source>-- Decryption Error (failed to communicate with DB) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment> - <translation>-- Decryption Error (failed to communicate with DB) --</translation> - </message> - <message> - <location line="+20"/> - <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> - <translation>-- Decryption Error (failed to retrieve megolm keys from db) --</translation> - </message> - <message> - <location line="+13"/> - <source>-- Decryption Error (%1) --</source> - <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1.</comment> - <translation>-- Decryption Error (%1) --</translation> - </message> - <message> - <location line="+99"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> <source>Message redaction failed: %1</source> <translation>Message redaction failed: %1</translation> </message> <message> - <location line="+488"/> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> + <translation>Failed to encrypt event, sending aborted!</translation> + </message> + <message> + <location line="+195"/> <source>Save image</source> <translation>Save image</translation> </message> @@ -712,20 +805,8 @@ Example: https://server.my:8787</translation> <source>Save file</source> <translation>Save file</translation> </message> - <message> - <location line="-643"/> - <source>-- Encrypted Event (No keys found for decryption) --</source> - <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> - <translation>-- Encrypted Event (No keys found for decryption) --</translation> - </message> - <message> - <location line="+82"/> - <source>-- Encrypted Event (Unknown event type) --</source> - <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> - <translation>-- Encrypted Event (Unknown event type) --</translation> - </message> <message numerus="yes"> - <location line="+693"/> + <location line="+129"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation> @@ -779,7 +860,7 @@ Example: https://server.my:8787</translation> <translation>%1 has changed the room's permissions.</translation> </message> <message> - <location line="+48"/> + <location line="+33"/> <source>%1 was invited.</source> <translation>%1 was invited.</translation> </message> @@ -801,7 +882,7 @@ Example: https://server.my:8787</translation> <message> <location line="+2"/> <source>%1 changed some profile info.</source> - <translation type="unfinished"></translation> + <translation>%1 changed some profile info.</translation> </message> <message> <location line="+4"/> @@ -844,12 +925,12 @@ Example: https://server.my:8787</translation> <translation>%1 redacted their knock.</translation> </message> <message> - <location line="-1281"/> + <location line="-943"/> <source>You joined this room.</source> <translation>You joined this room.</translation> </message> <message> - <location line="+1283"/> + <location line="+945"/> <source>Rejected the knock from %1.</source> <translation>Rejected the knock from %1.</translation> </message> @@ -873,12 +954,12 @@ Example: https://server.my:8787</translation> <context> <name>TimelineRow</name> <message> - <location filename="../qml/TimelineRow.qml" line="+91"/> + <location filename="../qml/TimelineRow.qml" line="+94"/> <source>React</source> - <translation type="unfinished"></translation> + <translation>React</translation> </message> <message> - <location line="+17"/> + <location line="+16"/> <source>Reply</source> <translation>Reply</translation> </message> @@ -891,9 +972,9 @@ Example: https://server.my:8787</translation> <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+54"/> + <location filename="../qml/TimelineView.qml" line="+61"/> <source>React</source> - <translation type="unfinished"></translation> + <translation>React</translation> </message> <message> <location line="+4"/> @@ -931,48 +1012,51 @@ Example: https://server.my:8787</translation> <translation>Save as</translation> </message> <message> - <location line="+14"/> + <location line="+12"/> <source>No room open</source> <translation>No room open</translation> </message> <message> - <location line="+271"/> - <source>Close</source> - <translation>Close</translation> + <location line="+53"/> + <source>Back to room list</source> + <translation>Back to room list</translation> </message> -</context> -<context> - <name>TopRoomBar</name> <message> - <location filename="../../src/TopRoomBar.cpp" line="+86"/> - <source>Room options</source> - <translation>Room options</translation> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> + <translation>No room selected</translation> </message> <message> - <location line="+5"/> - <source>Mentions</source> - <translation>Mentions</translation> + <location line="+28"/> + <source>Room options</source> + <translation>Room options</translation> </message> <message> - <location line="+34"/> + <location line="+7"/> <source>Invite users</source> <translation>Invite users</translation> </message> <message> - <location line="+6"/> + <location line="+4"/> <source>Members</source> <translation>Members</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Leave room</source> <translation>Leave room</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Settings</source> <translation>Settings</translation> </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation>Close</translation> + </message> </context> <context> <name>TrayIcon</name> @@ -997,43 +1081,43 @@ Example: https://server.my:8787</translation> <message> <location line="+20"/> <source>Set custom status message</source> - <translation type="unfinished"></translation> + <translation>Set custom status message</translation> </message> <message> <location line="+4"/> <source>Custom status message</source> - <translation type="unfinished"></translation> + <translation>Custom status message</translation> </message> <message> <location line="+1"/> <source>Status:</source> - <translation type="unfinished"></translation> + <translation>Status:</translation> </message> <message> <location line="+9"/> <source>Set presence automatically</source> - <translation type="unfinished"></translation> + <translation>Set presence automatically</translation> </message> <message> <location line="+6"/> <source>Online</source> - <translation type="unfinished"></translation> + <translation>Online</translation> </message> <message> <location line="+5"/> <source>Unavailable</source> - <translation type="unfinished"></translation> + <translation>Unavailable</translation> </message> <message> <location line="+6"/> <source>Offline</source> - <translation type="unfinished"></translation> + <translation>Offline</translation> </message> </context> <context> <name>UserSettingsPage</name> <message> - <location filename="../../src/UserSettingsPage.cpp" line="+535"/> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> <source>Minimize to tray</source> <translation>Minimize to tray</translation> </message> @@ -1053,25 +1137,31 @@ Example: https://server.my:8787</translation> <translation>Circular Avatars</translation> </message> <message> - <location line="-5"/> + <location line="-63"/> + <source>CALLS</source> + <translation>CALLS</translation> + </message> + <message> + <location line="+58"/> <source>Keep the application running in the background after closing the client window.</source> - <translation type="unfinished"></translation> + <translation>Keep the application running in the background after closing the client window.</translation> </message> <message> <location line="+3"/> <source>Start the application in the background without showing the client window.</source> - <translation type="unfinished"></translation> + <translation>Start the application in the background without showing the client window.</translation> </message> <message> <location line="+4"/> <source>Change the appearance of user avatars in chats. OFF - square, ON - Circle.</source> - <translation type="unfinished"></translation> + <translation>Change the appearance of user avatars in chats. +OFF - square, ON - Circle.</translation> </message> <message> <location line="+3"/> <source>Show a column containing groups and tags next to the room list.</source> - <translation type="unfinished"></translation> + <translation>Show a column containing groups and tags next to the room list.</translation> </message> <message> <location line="+1"/> @@ -1082,7 +1172,8 @@ OFF - square, ON - Circle.</source> <location line="+2"/> <source>Decrypt the messages shown in the sidebar. Only affects messages in encrypted chats.</source> - <translation type="unfinished"></translation> + <translation>Decrypt the messages shown in the sidebar. +Only affects messages in encrypted chats.</translation> </message> <message> <location line="+2"/> @@ -1092,17 +1183,17 @@ Only affects messages in encrypted chats.</source> <message> <location line="+2"/> <source>Show buttons to quickly reply, react or access additional options next to each message.</source> - <translation type="unfinished"></translation> + <translation>Show buttons to quickly reply, react or access additional options next to each message.</translation> </message> <message> <location line="+2"/> <source>Limit width of timeline</source> - <translation type="unfinished"></translation> + <translation>Limit width of timeline</translation> </message> <message> <location line="+2"/> <source>Set the max width of messages in the timeline (in pixels). This can help readability on wide screen, when Nheko is maximised</source> - <translation type="unfinished"></translation> + <translation>Set the max width of messages in the timeline (in pixels). This can help readability on wide screen, when Nheko is maximised.</translation> </message> <message> <location line="+2"/> @@ -1113,7 +1204,8 @@ Only affects messages in encrypted chats.</source> <location line="+2"/> <source>Show who is typing in a room. This will also enable or disable sending typing notifications to others.</source> - <translation type="unfinished"></translation> + <translation>Show who is typing in a room. +This will also enable or disable sending typing notifications to others.</translation> </message> <message> <location line="+3"/> @@ -1125,7 +1217,9 @@ This will also enable or disable sending typing notifications to others.</source <source>Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms, that you have muted, will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms.</source> - <translation type="unfinished"></translation> + <translation>Display rooms with new messages first. +If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. +If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms, that you have muted, will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms.</translation> </message> <message> <location line="+7"/> @@ -1136,7 +1230,8 @@ If this is on, rooms which have active notifications (the small circle with a nu <location line="+2"/> <source>Show if your message was read. Status is displayed next to timestamps.</source> - <translation type="unfinished"></translation> + <translation>Show if your message was read. +Status is displayed next to timestamps.</translation> </message> <message> <location line="+2"/> @@ -1147,7 +1242,8 @@ Status is displayed next to timestamps.</source> <location line="+2"/> <source>Allow using markdown in messages. When disabled, all messages are sent as a plain text.</source> - <translation type="unfinished"></translation> + <translation>Allow using markdown in messages. +When disabled, all messages are sent as a plain text.</translation> </message> <message> <location line="+2"/> @@ -1157,38 +1253,39 @@ When disabled, all messages are sent as a plain text.</source> <message> <location line="+2"/> <source>Notify about received message when the client is not currently focused.</source> - <translation type="unfinished"></translation> + <translation>Notify about received message when the client is not currently focused.</translation> </message> <message> <location line="+1"/> <source>Alert on notification</source> - <translation type="unfinished"></translation> + <translation>Alert on notification</translation> </message> <message> <location line="+2"/> <source>Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion.</source> - <translation type="unfinished"></translation> + <translation>Show an alert when a message is received. +This usually causes the application icon in the task bar to animate in some fashion.</translation> </message> <message> <location line="+2"/> <source>Highlight message on hover</source> - <translation type="unfinished"></translation> + <translation>Highlight message on hover</translation> </message> <message> <location line="+2"/> <source>Change the background color of messages when you hover over them.</source> - <translation type="unfinished"></translation> + <translation>Change the background color of messages when you hover over them.</translation> </message> <message> <location line="+1"/> <source>Large Emoji in timeline</source> - <translation type="unfinished"></translation> + <translation>Large Emoji in timeline</translation> </message> <message> <location line="+2"/> <source>Make font size larger if messages with only a few emojis are displayed.</source> - <translation type="unfinished"></translation> + <translation>Make font size larger if messages with only a few emojis are displayed.</translation> </message> <message> <location line="+5"/> @@ -1198,7 +1295,7 @@ This usually causes the application icon in the task bar to animate in some fash <message> <location line="+2"/> <source>Change the scale factor of the whole user interface.</source> - <translation type="unfinished"></translation> + <translation>Change the scale factor of the whole user interface.</translation> </message> <message> <location line="+4"/> @@ -1216,7 +1313,17 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Theme</translation> </message> <message> - <location line="+3"/> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation>Allow fallback call assist server</translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation>Will use turn.matrix.org as assist when your home server does not offer one.</translation> + </message> + <message> + <location line="+4"/> <source>Device ID</source> <translation>Device ID</translation> </message> @@ -1226,7 +1333,7 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Device Fingerprint</translation> </message> <message> - <location line="-113"/> + <location line="-120"/> <source>Session Keys</source> <translation>Session Keys</translation> </message> @@ -1246,22 +1353,22 @@ This usually causes the application icon in the task bar to animate in some fash <translation>ENCRYPTION</translation> </message> <message> - <location line="-71"/> + <location line="-78"/> <source>GENERAL</source> <translation>GENERAL</translation> </message> <message> - <location line="+29"/> + <location line="+30"/> <source>INTERFACE</source> <translation>INTERFACE</translation> </message> <message> - <location line="+166"/> + <location line="+172"/> <source>Emoji Font Family</source> <translation>Emoji Font Family</translation> </message> <message> - <location line="+179"/> + <location line="+191"/> <source>Open Sessions File</source> <translation>Open Sessions File</translation> </message> @@ -1333,11 +1440,24 @@ This usually causes the application icon in the task bar to animate in some fash <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+147"/> + <location filename="../../src/Utils.cpp" line="+146"/> <source>Yesterday</source> <translation>Yesterday</translation> </message> </context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation>Accept</translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation>Reject</translation> + </message> +</context> <context> <name>dialogs::CreateRoom</name> <message> @@ -1461,6 +1581,19 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Logout. Are you sure?</translation> </message> </context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation>Voice</translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation>Cancel</translation> + </message> +</context> <context> <name>dialogs::PreviewUploadOverlay</name> <message> @@ -1661,7 +1794,7 @@ Media size: %2 <context> <name>dialogs::UserProfile</name> <message> - <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> <source>Ban the user from the room</source> <translation>Ban the user from the room</translation> </message> @@ -1681,7 +1814,17 @@ Media size: %2 <translation>Start a conversation</translation> </message> <message> - <location line="+61"/> + <location line="+14"/> + <source>Confirm DM</source> + <translation>Confirm DM</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation>Do you really want to invite %1 (%2) to a direct chat?</translation> + </message> + <message> + <location line="+54"/> <source>Devices</source> <translation>Devices</translation> </message> @@ -1732,7 +1875,7 @@ Media size: %2 <context> <name>message-description sent:</name> <message> - <location filename="../../src/Utils.h" line="+103"/> + <location filename="../../src/Utils.h" line="+106"/> <source>You sent an audio clip</source> <translation>You sent an audio clip</translation> </message> diff --git a/resources/langs/nheko_et.ts b/resources/langs/nheko_et.ts new file mode 100644 index 0000000000000000000000000000000000000000..f3a51bb97d4b3123cc79b64c1fc317c8f8dffb6e --- /dev/null +++ b/resources/langs/nheko_et.ts @@ -0,0 +1,2009 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="et"> +<context> + <name>Cache</name> + <message> + <location filename="../../src/Cache.cpp" line="+1658"/> + <source>You joined this room.</source> + <translation>Sa liitusid selle jututoaga.</translation> + </message> +</context> +<context> + <name>ChatPage</name> + <message> + <location filename="../../src/ChatPage.cpp" line="+218"/> + <source>Failed to invite user: %1</source> + <translation>Kutse saatmine kasutajale ei õnnestunud: %1</translation> + </message> + <message> + <location line="+4"/> + <location line="+947"/> + <source>Invited user: %1</source> + <translation>Kutsutud kasutaja: %1</translation> + </message> + <message> + <location line="-458"/> + <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> + <translation>Puhverdatud andmete muutmine sobivaks rakenduse praeguse versiooniga ei õnnestunud. Sellel võib olla erinevaid põhjuseid. Palun saada meile veateade ja seni kasuta vanemat rakenduse versiooni. Aga kui sa soovid proovida, siis kustuta puhverdatud andmed käsitsi.</translation> + </message> + <message> + <location line="+415"/> + <source>Room %1 created.</source> + <translation>%1 jututuba on loodud.</translation> + </message> + <message> + <location line="+26"/> + <source>Confirm invite</source> + <translation>Kinnita kutse</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation>Kas sa tõesti soovid saata kutset kasutajale %1 (%2)?</translation> + </message> + <message> + <location line="+11"/> + <source>Failed to invite %1 to %2: %3</source> + <translation>Kasutaja %1 kutsumine %2 jututuppa ei õnnestunud: %3</translation> + </message> + <message> + <location line="+15"/> + <source>Confirm kick</source> + <translation>Kinnita väljamüksamine</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation>Kas sa tõesti soovid müksata kasutaja %1 (%2) jututoast välja?</translation> + </message> + <message> + <location line="+11"/> + <source>Failed to kick %1 to %2: %3</source> + <translation>Kasutaja %1 välja müksamine %2 jututoast ei õnnestunud: %3</translation> + </message> + <message> + <location line="+5"/> + <source>Kicked user: %1</source> + <translation>Väljamüksatud kasutaja: %1</translation> + </message> + <message> + <location line="+10"/> + <source>Confirm ban</source> + <translation>Kinnita suhtluskeeld</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation>Kas sa tõesti soovid kasutajale %1 (%2) seada suhtluskeeldu?</translation> + </message> + <message> + <location line="+11"/> + <source>Failed to ban %1 in %2: %3</source> + <translation>Kasutajale %1 suhtluskeelu seadmine %2 jututoas ei õnnestunud: %3</translation> + </message> + <message> + <location line="+5"/> + <source>Banned user: %1</source> + <translation>Suhtluskeeld kasutajale: %1</translation> + </message> + <message> + <location line="+10"/> + <source>Confirm unban</source> + <translation>Kinnita suhtluskeelu eemaldamine</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation>Kas sa tõesti soovid kasutajalt %1 (%2) eemaldada suhtluskeelu?</translation> + </message> + <message> + <location line="+11"/> + <source>Failed to unban %1 in %2: %3</source> + <translation>Kasutajalt %1 suhtluskeelu eemaldamine %2 jututoas ei õnnestunud: %3</translation> + </message> + <message> + <location line="+5"/> + <source>Unbanned user: %1</source> + <translation>Suhtluskeeld eemaldatud: %1</translation> + </message> + <message> + <location line="-874"/> + <source>Failed to upload media. Please try again.</source> + <translation>Meediafailide üleslaadimine ei õnnestunud. Palun proovi uuesti.</translation> + </message> + <message> + <location line="+334"/> + <source>Cache migration failed!</source> + <translation>Puhvri versiooniuuendus ebaõnnestus!</translation> + </message> + <message> + <location line="+13"/> + <source>Incompatible cache version</source> + <translation>Mitteühilduv puhvri versioon</translation> + </message> + <message> + <location line="+1"/> + <source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source> + <translation>Sinu andmekandjale salvestatud puhvri versioon on uuem, kui käesolev Nheko versioon kasutada oskab. Palun tee Nheko uuendus või kustuta puhverdatud andmed.</translation> + </message> + <message> + <location line="+67"/> + <source>Failed to restore OLM account. Please login again.</source> + <translation>OLM konto taastamine ei õnnestunud. Palun logi uuesti sisse.</translation> + </message> + <message> + <location line="+4"/> + <source>Failed to restore save data. Please login again.</source> + <translation>Salvestatud andmete taastamine ei õnnestunud. Palun logi uuesti sisse.</translation> + </message> + <message> + <location line="+165"/> + <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> + <translation>Krüptovõtmete kasutusele võtmine ei õnnestunud. Koduserveri vastus päringule: %1 %2. Palun proovi hiljem uuesti.</translation> + </message> + <message> + <location line="+99"/> + <location line="+251"/> + <source>Please try to login again: %1</source> + <translation>Palun proovi uuesti sisse logida: %1</translation> + </message> + <message> + <location line="-219"/> + <source>Failed to join room: %1</source> + <translation>Jututoaga liitumine ei õnnestunud: %1</translation> + </message> + <message> + <location line="+5"/> + <source>You joined the room</source> + <translation>Sa liitusid selle jututoaga</translation> + </message> + <message> + <location line="+6"/> + <source>Failed to remove invite: %1</source> + <translation>Kutse tagasivõtmine ei õnnestunud: %1</translation> + </message> + <message> + <location line="+19"/> + <source>Room creation failed: %1</source> + <translation>Jututoa loomine ei õnnestunud: %1</translation> + </message> + <message> + <location line="+16"/> + <source>Failed to leave room: %1</source> + <translation>Jututoast lahkumine ei õnnestunud: %1</translation> + </message> +</context> +<context> + <name>CommunitiesListItem</name> + <message> + <location filename="../../src/CommunitiesListItem.cpp" line="+133"/> + <source>All rooms</source> + <translation>Kõik jututoad</translation> + </message> + <message> + <location line="+4"/> + <source>Favourite rooms</source> + <translation>Eelistatud jututoad</translation> + </message> + <message> + <location line="+2"/> + <source>Low priority rooms</source> + <translation>Vähetähtsad jututoad</translation> + </message> + <message> + <location line="+2"/> + <source>Server Notices</source> + <comment>Tag translation for m.server_notice</comment> + <translation>Serveriteated</translation> + </message> + <message> + <location line="+2"/> + <location line="+2"/> + <source> (tag)</source> + <translation> (silt)</translation> + </message> + <message> + <location line="+3"/> + <source> (community)</source> + <translation> (kogukond)</translation> + </message> +</context> +<context> + <name>EditModal</name> + <message> + <location filename="../../src/dialogs/RoomSettings.cpp" line="+72"/> + <source>Apply</source> + <translation>Rakenda</translation> + </message> + <message> + <location line="+1"/> + <source>Cancel</source> + <translation>Tühista</translation> + </message> + <message> + <location line="+10"/> + <source>Name</source> + <translation>Nimi</translation> + </message> + <message> + <location line="+2"/> + <source>Topic</source> + <translation>Teema</translation> + </message> +</context> +<context> + <name>EmojiPicker</name> + <message> + <location filename="../qml/emoji/EmojiPicker.qml" line="+117"/> + <location line="+139"/> + <source>Search</source> + <translation>Otsi</translation> + </message> + <message> + <location line="-42"/> + <source>People</source> + <translation>Inimesed</translation> + </message> + <message> + <location line="+2"/> + <source>Nature</source> + <translation>Loodus</translation> + </message> + <message> + <location line="+2"/> + <source>Food</source> + <translation>Toit</translation> + </message> + <message> + <location line="+2"/> + <source>Activity</source> + <translation>Tegevused</translation> + </message> + <message> + <location line="+2"/> + <source>Travel</source> + <translation>Reisimine</translation> + </message> + <message> + <location line="+2"/> + <source>Objects</source> + <translation>Esemed</translation> + </message> + <message> + <location line="+2"/> + <source>Symbols</source> + <translation>Sümbolid</translation> + </message> + <message> + <location line="+2"/> + <source>Flags</source> + <translation>Lipud</translation> + </message> +</context> +<context> + <name>EncryptionIndicator</name> + <message> + <location filename="../qml/EncryptionIndicator.qml" line="+36"/> + <source>Encrypted</source> + <translation>Krüptitud</translation> + </message> + <message> + <location line="+2"/> + <source>This message is not encrypted!</source> + <translation>See sõnum on krüptimata!</translation> + </message> +</context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation>-- Krüptitud sündmus (Dekrüptimisvõtmeid ei leidunud) --</translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation>-- Dekrüptimise viga (megolm'i võtmete laadimine andmebaasist ei õnnestunud) --</translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation>-- Dekrüptimise viga (%1) --</translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation>-- Krüptitud sündmus (Tundmatu sündmuse tüüp) --</translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation>-- Kordusel põhinev rünne! Selle sõnumi indeksit on uuesti kasutatud! --</translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation>-- Sõnum verifitseerimata seadmest! --</translation> + </message> +</context> +<context> + <name>InviteeItem</name> + <message> + <location filename="../../src/InviteeItem.cpp" line="+18"/> + <source>Remove</source> + <translation>Eemalda</translation> + </message> +</context> +<context> + <name>LoginPage</name> + <message> + <location filename="../../src/LoginPage.cpp" line="+90"/> + <source>Matrix ID</source> + <translation>Matrix'i kasutajatunnus</translation> + </message> + <message> + <location line="+1"/> + <source>e.g @joe:matrix.org</source> + <translation>näiteks @kadri:matrix.org</translation> + </message> + <message> + <location line="+2"/> + <source>Your login name. A mxid should start with @ followed by the user id. After the user id you need to include your server name after a :. +You can also put your homeserver address there, if your server doesn't support .well-known lookup. +Example: @user:server.my +If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source> + <translation>Sinu kasutajanimi sisselogimiseks. Matrix'i kasutajatunnus algab @ märgiga ning sellele järgneb kasutajanimi. Seejärel peale koolonit +on sinu koduserveri nimi. Kui sinu koduserver ei toeta .well-known nimelahendust, siis sa võid lisada ka koduserveri aadressi. +Näiteks @kadri:server.minu +Kui Nheko ei suuda tuvastada sinu koduserverit, siis ta kuvab sulle andmevälja selle sisestamiseks.</translation> + </message> + <message> + <location line="+21"/> + <source>Password</source> + <translation>Salasõna</translation> + </message> + <message> + <location line="+5"/> + <source>Device name</source> + <translation>Seadme nimi</translation> + </message> + <message> + <location line="+2"/> + <source>A name for this device, which will be shown to others, when verifying your devices. If none is provided a default is used.</source> + <translation>Selle seadme nimi, mida näidetakse verifitseerimise ajal teisele kasutajatele. Kui sa ise nime ei pane, siis kasutame automaatselt pandud nime.</translation> + </message> + <message> + <location line="+6"/> + <source>The address that can be used to contact you homeservers client API. +Example: https://server.my:8787</source> + <translation>Aadress, mida sinu koduserveri kliendipoole API kasutab. +Näiteks: https://server.minu:8787</translation> + </message> + <message> + <location line="+16"/> + <location line="+191"/> + <source>LOGIN</source> + <translation>LOGI SISSE</translation> + </message> + <message> + <location line="-100"/> + <source>Autodiscovery failed. Received malformed response.</source> + <translation>Koduserveri automaatne tuvastamine ei õnnestunud: päringuvastus oli vigane.</translation> + </message> + <message> + <location line="+6"/> + <source>Autodiscovery failed. Unknown error when requesting .well-known.</source> + <translation>Koduserveri automaatne tuvastamine ei õnnestunud: tundmatu viga .well-known päringu tegemisel.</translation> + </message> + <message> + <location line="+25"/> + <source>The required endpoints were not found. Possibly not a Matrix server.</source> + <translation>Protokolli järgi nõutavaid lõpppunkte ei leidunud. Ilmselt pole tegemist Matrix'i serveriga.</translation> + </message> + <message> + <location line="+6"/> + <source>Received malformed response. Make sure the homeserver domain is valid.</source> + <translation>Päringule sain tagasi vigase vastuse. Palun kontrolli, et koduserveri domeen oleks õige.</translation> + </message> + <message> + <location line="+5"/> + <source>An unknown error occured. Make sure the homeserver domain is valid.</source> + <translation>Tekkis teadmata viga. Palun kontrolli, et koduserveri domeen on õige.</translation> + </message> + <message> + <location line="+55"/> + <source>SSO LOGIN</source> + <translation>ÜHEKORDNE SISSELOGIMINE</translation> + </message> + <message> + <location line="+25"/> + <source>Empty password</source> + <translation>Tühi salasõna</translation> + </message> + <message> + <location line="+52"/> + <source>SSO login failed</source> + <translation>Ühekordne sisselogimine ei õnnestunud</translation> + </message> +</context> +<context> + <name>MemberList</name> + <message> + <location filename="../../src/dialogs/MemberList.cpp" line="+90"/> + <source>Room members</source> + <translation>Jututoa liikmed</translation> + </message> + <message> + <location line="+4"/> + <source>OK</source> + <translation>Sobib</translation> + </message> +</context> +<context> + <name>MessageDelegate</name> + <message> + <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> + <source>redacted</source> + <translation>muudetud</translation> + </message> + <message> + <location line="+6"/> + <source>Encryption enabled</source> + <translation>Krüptimine on kasutusel</translation> + </message> + <message> + <location line="+6"/> + <source>room name changed to: %1</source> + <translation>jututoa uus nimi on: %1</translation> + </message> + <message> + <location line="+0"/> + <source>removed room name</source> + <translation>eemaldas jututoa nime</translation> + </message> + <message> + <location line="+6"/> + <source>topic changed to: %1</source> + <translation>jututoa uus teema on: %1</translation> + </message> + <message> + <location line="+0"/> + <source>removed topic</source> + <translation>teema on eemaldatud</translation> + </message> + <message> + <location line="+6"/> + <source>%1 created and configured room: %2</source> + <translation>%1 lõi ja seadistas jututoa: %2</translation> + </message> + <message> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation>%1 helistas.</translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation>%1 alustas videokõnet.</translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation>%1 helistas.</translation> + </message> + <message> + <location line="+19"/> + <source>Negotiating call...</source> + <translation>Ühendan kõnet…</translation> + </message> + <message> + <location line="-12"/> + <source>%1 answered the call.</source> + <translation>%1 vastas kõnele.</translation> + </message> + <message> + <location line="+6"/> + <source>%1 ended the call.</source> + <translation>%1 lõpetas kõne.</translation> + </message> +</context> +<context> + <name>Placeholder</name> + <message> + <location filename="../qml/delegates/Placeholder.qml" line="+4"/> + <source>unimplemented event: </source> + <translation>implementeerimata sündmus: </translation> + </message> +</context> +<context> + <name>QuickSwitcher</name> + <message> + <location filename="../../src/QuickSwitcher.cpp" line="+74"/> + <source>Search for a room...</source> + <translation>Otsi jututuba…</translation> + </message> +</context> +<context> + <name>RegisterPage</name> + <message> + <location filename="../../src/RegisterPage.cpp" line="+88"/> + <source>Username</source> + <translation>Kasutajanimi</translation> + </message> + <message> + <location line="+3"/> + <source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source> + <translation>Kasutajanimi ei tohi olla tühi ning võib sisaldada vaid a-z, 0-9, ., _, =, -, / tähemärke.</translation> + </message> + <message> + <location line="+4"/> + <source>Password</source> + <translation>Salasõna</translation> + </message> + <message> + <location line="+2"/> + <source>Please choose a secure password. The exact requirements for password strength may depend on your server.</source> + <translation>Palun vali tutvaline salasõna. Täpsemad nõuded salasõnale sõltuvad sinu koduserveri seadistustest.</translation> + </message> + <message> + <location line="+4"/> + <source>Password confirmation</source> + <translation>Korda salasõna</translation> + </message> + <message> + <location line="+4"/> + <source>Homeserver</source> + <translation>Koduserver</translation> + </message> + <message> + <location line="+2"/> + <source>A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.</source> + <translation>See on server, kus sa oma kasutajakonto registreerid. Kuna Matrix on hajutatud suhtlusvõrk, siis esmalt pead leidma sulle sobiliku koduserveri või panema püsti täitsa oma enda koduserveri.</translation> + </message> + <message> + <location line="+17"/> + <source>REGISTER</source> + <translation>REGISTREERI</translation> + </message> + <message> + <location line="+55"/> + <source>No supported registration flows!</source> + <translation>Selline registreerimise töövoog pole toetatud!</translation> + </message> + <message> + <location line="+135"/> + <source>Invalid username</source> + <translation>Vigane kasutajanimi</translation> + </message> + <message> + <location line="+2"/> + <source>Password is not long enough (min 8 chars)</source> + <translation>Salasõna pole piisavalt pikk (vähemalt 8 tähemärki)</translation> + </message> + <message> + <location line="+2"/> + <source>Passwords don't match</source> + <translation>Salasõnad ei klapi omavahel</translation> + </message> + <message> + <location line="+2"/> + <source>Invalid server name</source> + <translation>Vigane koduserveri nimi</translation> + </message> +</context> +<context> + <name>RoomInfo</name> + <message> + <location filename="../../src/Cache.cpp" line="+1443"/> + <source>no version stored</source> + <translation>salvestatud versiooni ei leidu</translation> + </message> +</context> +<context> + <name>RoomInfoListItem</name> + <message> + <location filename="../../src/RoomInfoListItem.cpp" line="+102"/> + <source>Leave room</source> + <translation>Lahku jututoast</translation> + </message> + <message> + <location line="+7"/> + <source>Tag room as:</source> + <translation>Lisa jututoale silt:</translation> + </message> + <message> + <location line="+18"/> + <source>Favourite</source> + <comment>Standard matrix tag for favourites</comment> + <translation>Lemmik</translation> + </message> + <message> + <location line="+3"/> + <source>Low Priority</source> + <comment>Standard matrix tag for low priority rooms</comment> + <translation>Vähetähtis</translation> + </message> + <message> + <location line="+3"/> + <source>Server Notice</source> + <comment>Standard matrix tag for server notices</comment> + <translation>Serveriteade</translation> + </message> + <message> + <location line="+12"/> + <source>Adds or removes the specified tag.</source> + <comment>WhatsThis hint for tag menu actions</comment> + <translation>Lisab või eemaldab selle sildi.</translation> + </message> + <message> + <location line="+38"/> + <source>New tag...</source> + <comment>Add a new tag to the room</comment> + <translation>Uus silt…</translation> + </message> + <message> + <location line="+4"/> + <source>New Tag</source> + <comment>Tag name prompt title</comment> + <translation>Uus silt</translation> + </message> + <message> + <location line="+1"/> + <source>Tag:</source> + <comment>Tag name prompt</comment> + <translation>Silt:</translation> + </message> + <message> + <location line="+173"/> + <source>Accept</source> + <translation>Nõustu</translation> + </message> + <message> + <location line="+3"/> + <source>Decline</source> + <translation>Ei nõustu</translation> + </message> +</context> +<context> + <name>SideBarActions</name> + <message> + <location filename="../../src/SideBarActions.cpp" line="+40"/> + <source>User settings</source> + <translation>Kasutaja seadistused</translation> + </message> + <message> + <location line="+7"/> + <source>Create new room</source> + <translation>Loo uus jututuba</translation> + </message> + <message> + <location line="+1"/> + <source>Join a room</source> + <translation>Liitu jututoaga</translation> + </message> + <message> + <location line="+16"/> + <source>Start a new chat</source> + <translation>Alusta uut vestlust</translation> + </message> + <message> + <location line="+15"/> + <source>Room directory</source> + <translation>Jututubade loend</translation> + </message> +</context> +<context> + <name>StatusIndicator</name> + <message> + <location filename="../qml/StatusIndicator.qml" line="+14"/> + <source>Failed</source> + <translation>Ebaõnnestus</translation> + </message> + <message> + <location line="+1"/> + <source>Sent</source> + <translation>Saadetud</translation> + </message> + <message> + <location line="+1"/> + <source>Received</source> + <translation>Vastuvõetud</translation> + </message> + <message> + <location line="+1"/> + <source>Read</source> + <translation>Loetud</translation> + </message> +</context> +<context> + <name>TextInputWidget</name> + <message> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> + <source>Send a file</source> + <translation>Saada fail</translation> + </message> + <message> + <location line="+13"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> + <source>Write a message...</source> + <translation>Kirjuta sõnum…</translation> + </message> + <message> + <location line="+31"/> + <source>Send a message</source> + <translation>Saada sõnum</translation> + </message> + <message> + <location line="+8"/> + <source>Emoji</source> + <translation>Emoji</translation> + </message> + <message> + <location line="+94"/> + <source>Select a file</source> + <translation>Vali fail</translation> + </message> + <message> + <location line="+0"/> + <source>All Files (*)</source> + <translation>Kõik failid (*)</translation> + </message> + <message> + <location line="+64"/> + <source>Place a call</source> + <translation>Helista</translation> + </message> + <message> + <location line="+3"/> + <source>Hang up</source> + <translation>Lõpeta kõne</translation> + </message> + <message> + <location filename="../../src/TextInputWidget.h" line="-5"/> + <source>Connection lost. Nheko is trying to re-connect...</source> + <translation>Ühendus serveriga on katkenud. Nheko proovib uuesti ühendust luua…</translation> + </message> +</context> +<context> + <name>TimelineModel</name> + <message> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> + <source>Message redaction failed: %1</source> + <translation>Sõnumi ümbersõnastamine ebaõnnestus: %1</translation> + </message> + <message> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> + <translation>Sündmuse krüptimine ei õnnestunud, katkestame saatmise!</translation> + </message> + <message> + <location line="+195"/> + <source>Save image</source> + <translation>Salvesta pilt</translation> + </message> + <message> + <location line="+2"/> + <source>Save video</source> + <translation>Salvesta video</translation> + </message> + <message> + <location line="+2"/> + <source>Save audio</source> + <translation>Salvesta helifail</translation> + </message> + <message> + <location line="+2"/> + <source>Save file</source> + <translation>Salvesta fail</translation> + </message> + <message numerus="yes"> + <location line="+129"/> + <source>%1 and %2 are typing.</source> + <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> + <translation> + <numerusform>%1%2 kirjutab.</numerusform> + <numerusform>%1 and %2 kirjutavad.</numerusform> + </translation> + </message> + <message> + <location line="+68"/> + <source>%1 opened the room to the public.</source> + <translation>%1 tegi jututoa avalikuks.</translation> + </message> + <message> + <location line="+2"/> + <source>%1 made this room require and invitation to join.</source> + <translation>%1 seadistas, et selle jututoaga liitumine eeldab kutset.</translation> + </message> + <message> + <location line="+23"/> + <source>%1 made the room open to guests.</source> + <translation>%1 muutis selle jututoa külalistele ligipääsetavaks.</translation> + </message> + <message> + <location line="+2"/> + <source>%1 has closed the room to guest access.</source> + <translation>%1 eemaldas sellest jututoast külaliste ligipääsu.</translation> + </message> + <message> + <location line="+23"/> + <source>%1 made the room history world readable. Events may be now read by non-joined people.</source> + <translation>%1 muutis, et kogu maailm saab selle jututoa ajalugu lugeda. Kõiki sündmusi saavad lugeda ka need, kes ei ole liitunud jututoaga.</translation> + </message> + <message> + <location line="+4"/> + <source>%1 set the room history visible to members from this point on.</source> + <translation>%1 muutis, et selle jututoa ajalugu saavad lugeda kõik liikmed alates praegusest ajahetkest.</translation> + </message> + <message> + <location line="+3"/> + <source>%1 set the room history visible to members since they were invited.</source> + <translation>%1 muutis, et selle jututoa ajalugu saavad lugeda kõik liikmed alates oma kutse saatmisest.</translation> + </message> + <message> + <location line="+3"/> + <source>%1 set the room history visible to members since they joined the room.</source> + <translation>%1 muutis, et selle jututoa ajalugu saavad lugeda kõik liikmed alates jututoaga liitumise hetkest.</translation> + </message> + <message> + <location line="+22"/> + <source>%1 has changed the room's permissions.</source> + <translation>%1 muutis selle jututoa õigusi.</translation> + </message> + <message> + <location line="+33"/> + <source>%1 was invited.</source> + <translation>%1 sai kutse.</translation> + </message> + <message> + <location line="+11"/> + <source>%1 changed their display name and avatar.</source> + <translation>%1 muutis oma kuvatavat nime ja tunnuspilti.</translation> + </message> + <message> + <location line="+2"/> + <source>%1 changed their display name.</source> + <translation>%1 muutis oma kuvatavat nime.</translation> + </message> + <message> + <location line="+2"/> + <source>%1 changed their avatar.</source> + <translation>%1 muutis oma tunnuspilti.</translation> + </message> + <message> + <location line="+2"/> + <source>%1 changed some profile info.</source> + <translation>%1 muutis oma profiili.</translation> + </message> + <message> + <location line="+4"/> + <source>%1 joined.</source> + <translation>%1 liitus jututoaga.</translation> + </message> + <message> + <location line="+9"/> + <source>%1 rejected their invite.</source> + <translation>%1 lükkas liitumiskutse tagasi.</translation> + </message> + <message> + <location line="+2"/> + <source>Revoked the invite to %1.</source> + <translation>Tühistas %1 kutse.</translation> + </message> + <message> + <location line="+3"/> + <source>%1 left the room.</source> + <translation>%1 lahkus jututoast.</translation> + </message> + <message> + <location line="+2"/> + <source>Kicked %1.</source> + <translation>Müksas kasutaja %1 välja.</translation> + </message> + <message> + <location line="+2"/> + <source>Unbanned %1.</source> + <translation>Eemaldas kasutaja %1 suhtluskeelu.</translation> + </message> + <message> + <location line="+14"/> + <source>%1 was banned.</source> + <translation>Kasutaja %1 sai suhtluskeelu.</translation> + </message> + <message> + <location line="-11"/> + <source>%1 redacted their knock.</source> + <translation>%1 muutis oma koputust jututoa uksele.</translation> + </message> + <message> + <location line="-943"/> + <source>You joined this room.</source> + <translation>Sa liitusid jututoaga.</translation> + </message> + <message> + <location line="+945"/> + <source>Rejected the knock from %1.</source> + <translation>Lükkas tagasi %1 koputuse jututoa uksele.</translation> + </message> + <message> + <location line="+2"/> + <source>%1 left after having already left!</source> + <comment>This is a leave event after the user already left and shouldn't happen apart from state resets</comment> + <translation>%1 lahkus jututoast peale seda, kui ta juba oli lahkunud!</translation> + </message> + <message> + <location line="+15"/> + <source> Reason: %1</source> + <translation>Põhjus: %1</translation> + </message> + <message> + <location line="-5"/> + <source>%1 knocked.</source> + <translation>%1 müksati välja.</translation> + </message> +</context> +<context> + <name>TimelineRow</name> + <message> + <location filename="../qml/TimelineRow.qml" line="+94"/> + <source>React</source> + <translation>Reageeri</translation> + </message> + <message> + <location line="+16"/> + <source>Reply</source> + <translation>Vasta</translation> + </message> + <message> + <location line="+15"/> + <source>Options</source> + <translation>Valikud</translation> + </message> +</context> +<context> + <name>TimelineView</name> + <message> + <location filename="../qml/TimelineView.qml" line="+61"/> + <source>React</source> + <translation>Reageeri</translation> + </message> + <message> + <location line="+4"/> + <source>Reply</source> + <translation>Vasta</translation> + </message> + <message> + <location line="+4"/> + <source>Read receipts</source> + <translation>Lugemisteatised</translation> + </message> + <message> + <location line="+4"/> + <source>Mark as read</source> + <translation>Märgi loetuks</translation> + </message> + <message> + <location line="+3"/> + <source>View raw message</source> + <translation>Näita sõnumi lähtekoodi</translation> + </message> + <message> + <location line="+6"/> + <source>View decrypted raw message</source> + <translation>Näita sõnumi dekrüptitud lähtekoodi</translation> + </message> + <message> + <location line="+4"/> + <source>Redact message</source> + <translation>Muuda sõnumit</translation> + </message> + <message> + <location line="+6"/> + <source>Save as</source> + <translation>Salvesta kui</translation> + </message> + <message> + <location line="+12"/> + <source>No room open</source> + <translation>Ühtegi jututuba pole avatud</translation> + </message> + <message> + <location line="+53"/> + <source>Back to room list</source> + <translation>Tagasi jututubade loendisse</translation> + </message> + <message> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> + <translation>Jututuba on valimata</translation> + </message> + <message> + <location line="+28"/> + <source>Room options</source> + <translation>Jututoa valikud</translation> + </message> + <message> + <location line="+7"/> + <source>Invite users</source> + <translation>Kutsu kasutajaid</translation> + </message> + <message> + <location line="+4"/> + <source>Members</source> + <translation>Liikmed</translation> + </message> + <message> + <location line="+4"/> + <source>Leave room</source> + <translation>Lahku jututoast</translation> + </message> + <message> + <location line="+4"/> + <source>Settings</source> + <translation>Seadistused</translation> + </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation>Sulge</translation> + </message> +</context> +<context> + <name>TrayIcon</name> + <message> + <location filename="../../src/TrayIcon.cpp" line="+122"/> + <source>Show</source> + <translation>Näita</translation> + </message> + <message> + <location line="+1"/> + <source>Quit</source> + <translation>Lõpeta töö</translation> + </message> +</context> +<context> + <name>UserInfoWidget</name> + <message> + <location filename="../../src/UserInfoWidget.cpp" line="+95"/> + <source>Logout</source> + <translation>Logi välja</translation> + </message> + <message> + <location line="+20"/> + <source>Set custom status message</source> + <translation>Kirjuta kohandatud olekuteade</translation> + </message> + <message> + <location line="+4"/> + <source>Custom status message</source> + <translation>Kohandatud olekuteade</translation> + </message> + <message> + <location line="+1"/> + <source>Status:</source> + <translation>Olek:</translation> + </message> + <message> + <location line="+9"/> + <source>Set presence automatically</source> + <translation>Määra oma võrguolek automaatselt</translation> + </message> + <message> + <location line="+6"/> + <source>Online</source> + <translation>Võrgus</translation> + </message> + <message> + <location line="+5"/> + <source>Unavailable</source> + <translation>Pole kättesaadav</translation> + </message> + <message> + <location line="+6"/> + <source>Offline</source> + <translation>Pole võrgus</translation> + </message> +</context> +<context> + <name>UserSettingsPage</name> + <message> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> + <source>Minimize to tray</source> + <translation>Vähenda tegumiribale</translation> + </message> + <message> + <location line="+3"/> + <source>Start in tray</source> + <translation>Käivita tegumiribalt</translation> + </message> + <message> + <location line="+7"/> + <source>Group's sidebar</source> + <translation>Rühmade küljepaan</translation> + </message> + <message> + <location line="-3"/> + <source>Circular Avatars</source> + <translation>Ümmargused tunnuspildid</translation> + </message> + <message> + <location line="-63"/> + <source>CALLS</source> + <translation>KÕNED</translation> + </message> + <message> + <location line="+58"/> + <source>Keep the application running in the background after closing the client window.</source> + <translation>Peale akna sulgemist jäta rakendus taustal tööle.</translation> + </message> + <message> + <location line="+3"/> + <source>Start the application in the background without showing the client window.</source> + <translation>Käivita rakendus taustal ilma kliendiakna kuvamiseta.</translation> + </message> + <message> + <location line="+4"/> + <source>Change the appearance of user avatars in chats. +OFF - square, ON - Circle.</source> + <translation>Muuda vestlustes kuvatavate tunnuspiltide kuju. +Väljalülitatuna - ruut, sisselülitatuna - ümmargune.</translation> + </message> + <message> + <location line="+3"/> + <source>Show a column containing groups and tags next to the room list.</source> + <translation>Näita jututubade loendi kõrval veergu rühmade ja siltidega.</translation> + </message> + <message> + <location line="+1"/> + <source>Decrypt messages in sidebar</source> + <translation>Dekrüpti sõnumid külgribal</translation> + </message> + <message> + <location line="+2"/> + <source>Decrypt the messages shown in the sidebar. +Only affects messages in encrypted chats.</source> + <translation>Dekrüpti külgpaanis kuvatavaid sõnumeid. +Kehtib vaid läbivalt krüptitud vestluste puhul.</translation> + </message> + <message> + <location line="+2"/> + <source>Show buttons in timeline</source> + <translation>Näita ajajoonel nuppe</translation> + </message> + <message> + <location line="+2"/> + <source>Show buttons to quickly reply, react or access additional options next to each message.</source> + <translation>Näita iga sõnumi kõrval nuppe, mis võimaldavad kiiresti vastata, reageerida või teha sõnumiga muid toiminguid.</translation> + </message> + <message> + <location line="+2"/> + <source>Limit width of timeline</source> + <translation>Piira ajajoone laiust</translation> + </message> + <message> + <location line="+2"/> + <source>Set the max width of messages in the timeline (in pixels). This can help readability on wide screen, when Nheko is maximised</source> + <translation>Seadista sõnumite suurim laius pikslites ajajoonel. See parandab loetavust suurel ekraanil, kui Nheko on avatud täisvaates.</translation> + </message> + <message> + <location line="+2"/> + <source>Typing notifications</source> + <translation>Kirjutamisteatised</translation> + </message> + <message> + <location line="+2"/> + <source>Show who is typing in a room. +This will also enable or disable sending typing notifications to others.</source> + <translation>Näita, kes jututoas parasjagu kirjutab. +Samaga lülitatakse sisse või välja ka sinu kirjutamisteatiste saatmine teistele kasutajatele.</translation> + </message> + <message> + <location line="+3"/> + <source>Sort rooms by unreads</source> + <translation>Järjesta jututoad lugemata tubade alusel</translation> + </message> + <message> + <location line="+2"/> + <source>Display rooms with new messages first. +If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. +If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms, that you have muted, will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms.</source> + <translation>Kuva uute sõnumitega jututoad esimesena. +Kui see valik on välja lülitatud, siis jututoad järjestatakse viimati saanunud sõnumi ajatempli alusel. +Kui see valik on sisse lülitatud, siis teavitustega jututoad (pisike ümmargune numbrifa ikoon) järjestatakse esimesena. Sinu poolt summutatud jututoad järjestatakse ikkagi ajatempli alusel, sest sa ei pea neid teistega võrreldes piisavalt tähtsaks.</translation> + </message> + <message> + <location line="+7"/> + <source>Read receipts</source> + <translation>Lugemisteatised</translation> + </message> + <message> + <location line="+2"/> + <source>Show if your message was read. +Status is displayed next to timestamps.</source> + <translation>Näita, kas sinu sõnum sai loetud. +Lugemise olekut kuvatakse ajatempli kõrval.</translation> + </message> + <message> + <location line="+2"/> + <source>Send messages as Markdown</source> + <translation>Saada sõnumid Markdown-vormindusena</translation> + </message> + <message> + <location line="+2"/> + <source>Allow using markdown in messages. +When disabled, all messages are sent as a plain text.</source> + <translation>Luba Markdown-vormingu kasutamine sõnumite koostamisel. +Kui Markdown ei ole kasutusel, siis saadetakse kõik sõnumid vormindamata tekstina.</translation> + </message> + <message> + <location line="+2"/> + <source>Desktop notifications</source> + <translation>Töölauakeskkonna teavitused</translation> + </message> + <message> + <location line="+2"/> + <source>Notify about received message when the client is not currently focused.</source> + <translation>Näita saabunud sõnumi teavitust, kui Nheko ei ole parasjagu fookuses.</translation> + </message> + <message> + <location line="+1"/> + <source>Alert on notification</source> + <translation>Anna teavitustest märku</translation> + </message> + <message> + <location line="+2"/> + <source>Show an alert when a message is received. +This usually causes the application icon in the task bar to animate in some fashion.</source> + <translation>Sõnumi saabumisel näita teavitust. +See tavaliselt tähendab, et rakenduse ikoon tegumiribal annab mingit sorti animatsiooniga sulle märku.</translation> + </message> + <message> + <location line="+2"/> + <source>Highlight message on hover</source> + <translation>Üle sõnumi liikumisel too ta esile</translation> + </message> + <message> + <location line="+2"/> + <source>Change the background color of messages when you hover over them.</source> + <translation>Üle sõnumite liikudes muuda nende taustavärvi.</translation> + </message> + <message> + <location line="+1"/> + <source>Large Emoji in timeline</source> + <translation>Suured emojid ajajoonel</translation> + </message> + <message> + <location line="+2"/> + <source>Make font size larger if messages with only a few emojis are displayed.</source> + <translation>Tee sõnumi font suuremaks, kui sõnumis on vaid mõned emojid.</translation> + </message> + <message> + <location line="+5"/> + <source>Scale factor</source> + <translation>Mastaabitegur</translation> + </message> + <message> + <location line="+2"/> + <source>Change the scale factor of the whole user interface.</source> + <translation>Muuda kogu kasutajaliidese suurust.</translation> + </message> + <message> + <location line="+4"/> + <source>Font size</source> + <translation>Fondi suurus</translation> + </message> + <message> + <location line="+1"/> + <source>Font Family</source> + <translation>Fondiperekond</translation> + </message> + <message> + <location line="+8"/> + <source>Theme</source> + <translation>Teema</translation> + </message> + <message> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation>Luba kõnehõlbustusserveri kasutamist</translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation>Kui sinu koduserver ei paku välja sobilikku kõnehõlbustusserverit, siis kasuta turn.matrix.org teenust.</translation> + </message> + <message> + <location line="+4"/> + <source>Device ID</source> + <translation>Seadme tunnus</translation> + </message> + <message> + <location line="+1"/> + <source>Device Fingerprint</source> + <translation>Seadme sõrmejälg</translation> + </message> + <message> + <location line="-120"/> + <source>Session Keys</source> + <translation>Sessioonivõtmed</translation> + </message> + <message> + <location line="+4"/> + <source>IMPORT</source> + <translation>IMPORDI</translation> + </message> + <message> + <location line="+1"/> + <source>EXPORT</source> + <translation>EKSPORDI</translation> + </message> + <message> + <location line="-25"/> + <source>ENCRYPTION</source> + <translation>KRÜPTIMINE</translation> + </message> + <message> + <location line="-78"/> + <source>GENERAL</source> + <translation>ÜLDISED SEADISTUSED</translation> + </message> + <message> + <location line="+30"/> + <source>INTERFACE</source> + <translation>LIIDES</translation> + </message> + <message> + <location line="+172"/> + <source>Emoji Font Family</source> + <translation>Fondiperekond emojide jaoks</translation> + </message> + <message> + <location line="+191"/> + <source>Open Sessions File</source> + <translation>Ava sessioonide fail</translation> + </message> + <message> + <location line="+4"/> + <location line="+18"/> + <location line="+9"/> + <location line="+2"/> + <location line="+2"/> + <location line="+19"/> + <location line="+11"/> + <location line="+18"/> + <location line="+2"/> + <location line="+2"/> + <source>Error</source> + <translation>Viga</translation> + </message> + <message> + <location line="-74"/> + <location line="+32"/> + <source>File Password</source> + <translation>Faili salasõna</translation> + </message> + <message> + <location line="-31"/> + <source>Enter the passphrase to decrypt the file:</source> + <translation>Faili dekrüptimiseks sisesta salafraas:</translation> + </message> + <message> + <location line="+8"/> + <location line="+32"/> + <source>The password cannot be empty</source> + <translation>Salasõna ei saa olla tühi</translation> + </message> + <message> + <location line="-8"/> + <source>Enter passphrase to encrypt your session keys:</source> + <translation>Oma sessioonivõtmete krüptimiseks sisesta salafraas:</translation> + </message> + <message> + <location line="+15"/> + <source>File to save the exported session keys</source> + <translation>Fail, kuhu salvestad eksporditavad sessiooni krüptovõtmed</translation> + </message> +</context> +<context> + <name>WelcomePage</name> + <message> + <location filename="../../src/WelcomePage.cpp" line="+47"/> + <source>Welcome to nheko! The desktop client for the Matrix protocol.</source> + <translation>Tere tulemast nheko kasutajaks! Töölauarakendus Matrix'i protokolli jaoks.</translation> + </message> + <message> + <location line="+1"/> + <source>Enjoy your stay!</source> + <translation>Head suhtlemist!</translation> + </message> + <message> + <location line="+23"/> + <source>REGISTER</source> + <translation>REGISTREERU</translation> + </message> + <message> + <location line="+5"/> + <source>LOGIN</source> + <translation>LOGI SISSE</translation> + </message> +</context> +<context> + <name>descriptiveTime</name> + <message> + <location filename="../../src/Utils.cpp" line="+146"/> + <source>Yesterday</source> + <translation>Eile</translation> + </message> +</context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation>Nõustu</translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation>Ära võta vastu</translation> + </message> +</context> +<context> + <name>dialogs::CreateRoom</name> + <message> + <location filename="../../src/dialogs/CreateRoom.cpp" line="+36"/> + <source>Create room</source> + <translation>Loo jututuba</translation> + </message> + <message> + <location line="+2"/> + <source>Cancel</source> + <translation>Tühista</translation> + </message> + <message> + <location line="+10"/> + <source>Name</source> + <translation>Nimi</translation> + </message> + <message> + <location line="+3"/> + <source>Topic</source> + <translation>Teema</translation> + </message> + <message> + <location line="+3"/> + <source>Alias</source> + <translation>Alias</translation> + </message> + <message> + <location line="+8"/> + <source>Room Visibility</source> + <translation>Jututoa nähtavus</translation> + </message> + <message> + <location line="+8"/> + <source>Room Preset</source> + <translation>Jututoa tüüp</translation> + </message> + <message> + <location line="+9"/> + <source>Direct Chat</source> + <translation>Otsevestlus</translation> + </message> +</context> +<context> + <name>dialogs::FallbackAuth</name> + <message> + <location filename="../../src/dialogs/FallbackAuth.cpp" line="+30"/> + <source>Open Fallback in Browser</source> + <translation>Ava kasutaja registreerimise tagavaravariant veebibrauseris</translation> + </message> + <message> + <location line="+1"/> + <source>Cancel</source> + <translation>Katkesta</translation> + </message> + <message> + <location line="+1"/> + <source>Confirm</source> + <translation>Kinnita</translation> + </message> + <message> + <location line="+12"/> + <source>Open the fallback, follow the steps and confirm after completing them.</source> + <translation>Ava kasutaja registreerimise tagavaravariant, läbi kõik sammud ja kinnita seda, kui kõik valmis on.</translation> + </message> +</context> +<context> + <name>dialogs::InviteUsers</name> + <message> + <location filename="../../src/dialogs/InviteUsers.cpp" line="+42"/> + <source>Cancel</source> + <translation>Tühista</translation> + </message> + <message> + <location line="+8"/> + <source>User ID to invite</source> + <translation>Kasutajatunnus, kellele soovid kutset saata</translation> + </message> +</context> +<context> + <name>dialogs::JoinRoom</name> + <message> + <location filename="../../src/dialogs/JoinRoom.cpp" line="+30"/> + <source>Join</source> + <translation>Liitu</translation> + </message> + <message> + <location line="+2"/> + <source>Cancel</source> + <translation>Tühista</translation> + </message> + <message> + <location line="+7"/> + <source>Room ID or alias</source> + <translation>Jututoa tunnus või alias</translation> + </message> +</context> +<context> + <name>dialogs::LeaveRoom</name> + <message> + <location filename="../../src/dialogs/LeaveRoom.cpp" line="+31"/> + <source>Cancel</source> + <translation>Tühista</translation> + </message> + <message> + <location line="+8"/> + <source>Are you sure you want to leave?</source> + <translation>Kas sa oled kindel, et soovid lahkuda?</translation> + </message> +</context> +<context> + <name>dialogs::Logout</name> + <message> + <location filename="../../src/dialogs/Logout.cpp" line="+47"/> + <source>Cancel</source> + <translation>Tühista</translation> + </message> + <message> + <location line="+8"/> + <source>Logout. Are you sure?</source> + <translation>Logime nüüd välja. Kas sa oled kindel?</translation> + </message> +</context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation>Häälkõne</translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation>Loobu</translation> + </message> +</context> +<context> + <name>dialogs::PreviewUploadOverlay</name> + <message> + <location filename="../../src/dialogs/PreviewUploadOverlay.cpp" line="+41"/> + <source>Upload</source> + <translation>Lae üles</translation> + </message> + <message> + <location line="+1"/> + <source>Cancel</source> + <translation>Tühista</translation> + </message> + <message> + <location line="+84"/> + <source>Media type: %1 +Media size: %2 +</source> + <translation>Meedia tüüp: %1 +Meedia suurus: %2 +</translation> + </message> +</context> +<context> + <name>dialogs::ReCaptcha</name> + <message> + <location filename="../../src/dialogs/ReCaptcha.cpp" line="+31"/> + <source>Cancel</source> + <translation>Tühista</translation> + </message> + <message> + <location line="+1"/> + <source>Confirm</source> + <translation>Kinnita</translation> + </message> + <message> + <location line="+11"/> + <source>Solve the reCAPTCHA and press the confirm button</source> + <translation>Vasta reCAPTCHA küsimustele ja vajuta kinnita-nuppu</translation> + </message> +</context> +<context> + <name>dialogs::ReadReceipts</name> + <message> + <location filename="../../src/dialogs/ReadReceipts.cpp" line="+120"/> + <source>Read receipts</source> + <translation>Lugemisteatised</translation> + </message> + <message> + <location line="+4"/> + <source>Close</source> + <translation>Sulge</translation> + </message> +</context> +<context> + <name>dialogs::ReceiptItem</name> + <message> + <location line="-46"/> + <source>Today %1</source> + <translation>Täna %1</translation> + </message> + <message> + <location line="+3"/> + <source>Yesterday %1</source> + <translation>Eile %1</translation> + </message> +</context> +<context> + <name>dialogs::RoomSettings</name> + <message> + <location filename="../../src/dialogs/RoomSettings.cpp" line="+135"/> + <source>Settings</source> + <translation>Seadistused</translation> + </message> + <message> + <location line="+3"/> + <source>Info</source> + <translation>Teave</translation> + </message> + <message> + <location line="+11"/> + <source>Internal ID</source> + <translation>Sisemine tunnus</translation> + </message> + <message> + <location line="+10"/> + <source>Room Version</source> + <translation>Jututoa versioon</translation> + </message> + <message> + <location line="+4"/> + <source>Notifications</source> + <translation>Teavitused</translation> + </message> + <message> + <location line="+2"/> + <source>Muted</source> + <translation>Summutatud</translation> + </message> + <message> + <location line="+2"/> + <source>Mentions only</source> + <translation>Vaid mainimised</translation> + </message> + <message> + <location line="+1"/> + <source>All messages</source> + <translation>Kõik sõnumid</translation> + </message> + <message> + <location line="+97"/> + <source>Room access</source> + <translation>Ligipääs jututuppa</translation> + </message> + <message> + <location line="+2"/> + <source>Anyone and guests</source> + <translation>Kõik (sealhulgas külalised)</translation> + </message> + <message> + <location line="+1"/> + <source>Anyone</source> + <translation>Kõik, kes teavad jututoa aadressi (aga mitte külalised)</translation> + </message> + <message> + <location line="+1"/> + <source>Invited users</source> + <translation>Kutsutud kasutajad</translation> + </message> + <message> + <location line="+50"/> + <source>Encryption</source> + <translation>Krüptimine</translation> + </message> + <message> + <location line="+8"/> + <source>End-to-End Encryption</source> + <translation>Läbiv krüptimine</translation> + </message> + <message> + <location line="+1"/> + <source>Encryption is currently experimental and things might break unexpectedly. <br>Please take note that it can't be disabled afterwards.</source> + <translation>Krüptimine on nhekos hetkel veel katseline ning nii mõndagi võib ootamatult katki minna. <br>Palun arvesta, et krüptimist ei saa hiljem enam välja lülitada.</translation> + </message> + <message> + <location line="+27"/> + <source>Respond to key requests</source> + <translation>Vasta krüptovõtmete päringutele</translation> + </message> + <message> + <location line="+3"/> + <source>Whether or not the client should respond automatically with the session keys + upon request. Use with caution, this is a temporary measure to test the + E2E implementation until device verification is completed.</source> + <translation>Kas klient peaks automaatselt vastama või mitte vastama sessioonivõtmete päringule. + Kasuta seda võimalust ettevaatlikult. Tegemist on ajutise lahendusega läbiva krüptimise + testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.</translation> + </message> + <message numerus="yes"> + <location line="+51"/> + <source>%n member(s)</source> + <translation> + <numerusform>%n kasutaja</numerusform> + <numerusform>%n kasutajat</numerusform> + </translation> + </message> + <message> + <location line="+140"/> + <source>Failed to enable encryption: %1</source> + <translation>Krüptimise kasutuselevõtmine ei õnnestunud: %1</translation> + </message> + <message> + <location line="+147"/> + <source>Select an avatar</source> + <translation>Vali tunnuspilt</translation> + </message> + <message> + <location line="+0"/> + <source>All Files (*)</source> + <translation>Kõik failid (*)</translation> + </message> + <message> + <location line="+12"/> + <source>The selected file is not an image</source> + <translation>Valitud fail ei ole pildifail</translation> + </message> + <message> + <location line="+5"/> + <source>Error while reading file: %1</source> + <translation>Viga faili lugemisel: %1</translation> + </message> + <message> + <location line="+35"/> + <location line="+20"/> + <source>Failed to upload image: %s</source> + <translation>Viga faili üleslaadimisel: %1</translation> + </message> +</context> +<context> + <name>dialogs::UserProfile</name> + <message> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> + <source>Ban the user from the room</source> + <translation>Sea kasutajale siin jututoas suhtluskeeld</translation> + </message> + <message> + <location line="+8"/> + <source>Ignore messages from this user</source> + <translation>Eira selle kasutaja sõnumeid</translation> + </message> + <message> + <location line="+9"/> + <source>Kick the user from the room</source> + <translation>Müksa see kasutaja jututoast välja</translation> + </message> + <message> + <location line="+8"/> + <source>Start a conversation</source> + <translation>Alusta vestlust</translation> + </message> + <message> + <location line="+14"/> + <source>Confirm DM</source> + <translation>Kinnita otsevestlus</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation>Kas sa tõesti soovid saata otsevestluse kutset kasutajale %1 (%2)?</translation> + </message> + <message> + <location line="+54"/> + <source>Devices</source> + <translation>Seadmed</translation> + </message> +</context> +<context> + <name>emoji::Panel</name> + <message> + <location filename="../../src/emoji/Panel.cpp" line="+122"/> + <source>Smileys & People</source> + <translation>Vigurnäod ja inimesed</translation> + </message> + <message> + <location line="+4"/> + <source>Animals & Nature</source> + <translation>Loomad ja loodus</translation> + </message> + <message> + <location line="+3"/> + <source>Food & Drink</source> + <translation>Toit ja jook</translation> + </message> + <message> + <location line="+3"/> + <source>Activity</source> + <translation>Tegevused</translation> + </message> + <message> + <location line="+4"/> + <source>Travel & Places</source> + <translation>Reisimine ja kohad</translation> + </message> + <message> + <location line="+3"/> + <source>Objects</source> + <translation>Esemed</translation> + </message> + <message> + <location line="+3"/> + <source>Symbols</source> + <translation>Sümbolid</translation> + </message> + <message> + <location line="+3"/> + <source>Flags</source> + <translation>Lipud</translation> + </message> +</context> +<context> + <name>message-description sent:</name> + <message> + <location filename="../../src/Utils.h" line="+106"/> + <source>You sent an audio clip</source> + <translation>Sa saatsid helifaili</translation> + </message> + <message> + <location line="+3"/> + <source>%1 sent an audio clip</source> + <translation>%1 saatis helifaili</translation> + </message> + <message> + <location line="+5"/> + <source>You sent an image</source> + <translation>Sa saatsid pildi</translation> + </message> + <message> + <location line="+3"/> + <source>%1 sent an image</source> + <translation>%1 saatis pildi</translation> + </message> + <message> + <location line="+5"/> + <source>You sent a file</source> + <translation>Sa saatsid faili</translation> + </message> + <message> + <location line="+3"/> + <source>%1 sent a file</source> + <translation>%1 saatis faili</translation> + </message> + <message> + <location line="+5"/> + <source>You sent a video</source> + <translation>Sa saatsid video</translation> + </message> + <message> + <location line="+3"/> + <source>%1 sent a video</source> + <translation>%1 saatis video</translation> + </message> + <message> + <location line="+5"/> + <source>You sent a sticker</source> + <translation>Sa saatsid kleepsu</translation> + </message> + <message> + <location line="+3"/> + <source>%1 sent a sticker</source> + <translation>%1 saatis kleepsu</translation> + </message> + <message> + <location line="+5"/> + <source>You sent a notification</source> + <translation>Sa saatsid teavituse</translation> + </message> + <message> + <location line="+3"/> + <source>%1 sent a notification</source> + <translation>%1 saatis teavituse</translation> + </message> + <message> + <location line="+5"/> + <source>You: %1</source> + <translation>Sina: %1</translation> + </message> + <message> + <location line="+3"/> + <source>%1: %2</source> + <translation>%1: %2</translation> + </message> + <message> + <location line="+7"/> + <source>You sent an encrypted message</source> + <translation>Sa saatsid krüptitud sõnumi</translation> + </message> + <message> + <location line="+3"/> + <source>%1 sent an encrypted message</source> + <translation>%1 saatis krüptitud sõnumi</translation> + </message> + <message> + <location line="+5"/> + <source>You placed a call</source> + <translation>Sa helistasid</translation> + </message> + <message> + <location line="+3"/> + <source>%1 placed a call</source> + <translation>%1 helistas</translation> + </message> + <message> + <location line="+5"/> + <source>You answered a call</source> + <translation>Sa vastasid kõnele</translation> + </message> + <message> + <location line="+3"/> + <source>%1 answered a call</source> + <translation>%1 vastas kõnele</translation> + </message> + <message> + <location line="+5"/> + <source>You ended a call</source> + <translation>Sa lõpetasid kõne</translation> + </message> + <message> + <location line="+3"/> + <source>%1 ended a call</source> + <translation>%1 lõpetas kõne</translation> + </message> +</context> +<context> + <name>popups::UserMentions</name> + <message> + <location filename="../../src/popups/UserMentions.cpp" line="+64"/> + <source>This Room</source> + <translation>See jututuba</translation> + </message> + <message> + <location line="+1"/> + <source>All Rooms</source> + <translation>Kõik jututoad</translation> + </message> +</context> +<context> + <name>utils</name> + <message> + <location filename="../../src/Utils.h" line="+4"/> + <source>Unknown Message Type</source> + <translation>Tundmatu sõnumitüüp</translation> + </message> +</context> +</TS> diff --git a/resources/langs/nheko_fi.ts b/resources/langs/nheko_fi.ts index 9e95ed628e763e820f47a638d83cda26652069ca..192c07b2e0d7cf66a23b567e2c95a218daff2cd4 100644 --- a/resources/langs/nheko_fi.ts +++ b/resources/langs/nheko_fi.ts @@ -4,7 +4,7 @@ <context> <name>Cache</name> <message> - <location filename="../../src/Cache.cpp" line="+1359"/> + <location filename="../../src/Cache.cpp" line="+1658"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> @@ -12,33 +12,53 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+229"/> + <location filename="../../src/ChatPage.cpp" line="+218"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+926"/> + <location line="+947"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="-474"/> + <location line="-458"/> <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+439"/> + <location line="+415"/> <source>Room %1 created.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+30"/> + <location line="+26"/> + <source>Confirm invite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to invite %1 to %2: %3</source> <translation type="unfinished"></translation> </message> <message> - <location line="+19"/> + <location line="+15"/> + <source>Confirm kick</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to kick %1 to %2: %3</source> <translation type="unfinished"></translation> </message> @@ -48,7 +68,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm ban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to ban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -58,7 +88,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm unban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to unban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -68,12 +108,12 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-828"/> + <location line="-874"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+296"/> + <location line="+334"/> <source>Cache migration failed!</source> <translation type="unfinished"></translation> </message> @@ -88,28 +128,28 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+111"/> + <location line="+67"/> <source>Failed to restore OLM account. Please login again.</source> <translation>OLM-tilin palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen.</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Failed to restore save data. Please login again.</source> <translation>Tallennettujen tietojen palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen.</translation> </message> <message> - <location line="+156"/> + <location line="+165"/> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <translation>Salausavainten lähetys epäonnistui. Palvelimen vastaus: %1 %2. Ole hyvä ja yritä uudelleen myöhemmin.</translation> </message> <message> - <location line="+54"/> - <location line="+252"/> + <location line="+99"/> + <location line="+251"/> <source>Please try to login again: %1</source> <translation>Ole hyvä ja yritä kirjautua sisään uudelleen: %1</translation> </message> <message> - <location line="-187"/> + <location line="-219"/> <source>Failed to join room: %1</source> <translation type="unfinished"></translation> </message> @@ -254,6 +294,43 @@ <translation type="unfinished"></translation> </message> </context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation type="unfinished">-- Salattu viesti (salauksen purkuavaimia ei löydetty) --</translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation type="unfinished">-- Virhe purkaessa salausta (megolm-avaimien hakeminen tietokannasta epäonnistui) --</translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation type="unfinished">-- Virhe purkaessa salausta (%1) --</translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation type="unfinished">-- Salattu viesti (tuntematon viestityyppi) --</translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>InviteeItem</name> <message> @@ -367,6 +444,7 @@ Example: https://server.my:8787</source> <name>MessageDelegate</name> <message> <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> <source>redacted</source> <translation type="unfinished"></translation> </message> @@ -400,6 +478,36 @@ Example: https://server.my:8787</source> <source>%1 created and configured room: %2</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>%1 answered the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>%1 ended the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Negotiating call...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Placeholder</name> @@ -488,7 +596,7 @@ Example: https://server.my:8787</source> <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+984"/> + <location filename="../../src/Cache.cpp" line="+1443"/> <source>no version stored</source> <translation>ei tallennettua versiota</translation> </message> @@ -612,13 +720,13 @@ Example: https://server.my:8787</source> <context> <name>TextInputWidget</name> <message> - <location filename="../../src/TextInputWidget.cpp" line="+460"/> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> <source>Send a file</source> <translation>Lähetä tiedosto</translation> </message> <message> <location line="+13"/> - <location filename="../../src/TextInputWidget.h" line="+145"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> <source>Write a message...</source> <translation>Kirjoita viesti…</translation> </message> @@ -633,7 +741,7 @@ Example: https://server.my:8787</source> <translation>Emoji</translation> </message> <message> - <location line="+86"/> + <location line="+94"/> <source>Select a file</source> <translation>Valitse tiedosto</translation> </message> @@ -642,6 +750,16 @@ Example: https://server.my:8787</source> <source>All Files (*)</source> <translation>Kaikki tiedostot (*)</translation> </message> + <message> + <location line="+64"/> + <source>Place a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Hang up</source> + <translation type="unfinished"></translation> + </message> <message> <location filename="../../src/TextInputWidget.h" line="-5"/> <source>Connection lost. Nheko is trying to re-connect...</source> @@ -651,30 +769,20 @@ Example: https://server.my:8787</source> <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+891"/> - <source>-- Decryption Error (failed to communicate with DB) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment> - <translation type="unfinished">-- Virhe purkaessa salausta (tietokannan kanssa kommunikointi epäonnistui) --</translation> - </message> - <message> - <location line="+20"/> - <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> - <translation type="unfinished">-- Virhe purkaessa salausta (megolm-avaimien hakeminen tietokannasta epäonnistui) --</translation> - </message> - <message> - <location line="+13"/> - <source>-- Decryption Error (%1) --</source> - <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1.</comment> - <translation type="unfinished">-- Virhe purkaessa salausta (%1) --</translation> - </message> - <message> - <location line="+99"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> <source>Message redaction failed: %1</source> <translation type="unfinished">Viestin poisto epäonnistui: %1</translation> </message> <message> - <location line="+488"/> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+195"/> <source>Save image</source> <translation type="unfinished">Tallenna kuva</translation> </message> @@ -693,25 +801,13 @@ Example: https://server.my:8787</source> <source>Save file</source> <translation type="unfinished"></translation> </message> - <message> - <location line="-643"/> - <source>-- Encrypted Event (No keys found for decryption) --</source> - <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> - <translation type="unfinished">-- Salattu viesti (salauksen purkuavaimia ei löydetty) --</translation> - </message> - <message> - <location line="+82"/> - <source>-- Encrypted Event (Unknown event type) --</source> - <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> - <translation type="unfinished">-- Salattu viesti (tuntematon viestityyppi) --</translation> - </message> <message numerus="yes"> - <location line="+693"/> + <location line="+129"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation> - <numerusform>%1%2 kirjoittaa</numerusform> - <numerusform>%1 ja %2 kirjoittavat</numerusform> + <numerusform>%1%2 kirjoittaa.</numerusform> + <numerusform>%1 ja %2 kirjoittavat.</numerusform> </translation> </message> <message> @@ -760,7 +856,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+48"/> + <location line="+33"/> <source>%1 was invited.</source> <translation type="unfinished"></translation> </message> @@ -825,12 +921,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-1281"/> + <location line="-943"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1283"/> + <location line="+945"/> <source>Rejected the knock from %1.</source> <translation type="unfinished"></translation> </message> @@ -854,12 +950,12 @@ Example: https://server.my:8787</source> <context> <name>TimelineRow</name> <message> - <location filename="../qml/TimelineRow.qml" line="+91"/> + <location filename="../qml/TimelineRow.qml" line="+94"/> <source>React</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> + <location line="+16"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -872,7 +968,7 @@ Example: https://server.my:8787</source> <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+54"/> + <location filename="../qml/TimelineView.qml" line="+61"/> <source>React</source> <translation type="unfinished"></translation> </message> @@ -912,47 +1008,50 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+12"/> <source>No room open</source> <translation type="unfinished"></translation> </message> <message> - <location line="+271"/> - <source>Close</source> - <translation type="unfinished">Sulje</translation> + <location line="+53"/> + <source>Back to room list</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TopRoomBar</name> <message> - <location filename="../../src/TopRoomBar.cpp" line="+86"/> - <source>Room options</source> - <translation>Huonevaihtoehdot</translation> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Mentions</source> - <translation>Maininnat</translation> + <location line="+28"/> + <source>Room options</source> + <translation type="unfinished">Huonevaihtoehdot</translation> </message> <message> - <location line="+34"/> + <location line="+7"/> <source>Invite users</source> - <translation>Kutsu käyttäjiä</translation> + <translation type="unfinished">Kutsu käyttäjiä</translation> </message> <message> - <location line="+6"/> + <location line="+4"/> <source>Members</source> - <translation>Jäsenet</translation> + <translation type="unfinished">Jäsenet</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Leave room</source> - <translation>Poistu huoneesta</translation> + <translation type="unfinished">Poistu huoneesta</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Settings</source> - <translation>Asetukset</translation> + <translation type="unfinished">Asetukset</translation> + </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation type="unfinished">Sulje</translation> </message> </context> <context> @@ -1014,7 +1113,7 @@ Example: https://server.my:8787</source> <context> <name>UserSettingsPage</name> <message> - <location filename="../../src/UserSettingsPage.cpp" line="+535"/> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> <source>Minimize to tray</source> <translation>Pienennä ilmoitusalueelle</translation> </message> @@ -1034,7 +1133,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-5"/> + <location line="-63"/> + <source>CALLS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+58"/> <source>Keep the application running in the background after closing the client window.</source> <translation type="unfinished"></translation> </message> @@ -1197,7 +1301,17 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Teema</translation> </message> <message> - <location line="+3"/> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> <source>Device ID</source> <translation>Laitteen tunnus</translation> </message> @@ -1207,7 +1321,7 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Laitteen sormenjälki</translation> </message> <message> - <location line="-113"/> + <location line="-120"/> <source>Session Keys</source> <translation>Istunnon avaimet</translation> </message> @@ -1227,22 +1341,22 @@ This usually causes the application icon in the task bar to animate in some fash <translation>SALAUS</translation> </message> <message> - <location line="-71"/> + <location line="-78"/> <source>GENERAL</source> <translation>YLEISET ASETUKSET</translation> </message> <message> - <location line="+29"/> + <location line="+30"/> <source>INTERFACE</source> <translation type="unfinished"></translation> </message> <message> - <location line="+166"/> + <location line="+172"/> <source>Emoji Font Family</source> <translation type="unfinished"></translation> </message> <message> - <location line="+179"/> + <location line="+191"/> <source>Open Sessions File</source> <translation>Avaa Istuntoavaintiedosto</translation> </message> @@ -1314,11 +1428,24 @@ This usually causes the application icon in the task bar to animate in some fash <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+147"/> + <location filename="../../src/Utils.cpp" line="+146"/> <source>Yesterday</source> <translation>Eilen</translation> </message> </context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation type="unfinished">Hyväksy</translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>dialogs::CreateRoom</name> <message> @@ -1442,6 +1569,19 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Kirjaudutaan ulos. Oletko varma?</translation> </message> </context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation type="unfinished">Peruuta</translation> + </message> +</context> <context> <name>dialogs::PreviewUploadOverlay</name> <message> @@ -1642,7 +1782,7 @@ Median koko: %2 <context> <name>dialogs::UserProfile</name> <message> - <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> <source>Ban the user from the room</source> <translation>Anna käyttäjälle porttikielto huoneesta</translation> </message> @@ -1662,7 +1802,17 @@ Median koko: %2 <translation>Aloita keskustelu</translation> </message> <message> - <location line="+61"/> + <location line="+14"/> + <source>Confirm DM</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+54"/> <source>Devices</source> <translation>Laitteet</translation> </message> @@ -1713,7 +1863,7 @@ Median koko: %2 <context> <name>message-description sent:</name> <message> - <location filename="../../src/Utils.h" line="+103"/> + <location filename="../../src/Utils.h" line="+106"/> <source>You sent an audio clip</source> <translation type="unfinished"></translation> </message> @@ -1792,6 +1942,36 @@ Median koko: %2 <source>%1 sent an encrypted message</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+5"/> + <source>You placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You ended a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 ended a call</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>popups::UserMentions</name> diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts index bf9b36f6eb79de0db241972bf1026ad8a637d51c..48047e32fa07d9a5c7aa08bf329a4d237ade4f26 100644 --- a/resources/langs/nheko_fr.ts +++ b/resources/langs/nheko_fr.ts @@ -4,134 +4,174 @@ <context> <name>Cache</name> <message> - <location filename="../../src/Cache.cpp" line="+1359"/> + <location filename="../../src/Cache.cpp" line="+1658"/> <source>You joined this room.</source> - <translation type="unfinished"></translation> + <translation>Vous avez rejoint ce salon.</translation> </message> </context> <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+229"/> + <location filename="../../src/ChatPage.cpp" line="+218"/> <source>Failed to invite user: %1</source> - <translation type="unfinished"></translation> + <translation>Échec lors de l'invitation de %1</translation> </message> <message> <location line="+4"/> - <location line="+926"/> + <location line="+947"/> <source>Invited user: %1</source> - <translation type="unfinished"></translation> + <translation>%1 a été invité(e)</translation> </message> <message> - <location line="-474"/> + <location line="-458"/> <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> - <translation type="unfinished"></translation> + <translation>La migration du cache vers la version actuelle a échoué. Cela peut arriver pour différentes raisons. Signalez le problème et essayez d'utiliser une ancienne version en attendant. Vous pouvez également supprimer le cache manuellement.</translation> </message> <message> - <location line="+439"/> + <location line="+415"/> <source>Room %1 created.</source> - <translation type="unfinished"></translation> + <translation>Salon %1 créé.</translation> </message> <message> - <location line="+30"/> + <location line="+26"/> + <source>Confirm invite</source> + <translation>Confirmer l'invitation</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation>Voulez-vous vraiment inviter %1 (%2) ?</translation> + </message> + <message> + <location line="+11"/> <source>Failed to invite %1 to %2: %3</source> - <translation type="unfinished"></translation> + <translation>Échec de l'invitation de %1 dans %2 : %3</translation> </message> <message> - <location line="+19"/> + <location line="+15"/> + <source>Confirm kick</source> + <translation>Confirmer l'expulsion</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation>Voulez-vous vraiment expulser %1 (%2) ?</translation> + </message> + <message> + <location line="+11"/> <source>Failed to kick %1 to %2: %3</source> - <translation type="unfinished"></translation> + <translation>%1 n'a pas pu être expulsé de %2 : %3</translation> </message> <message> <location line="+5"/> <source>Kicked user: %1</source> - <translation type="unfinished"></translation> + <translation>L'utilisateur %1 a été expulsé.</translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm ban</source> + <translation>Confirmer le bannissement</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation>Voulez-vous vraiment bannir %1 (%2) ?</translation> + </message> + <message> + <location line="+11"/> <source>Failed to ban %1 in %2: %3</source> - <translation type="unfinished"></translation> + <translation>L'utilisateur %1 n'a pas pu être banni de %2 : %3</translation> </message> <message> <location line="+5"/> <source>Banned user: %1</source> - <translation type="unfinished"></translation> + <translation>L'utilisateur %1 a été banni.</translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm unban</source> + <translation>Confirmer l'annulation du bannissement</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation>Voulez-vous vraiment annuler le bannissement de %1 (%2) ?</translation> + </message> + <message> + <location line="+11"/> <source>Failed to unban %1 in %2: %3</source> - <translation type="unfinished"></translation> + <translation>Échec de l'annulation du bannissement de %1 dans %2 : %3</translation> </message> <message> <location line="+5"/> <source>Unbanned user: %1</source> - <translation type="unfinished"></translation> + <translation>%1 n'est plus banni(e)</translation> </message> <message> - <location line="-828"/> + <location line="-874"/> <source>Failed to upload media. Please try again.</source> - <translation type="unfinished"></translation> + <translation>Échec de l'envoi du média. Veuillez réessayer.</translation> </message> <message> - <location line="+296"/> + <location line="+334"/> <source>Cache migration failed!</source> - <translation type="unfinished"></translation> + <translation>Échec de la migration du cache !</translation> </message> <message> <location line="+13"/> <source>Incompatible cache version</source> - <translation type="unfinished"></translation> + <translation>Version du cache incompatible</translation> </message> <message> <location line="+1"/> <source>The cache on your disk is newer than this version of Nheko supports. Please update or clear your cache.</source> - <translation type="unfinished"></translation> + <translation>Le cache sur votre disque est plus récent que cette version de Nheko ne supporte. Veuillez mettre à jour ou supprimer votre cache.</translation> </message> <message> - <location line="+111"/> + <location line="+67"/> <source>Failed to restore OLM account. Please login again.</source> - <translation type="unfinished"></translation> + <translation>Échec de la restauration du compte OLM. Veuillez vous reconnecter.</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Failed to restore save data. Please login again.</source> - <translation type="unfinished"></translation> + <translation>Échec de la restauration des données sauvegardées. Veuillez vous reconnecter.</translation> </message> <message> - <location line="+156"/> + <location line="+165"/> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> - <translation type="unfinished"></translation> + <translation>Échec de la configuration des clés de chiffrement. Réponse du serveur : %1 %2. Veuillez réessayer plus tard.</translation> </message> <message> - <location line="+54"/> - <location line="+252"/> + <location line="+99"/> + <location line="+251"/> <source>Please try to login again: %1</source> - <translation type="unfinished"></translation> + <translation>Veuillez vous reconnecter : %1</translation> </message> <message> - <location line="-187"/> + <location line="-219"/> <source>Failed to join room: %1</source> - <translation type="unfinished"></translation> + <translation>Impossible de rejoindre le salon : %1</translation> </message> <message> <location line="+5"/> <source>You joined the room</source> - <translation type="unfinished"></translation> + <translation>Vous avez rejoint le salon</translation> </message> <message> <location line="+6"/> <source>Failed to remove invite: %1</source> - <translation type="unfinished"></translation> + <translation>Impossible de supprimer l'invitation : %1</translation> </message> <message> <location line="+19"/> <source>Room creation failed: %1</source> - <translation type="unfinished"></translation> + <translation>Échec de la création du salon : %1</translation> </message> <message> <location line="+16"/> <source>Failed to leave room: %1</source> - <translation type="unfinished"></translation> + <translation>Impossible de quitter le salon : %1</translation> </message> </context> <context> @@ -139,34 +179,34 @@ <message> <location filename="../../src/CommunitiesListItem.cpp" line="+133"/> <source>All rooms</source> - <translation type="unfinished"></translation> + <translation>Tous les salons</translation> </message> <message> <location line="+4"/> <source>Favourite rooms</source> - <translation type="unfinished"></translation> + <translation>Salons favoris</translation> </message> <message> <location line="+2"/> <source>Low priority rooms</source> - <translation type="unfinished"></translation> + <translation>Salons basse priorité</translation> </message> <message> <location line="+2"/> <source>Server Notices</source> <comment>Tag translation for m.server_notice</comment> - <translation type="unfinished"></translation> + <translation>Notifications du serveur</translation> </message> <message> <location line="+2"/> <location line="+2"/> <source> (tag)</source> - <translation type="unfinished"></translation> + <translation> (étiquette)</translation> </message> <message> <location line="+3"/> <source> (community)</source> - <translation type="unfinished"></translation> + <translation> (communauté)</translation> </message> </context> <context> @@ -174,12 +214,12 @@ <message> <location filename="../../src/dialogs/RoomSettings.cpp" line="+72"/> <source>Apply</source> - <translation type="unfinished"></translation> + <translation>Appliquer</translation> </message> <message> <location line="+1"/> <source>Cancel</source> - <translation type="unfinished">Annuler</translation> + <translation>Annuler</translation> </message> <message> <location line="+10"/> @@ -198,47 +238,47 @@ <location filename="../qml/emoji/EmojiPicker.qml" line="+117"/> <location line="+139"/> <source>Search</source> - <translation type="unfinished"></translation> + <translation>Chercher</translation> </message> <message> <location line="-42"/> <source>People</source> - <translation type="unfinished"></translation> + <translation>Personnes</translation> </message> <message> <location line="+2"/> <source>Nature</source> - <translation type="unfinished"></translation> + <translation>Nature</translation> </message> <message> <location line="+2"/> <source>Food</source> - <translation type="unfinished"></translation> + <translation>Nourriture</translation> </message> <message> <location line="+2"/> <source>Activity</source> - <translation type="unfinished">Activités</translation> + <translation>Activités</translation> </message> <message> <location line="+2"/> <source>Travel</source> - <translation type="unfinished"></translation> + <translation>Voyage</translation> </message> <message> <location line="+2"/> <source>Objects</source> - <translation type="unfinished">Objets</translation> + <translation>Objets</translation> </message> <message> <location line="+2"/> <source>Symbols</source> - <translation type="unfinished">Symboles</translation> + <translation>Symboles</translation> </message> <message> <location line="+2"/> <source>Flags</source> - <translation type="unfinished">Drapeaux</translation> + <translation>Drapeaux</translation> </message> </context> <context> @@ -246,12 +286,49 @@ <message> <location filename="../qml/EncryptionIndicator.qml" line="+36"/> <source>Encrypted</source> - <translation type="unfinished"></translation> + <translation>Chiffré</translation> </message> <message> <location line="+2"/> <source>This message is not encrypted!</source> - <translation type="unfinished"></translation> + <translation>Ce message n'est pas chiffré !</translation> + </message> +</context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation>-- Évènement chiffré (pas de clé trouvé pour le déchiffrement) --</translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation>-- Échec du déchiffrement (échec de la récupération des clés megolm depuis la base de données) --</translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation>-- Erreur de déchiffrement (%1) --</translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation>-- Évènement chiffré (type d'évènement inconnu) --</translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation>-- Attaque par rejeu (replay attack) ! Cet index de message a été réutilisé ! --</translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation>-- Message d'un appareil non vérifié  --</translation> </message> </context> <context> @@ -259,7 +336,7 @@ <message> <location filename="../../src/InviteeItem.cpp" line="+18"/> <source>Remove</source> - <translation type="unfinished"></translation> + <translation>Retirer</translation> </message> </context> <context> @@ -280,7 +357,10 @@ You can also put your homeserver address there, if your server doesn't support .well-known lookup. Example: @user:server.my If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source> - <translation type="unfinished"></translation> + <translation>Votre nom de connexion. Un mxid doit commencer par un « @ » suivi de l'identifiant. L'identifiant doit être suivi du nom de serveur, séparé de celui-ci par « : ». +Vous pouvez également spécifier l'adresse de votre serveur ici, si votre serveur ne supporte pas l'identification .well-known. +Exemple : @utilisateur :monserveur.example.com +Si Nheko n'arrive pas à trouver votre serveur, il vous proposera de l'indiquer manuellement.</translation> </message> <message> <location line="+21"/> @@ -290,18 +370,19 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th <message> <location line="+5"/> <source>Device name</source> - <translation type="unfinished"></translation> + <translation>Nom de l'appareil</translation> </message> <message> <location line="+2"/> <source>A name for this device, which will be shown to others, when verifying your devices. If none is provided a default is used.</source> - <translation type="unfinished"></translation> + <translation>Un nom pour cet appareil, qui sera montré aux autres utilisateurs lorsque ceux-ci le vérifieront. Si aucun n'est fourni, un nom par défaut est utilisé.</translation> </message> <message> <location line="+6"/> <source>The address that can be used to contact you homeservers client API. Example: https://server.my:8787</source> - <translation type="unfinished"></translation> + <translation>L'adresse qui peut être utilisée pour joindre l'API client de votre serveur. +Exemple : https ://monserveur.example.com :8787</translation> </message> <message> <location line="+16"/> @@ -312,32 +393,32 @@ Example: https://server.my:8787</source> <message> <location line="-100"/> <source>Autodiscovery failed. Received malformed response.</source> - <translation type="unfinished"></translation> + <translation>Échec de la découverte automatique. Réponse mal formatée reçue.</translation> </message> <message> <location line="+6"/> <source>Autodiscovery failed. Unknown error when requesting .well-known.</source> - <translation type="unfinished"></translation> + <translation>Échec de la découverte automatique. Erreur inconnue lors de la demande de .well-known.</translation> </message> <message> <location line="+25"/> <source>The required endpoints were not found. Possibly not a Matrix server.</source> - <translation type="unfinished"></translation> + <translation>Les chemins requis n'ont pas été trouvés. Possible qu'il ne s'agisse pas d'un serveur Matrix.</translation> </message> <message> <location line="+6"/> <source>Received malformed response. Make sure the homeserver domain is valid.</source> - <translation type="unfinished"></translation> + <translation>Réponse mal formée reçue. Vérifiez que le nom de domaine du serveur est valide.</translation> </message> <message> <location line="+5"/> <source>An unknown error occured. Make sure the homeserver domain is valid.</source> - <translation type="unfinished"></translation> + <translation>Une erreur inconnue est survenue. Vérifiez que le nom de domaine du serveur est valide.</translation> </message> <message> <location line="+55"/> <source>SSO LOGIN</source> - <translation type="unfinished"></translation> + <translation>CONNEXION SSO</translation> </message> <message> <location line="+25"/> @@ -347,7 +428,7 @@ Example: https://server.my:8787</source> <message> <location line="+52"/> <source>SSO login failed</source> - <translation type="unfinished"></translation> + <translation>Échec de la connexion SSO</translation> </message> </context> <context> @@ -360,45 +441,76 @@ Example: https://server.my:8787</source> <message> <location line="+4"/> <source>OK</source> - <translation type="unfinished"></translation> + <translation>OK</translation> </message> </context> <context> <name>MessageDelegate</name> <message> <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> <source>redacted</source> - <translation type="unfinished"></translation> + <translation>effacé</translation> </message> <message> <location line="+6"/> <source>Encryption enabled</source> - <translation type="unfinished"></translation> + <translation>Chiffrement activé</translation> </message> <message> <location line="+6"/> <source>room name changed to: %1</source> - <translation type="unfinished"></translation> + <translation>nom du salon changé en : %1</translation> </message> <message> <location line="+0"/> <source>removed room name</source> - <translation type="unfinished"></translation> + <translation>nom du salon retiré</translation> </message> <message> <location line="+6"/> <source>topic changed to: %1</source> - <translation type="unfinished"></translation> + <translation>sujet changé pour : %1</translation> </message> <message> <location line="+0"/> <source>removed topic</source> - <translation type="unfinished"></translation> + <translation>sujet retiré</translation> </message> <message> <location line="+6"/> <source>%1 created and configured room: %2</source> - <translation type="unfinished"></translation> + <translation>%1 a créé et configuré le salon : %2</translation> + </message> + <message> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation>%1 a effectué un appel vocal.</translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation>%1 a effectué un appel vidéo.</translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation>%1 a appelé.</translation> + </message> + <message> + <location line="+7"/> + <source>%1 answered the call.</source> + <translation>%1 a répondu à l'appel.</translation> + </message> + <message> + <location line="+6"/> + <source>%1 ended the call.</source> + <translation>1% a terminé l'appel.</translation> + </message> + <message> + <location line="+6"/> + <source>Negotiating call...</source> + <translation>Négociation de l'appel…</translation> </message> </context> <context> @@ -406,7 +518,7 @@ Example: https://server.my:8787</source> <message> <location filename="../qml/delegates/Placeholder.qml" line="+4"/> <source>unimplemented event: </source> - <translation type="unfinished"></translation> + <translation>Évènement non implémenté : </translation> </message> </context> <context> @@ -427,7 +539,7 @@ Example: https://server.my:8787</source> <message> <location line="+3"/> <source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source> - <translation type="unfinished"></translation> + <translation>Le nom d'utilisateur ne doit pas être vide, et ne peut contenir que les caractères a à z, 0 à 9, et « . _ = - / ».</translation> </message> <message> <location line="+4"/> @@ -437,7 +549,7 @@ Example: https://server.my:8787</source> <message> <location line="+2"/> <source>Please choose a secure password. The exact requirements for password strength may depend on your server.</source> - <translation type="unfinished"></translation> + <translation>Veuillez choisir un mot de passe fort. Les demandes exactes sur la robustesse du mot de passe peuvent dépendre de votre serveur.</translation> </message> <message> <location line="+4"/> @@ -447,12 +559,12 @@ Example: https://server.my:8787</source> <message> <location line="+4"/> <source>Homeserver</source> - <translation type="unfinished"></translation> + <translation>Serveur</translation> </message> <message> <location line="+2"/> <source>A server that allows registration. Since matrix is decentralized, you need to first find a server you can register on or host your own.</source> - <translation type="unfinished"></translation> + <translation>Un serveur qui autorise les créations de compte. Matrix étant décentralisé, vous devez tout d'abord trouver un serveur sur lequel vous pouvez vous inscrire, ou bien héberger le vôtre.</translation> </message> <message> <location line="+17"/> @@ -462,7 +574,7 @@ Example: https://server.my:8787</source> <message> <location line="+55"/> <source>No supported registration flows!</source> - <translation type="unfinished"></translation> + <translation>Pas de méthode d'inscription supportée !</translation> </message> <message> <location line="+135"/> @@ -488,9 +600,9 @@ Example: https://server.my:8787</source> <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+984"/> + <location filename="../../src/Cache.cpp" line="+1443"/> <source>no version stored</source> - <translation type="unfinished"></translation> + <translation>pas de version enregistrée</translation> </message> </context> <context> @@ -503,49 +615,49 @@ Example: https://server.my:8787</source> <message> <location line="+7"/> <source>Tag room as:</source> - <translation type="unfinished"></translation> + <translation>Étiqueter le salon comme :</translation> </message> <message> <location line="+18"/> <source>Favourite</source> <comment>Standard matrix tag for favourites</comment> - <translation type="unfinished"></translation> + <translation>Favori</translation> </message> <message> <location line="+3"/> <source>Low Priority</source> <comment>Standard matrix tag for low priority rooms</comment> - <translation type="unfinished"></translation> + <translation>Basse priorité</translation> </message> <message> <location line="+3"/> <source>Server Notice</source> <comment>Standard matrix tag for server notices</comment> - <translation type="unfinished"></translation> + <translation>Notification du serveur</translation> </message> <message> <location line="+12"/> <source>Adds or removes the specified tag.</source> <comment>WhatsThis hint for tag menu actions</comment> - <translation type="unfinished"></translation> + <translation>Ajoute ou retire l'étiquette spécifiée.</translation> </message> <message> <location line="+38"/> <source>New tag...</source> <comment>Add a new tag to the room</comment> - <translation type="unfinished"></translation> + <translation>Nouvelle étiquette…</translation> </message> <message> <location line="+4"/> <source>New Tag</source> <comment>Tag name prompt title</comment> - <translation type="unfinished"></translation> + <translation>Nouvelle étiquette</translation> </message> <message> <location line="+1"/> <source>Tag:</source> <comment>Tag name prompt</comment> - <translation type="unfinished"></translation> + <translation>Étiquette :</translation> </message> <message> <location line="+173"/> @@ -563,7 +675,7 @@ Example: https://server.my:8787</source> <message> <location filename="../../src/SideBarActions.cpp" line="+40"/> <source>User settings</source> - <translation type="unfinished"></translation> + <translation>Paramètres utilisateur</translation> </message> <message> <location line="+7"/> @@ -578,12 +690,12 @@ Example: https://server.my:8787</source> <message> <location line="+16"/> <source>Start a new chat</source> - <translation type="unfinished"></translation> + <translation>Commencer une discussion</translation> </message> <message> <location line="+15"/> <source>Room directory</source> - <translation type="unfinished"></translation> + <translation>Annuaire des salons</translation> </message> </context> <context> @@ -591,49 +703,49 @@ Example: https://server.my:8787</source> <message> <location filename="../qml/StatusIndicator.qml" line="+14"/> <source>Failed</source> - <translation type="unfinished"></translation> + <translation>Échec</translation> </message> <message> <location line="+1"/> <source>Sent</source> - <translation type="unfinished"></translation> + <translation>Envoyé</translation> </message> <message> <location line="+1"/> <source>Received</source> - <translation type="unfinished"></translation> + <translation>Reçu</translation> </message> <message> <location line="+1"/> <source>Read</source> - <translation type="unfinished"></translation> + <translation>Lu</translation> </message> </context> <context> <name>TextInputWidget</name> <message> - <location filename="../../src/TextInputWidget.cpp" line="+460"/> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> <source>Send a file</source> - <translation type="unfinished"></translation> + <translation>Envoyer un fichier</translation> </message> <message> <location line="+13"/> - <location filename="../../src/TextInputWidget.h" line="+145"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> <source>Write a message...</source> - <translation>Écrivez un message...</translation> + <translation>Écrivez un message…</translation> </message> <message> <location line="+31"/> <source>Send a message</source> - <translation type="unfinished"></translation> + <translation>Envoyer un message</translation> </message> <message> <location line="+8"/> <source>Emoji</source> - <translation type="unfinished"></translation> + <translation>Emoji</translation> </message> <message> - <location line="+86"/> + <location line="+94"/> <source>Select a file</source> <translation>Sélectionnez un fichier</translation> </message> @@ -642,318 +754,309 @@ Example: https://server.my:8787</source> <source>All Files (*)</source> <translation>Tous les types de fichiers (*)</translation> </message> + <message> + <location line="+64"/> + <source>Place a call</source> + <translation>Appeler</translation> + </message> + <message> + <location line="+3"/> + <source>Hang up</source> + <translation>Raccrocher</translation> + </message> <message> <location filename="../../src/TextInputWidget.h" line="-5"/> <source>Connection lost. Nheko is trying to re-connect...</source> - <translation type="unfinished"></translation> + <translation>Connexion perdue. Nheko essaye de se reconnecter…</translation> </message> </context> <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+891"/> - <source>-- Decryption Error (failed to communicate with DB) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+20"/> - <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+13"/> - <source>-- Decryption Error (%1) --</source> - <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1.</comment> - <translation type="unfinished"></translation> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> + <source>Message redaction failed: %1</source> + <translation>Échec de la suppression du message : %1</translation> </message> <message> - <location line="+99"/> - <source>Message redaction failed: %1</source> - <translation type="unfinished"></translation> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> + <translation>Échec du chiffrement de l'évènement, envoi abandonné !</translation> </message> <message> - <location line="+488"/> + <location line="+195"/> <source>Save image</source> - <translation type="unfinished">Enregistrer l'image</translation> + <translation>Enregistrer l'image</translation> </message> <message> <location line="+2"/> <source>Save video</source> - <translation type="unfinished"></translation> + <translation>Enregistrer la vidéo</translation> </message> <message> <location line="+2"/> <source>Save audio</source> - <translation type="unfinished"></translation> + <translation>Enregistrer l'audio</translation> </message> <message> <location line="+2"/> <source>Save file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="-643"/> - <source>-- Encrypted Event (No keys found for decryption) --</source> - <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+82"/> - <source>-- Encrypted Event (Unknown event type) --</source> - <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> - <translation type="unfinished"></translation> + <translation>Enregistrer le fichier</translation> </message> <message numerus="yes"> - <location line="+693"/> + <location line="+129"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> - <translation type="unfinished"> - <numerusform></numerusform> - <numerusform></numerusform> + <translation> + <numerusform>%1%2 est en train d'écrire.</numerusform> + <numerusform>%1 et %2 sont en train d'écrire.</numerusform> </translation> </message> <message> <location line="+68"/> <source>%1 opened the room to the public.</source> - <translation type="unfinished"></translation> + <translation>%1 a rendu le salon ouvert au public.</translation> </message> <message> <location line="+2"/> <source>%1 made this room require and invitation to join.</source> - <translation type="unfinished"></translation> + <translation>%1 a rendu le rendu le salon joignable uniquement sur invitation.</translation> </message> <message> <location line="+23"/> <source>%1 made the room open to guests.</source> - <translation type="unfinished"></translation> + <translation>%1 a rendu le salon ouvert aux invités.</translation> </message> <message> <location line="+2"/> <source>%1 has closed the room to guest access.</source> - <translation type="unfinished"></translation> + <translation>%1 a fermé le salon aux invités.</translation> </message> <message> <location line="+23"/> <source>%1 made the room history world readable. Events may be now read by non-joined people.</source> - <translation type="unfinished"></translation> + <translation>%1 a rendu l'historique du salon lisible par tout le monde. Les évènement peuvent maintenant être lus par des personnes externes au salon.</translation> </message> <message> <location line="+4"/> <source>%1 set the room history visible to members from this point on.</source> - <translation type="unfinished"></translation> + <translation>%1 a rendu l'historique du salon visible aux membre à partir de cet instant.</translation> </message> <message> <location line="+3"/> <source>%1 set the room history visible to members since they were invited.</source> - <translation type="unfinished"></translation> + <translation>%1 a rendu l'historique visible aux membres à partir de leur invitation.</translation> </message> <message> <location line="+3"/> <source>%1 set the room history visible to members since they joined the room.</source> - <translation type="unfinished"></translation> + <translation>%1 a rendu l'historique du salon visible à partir de l'instant où un membre le rejoint.</translation> </message> <message> <location line="+22"/> <source>%1 has changed the room's permissions.</source> - <translation type="unfinished"></translation> + <translation>%1 a changé les permissions du salon.</translation> </message> <message> - <location line="+48"/> + <location line="+33"/> <source>%1 was invited.</source> - <translation type="unfinished"></translation> + <translation>%1 a été invité(e).</translation> </message> <message> <location line="+11"/> <source>%1 changed their display name and avatar.</source> - <translation type="unfinished"></translation> + <translation>%1 a changé son nom et avatar.</translation> </message> <message> <location line="+2"/> <source>%1 changed their display name.</source> - <translation type="unfinished"></translation> + <translation>%1 a changé son nom.</translation> </message> <message> <location line="+2"/> <source>%1 changed their avatar.</source> - <translation type="unfinished"></translation> + <translation>%1 a changé son avatar.</translation> </message> <message> <location line="+2"/> <source>%1 changed some profile info.</source> - <translation type="unfinished"></translation> + <translation>%1 a changé ses informations de profil.</translation> </message> <message> <location line="+4"/> <source>%1 joined.</source> - <translation type="unfinished"></translation> + <translation>%1 a rejoint le salon.</translation> </message> <message> <location line="+9"/> <source>%1 rejected their invite.</source> - <translation type="unfinished"></translation> + <translation>%1 a rejeté son invitation.</translation> </message> <message> <location line="+2"/> <source>Revoked the invite to %1.</source> - <translation type="unfinished"></translation> + <translation>%1 n'est plus invité.</translation> </message> <message> <location line="+3"/> <source>%1 left the room.</source> - <translation type="unfinished"></translation> + <translation>%1 a quitté le salon.</translation> </message> <message> <location line="+2"/> <source>Kicked %1.</source> - <translation type="unfinished"></translation> + <translation>%1 a été expulsé.</translation> </message> <message> <location line="+2"/> <source>Unbanned %1.</source> - <translation type="unfinished"></translation> + <translation>%1 n'est plus banni.</translation> </message> <message> <location line="+14"/> <source>%1 was banned.</source> - <translation type="unfinished"></translation> + <translation>%1 a été banni.</translation> </message> <message> <location line="-11"/> <source>%1 redacted their knock.</source> - <translation type="unfinished"></translation> + <translation>%1 ne frappe plus au salon.</translation> </message> <message> - <location line="-1281"/> + <location line="-943"/> <source>You joined this room.</source> - <translation type="unfinished"></translation> + <translation>Vous avez rejoint ce salon.</translation> </message> <message> - <location line="+1283"/> + <location line="+945"/> <source>Rejected the knock from %1.</source> - <translation type="unfinished"></translation> + <translation>%1 a été rejeté après avoir frappé au salon.</translation> </message> <message> <location line="+2"/> <source>%1 left after having already left!</source> <comment>This is a leave event after the user already left and shouldn't happen apart from state resets</comment> - <translation type="unfinished"></translation> + <translation>%1 a quitté le salon après l'avoir déjà quitté !</translation> </message> <message> <location line="+15"/> <source> Reason: %1</source> - <translation type="unfinished"></translation> + <translation>Raison : %1</translation> </message> <message> <location line="-5"/> <source>%1 knocked.</source> - <translation type="unfinished"></translation> + <translation>%1 a frappé au salon.</translation> </message> </context> <context> <name>TimelineRow</name> <message> - <location filename="../qml/TimelineRow.qml" line="+91"/> + <location filename="../qml/TimelineRow.qml" line="+94"/> <source>React</source> - <translation type="unfinished"></translation> + <translation>Réagir</translation> </message> <message> - <location line="+17"/> + <location line="+16"/> <source>Reply</source> - <translation type="unfinished"></translation> + <translation>Répondre</translation> </message> <message> <location line="+15"/> <source>Options</source> - <translation type="unfinished"></translation> + <translation>Options</translation> </message> </context> <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+54"/> + <location filename="../qml/TimelineView.qml" line="+61"/> <source>React</source> - <translation type="unfinished"></translation> + <translation>Réagir</translation> </message> <message> <location line="+4"/> <source>Reply</source> - <translation type="unfinished"></translation> + <translation>Réponse</translation> </message> <message> <location line="+4"/> <source>Read receipts</source> - <translation type="unfinished">Accusés de lecture</translation> + <translation>Accusés de lecture</translation> </message> <message> <location line="+4"/> <source>Mark as read</source> - <translation type="unfinished"></translation> + <translation>Marquer comme lu</translation> </message> <message> <location line="+3"/> <source>View raw message</source> - <translation type="unfinished"></translation> + <translation>Voir le message brut</translation> </message> <message> <location line="+6"/> <source>View decrypted raw message</source> - <translation type="unfinished"></translation> + <translation>Voir le message déchiffré brut</translation> </message> <message> <location line="+4"/> <source>Redact message</source> - <translation type="unfinished"></translation> + <translation>Effacer le message</translation> </message> <message> <location line="+6"/> <source>Save as</source> - <translation type="unfinished"></translation> + <translation>Enregistrer sous</translation> </message> <message> - <location line="+14"/> + <location line="+12"/> <source>No room open</source> - <translation type="unfinished"></translation> + <translation>Aucun salon ouvert</translation> </message> <message> - <location line="+271"/> - <source>Close</source> - <translation type="unfinished"></translation> + <location line="+53"/> + <source>Back to room list</source> + <translation>Revenir à la liste des salons</translation> </message> -</context> -<context> - <name>TopRoomBar</name> <message> - <location filename="../../src/TopRoomBar.cpp" line="+86"/> - <source>Room options</source> - <translation type="unfinished"></translation> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> + <translation>Pas de salon sélectionné</translation> </message> <message> - <location line="+5"/> - <source>Mentions</source> - <translation type="unfinished"></translation> + <location line="+28"/> + <source>Room options</source> + <translation>Options du salon</translation> </message> <message> - <location line="+34"/> + <location line="+7"/> <source>Invite users</source> <translation>Inviter des utilisateurs</translation> </message> <message> - <location line="+6"/> + <location line="+4"/> <source>Members</source> <translation>Membres</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Leave room</source> <translation>Quitter le salon</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Settings</source> <translation>Paramètres</translation> </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation>Fermer</translation> + </message> </context> <context> <name>TrayIcon</name> @@ -973,48 +1076,48 @@ Example: https://server.my:8787</source> <message> <location filename="../../src/UserInfoWidget.cpp" line="+95"/> <source>Logout</source> - <translation type="unfinished"></translation> + <translation>Se déconnecter</translation> </message> <message> <location line="+20"/> <source>Set custom status message</source> - <translation type="unfinished"></translation> + <translation>Choisir un message de statut personnalisé</translation> </message> <message> <location line="+4"/> <source>Custom status message</source> - <translation type="unfinished"></translation> + <translation>Message de statut personnalisé</translation> </message> <message> <location line="+1"/> <source>Status:</source> - <translation type="unfinished"></translation> + <translation>Statut :</translation> </message> <message> <location line="+9"/> <source>Set presence automatically</source> - <translation type="unfinished"></translation> + <translation>Changer la présence automatiquement</translation> </message> <message> <location line="+6"/> <source>Online</source> - <translation type="unfinished"></translation> + <translation>En ligne</translation> </message> <message> <location line="+5"/> <source>Unavailable</source> - <translation type="unfinished"></translation> + <translation>Non disponible</translation> </message> <message> <location line="+6"/> <source>Offline</source> - <translation type="unfinished"></translation> + <translation>Hors ligne</translation> </message> </context> <context> <name>UserSettingsPage</name> <message> - <location filename="../../src/UserSettingsPage.cpp" line="+535"/> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> <source>Minimize to tray</source> <translation>Réduire à la barre des tâches</translation> </message> @@ -1031,59 +1134,66 @@ Example: https://server.my:8787</source> <message> <location line="-3"/> <source>Circular Avatars</source> - <translation type="unfinished"></translation> + <translation>Avatars circulaires</translation> </message> <message> - <location line="-5"/> + <location line="-63"/> + <source>CALLS</source> + <translation>APPELS</translation> + </message> + <message> + <location line="+58"/> <source>Keep the application running in the background after closing the client window.</source> - <translation type="unfinished"></translation> + <translation>Conserver l'application en arrière plan après la fermeture de la fenêtre du client.</translation> </message> <message> <location line="+3"/> <source>Start the application in the background without showing the client window.</source> - <translation type="unfinished"></translation> + <translation>Démarrer l'application en arrière plan sans montrer la fenêtre du client.</translation> </message> <message> <location line="+4"/> <source>Change the appearance of user avatars in chats. OFF - square, ON - Circle.</source> - <translation type="unfinished"></translation> + <translation>Change l'apparence des avatars des utilisateurs dans les discussions. +OFF – carré, ON – cercle.</translation> </message> <message> <location line="+3"/> <source>Show a column containing groups and tags next to the room list.</source> - <translation type="unfinished"></translation> + <translation>Affiche une colonne contenant les groupes et tags à côté de la liste des salons.</translation> </message> <message> <location line="+1"/> <source>Decrypt messages in sidebar</source> - <translation type="unfinished"></translation> + <translation>Déchiffrer les messages dans la liste des salons</translation> </message> <message> <location line="+2"/> <source>Decrypt the messages shown in the sidebar. Only affects messages in encrypted chats.</source> - <translation type="unfinished"></translation> + <translation>Déchiffre les messages montrés dans la liste des salons. +Cela n'affecte que les messages des salons chiffrés.</translation> </message> <message> <location line="+2"/> <source>Show buttons in timeline</source> - <translation type="unfinished"></translation> + <translation>Montrer les boutons dans la discussion</translation> </message> <message> <location line="+2"/> <source>Show buttons to quickly reply, react or access additional options next to each message.</source> - <translation type="unfinished"></translation> + <translation>Montre les boutons de réponse, réaction ou options additionnelles près de chaque message.</translation> </message> <message> <location line="+2"/> <source>Limit width of timeline</source> - <translation type="unfinished"></translation> + <translation>Limiter la largeur de l'historique</translation> </message> <message> <location line="+2"/> <source>Set the max width of messages in the timeline (in pixels). This can help readability on wide screen, when Nheko is maximised</source> - <translation type="unfinished"></translation> + <translation>Règle la largeur maximale des messages dans la discussion (en pixels). Cela peut aider la lisibilité sur les écrans larges, quand Nheko est maximisé.</translation> </message> <message> <location line="+2"/> @@ -1094,19 +1204,23 @@ Only affects messages in encrypted chats.</source> <location line="+2"/> <source>Show who is typing in a room. This will also enable or disable sending typing notifications to others.</source> - <translation type="unfinished"></translation> + <translation>Montre qui écrit un message dans un salon. +Ceci activera ou désactivera également l'envoi de notifications similaires de votre part.</translation> </message> <message> <location line="+3"/> <source>Sort rooms by unreads</source> - <translation type="unfinished"></translation> + <translation>Trier les salons par statut de lecture</translation> </message> <message> <location line="+2"/> <source>Display rooms with new messages first. If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms, that you have muted, will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms.</source> - <translation type="unfinished"></translation> + <translation>Montre les salons qui contiennent de nouveaux messages en premier. +Si non activé, la liste des salons sera uniquement trié en fonction de la date du dernier message. +Si activé, les salons qui ont des notifications actives (le petit cercle avec un chiffre dedans) seront affichés en premier. +Les salons que vous avez rendu silencieux seront toujours triés par date du dernier message, car ceux-ci sont considérés comme moins importants.</translation> </message> <message> <location line="+7"/> @@ -1117,79 +1231,82 @@ If this is on, rooms which have active notifications (the small circle with a nu <location line="+2"/> <source>Show if your message was read. Status is displayed next to timestamps.</source> - <translation type="unfinished"></translation> + <translation>Montre si votre message a été lu. +Le statut est montré près de la date des messages.</translation> </message> <message> <location line="+2"/> <source>Send messages as Markdown</source> - <translation type="unfinished"></translation> + <translation>Composer les messages au format Markdown</translation> </message> <message> <location line="+2"/> <source>Allow using markdown in messages. When disabled, all messages are sent as a plain text.</source> - <translation type="unfinished"></translation> + <translation>Autorise l'utilisation de markdown dans les messages. +Lorsque désactivé, tous les messages sont envoyés en texte brut.</translation> </message> <message> <location line="+2"/> <source>Desktop notifications</source> - <translation type="unfinished"></translation> + <translation>Notifier sur le bureau</translation> </message> <message> <location line="+2"/> <source>Notify about received message when the client is not currently focused.</source> - <translation type="unfinished"></translation> + <translation>Notifie des messages reçus lorsque la fenêtre du client n'est pas focalisée.</translation> </message> <message> <location line="+1"/> <source>Alert on notification</source> - <translation type="unfinished"></translation> + <translation>Alerter sur notification</translation> </message> <message> <location line="+2"/> <source>Show an alert when a message is received. This usually causes the application icon in the task bar to animate in some fashion.</source> - <translation type="unfinished"></translation> + <translation>Alerte lorsqu'un message est reçu. +Cela met l'application en évidence dans la barre des tâches.</translation> </message> <message> <location line="+2"/> <source>Highlight message on hover</source> - <translation type="unfinished"></translation> + <translation>Surligner les messages survolés</translation> </message> <message> <location line="+2"/> <source>Change the background color of messages when you hover over them.</source> - <translation type="unfinished"></translation> + <translation>Change l'arrière plan des messages lorsqu'ils sont survolés avec la souris.</translation> </message> <message> <location line="+1"/> <source>Large Emoji in timeline</source> - <translation type="unfinished"></translation> + <translation>Grandes émoticônes dans la discussion</translation> </message> <message> <location line="+2"/> <source>Make font size larger if messages with only a few emojis are displayed.</source> - <translation type="unfinished"></translation> + <translation>Augmente la taille de la police lors de l'affichage de messages contenant uniquement quelques emojis.</translation> </message> <message> <location line="+5"/> <source>Scale factor</source> - <translation type="unfinished"></translation> + <translation>Facteur d'échelle</translation> </message> <message> <location line="+2"/> <source>Change the scale factor of the whole user interface.</source> - <translation type="unfinished"></translation> + <translation>Agrandit l'interface entière de ce facteur.</translation> </message> <message> <location line="+4"/> <source>Font size</source> - <translation type="unfinished"></translation> + <translation>Taille de police</translation> </message> <message> <location line="+1"/> <source>Font Family</source> - <translation type="unfinished"></translation> + <translation>Nom de police</translation> </message> <message> <location line="+8"/> @@ -1197,54 +1314,64 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Thème</translation> </message> <message> - <location line="+3"/> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation>Autoriser le serveur de secours pour les appels</translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation>Cela utilisera le serveur turn.matrix.org pour vous aider à rejoindre les appels si votre serveur ne propose pas de fonctionnalité TURN afin de traverser les pare-feu et NAT restrictifs.</translation> + </message> + <message> + <location line="+4"/> <source>Device ID</source> - <translation type="unfinished"></translation> + <translation>Identifiant de l'appareil</translation> </message> <message> <location line="+1"/> <source>Device Fingerprint</source> - <translation type="unfinished"></translation> + <translation>Empreinte de l'appareil</translation> </message> <message> - <location line="-113"/> + <location line="-120"/> <source>Session Keys</source> - <translation type="unfinished"></translation> + <translation>Clés de session</translation> </message> <message> <location line="+4"/> <source>IMPORT</source> - <translation type="unfinished"></translation> + <translation>IMPORTER</translation> </message> <message> <location line="+1"/> <source>EXPORT</source> - <translation type="unfinished"></translation> + <translation>EXPORTER</translation> </message> <message> <location line="-25"/> <source>ENCRYPTION</source> - <translation type="unfinished"></translation> + <translation>CHIFFREMENT</translation> </message> <message> - <location line="-71"/> + <location line="-78"/> <source>GENERAL</source> <translation>GÉNÉRAL</translation> </message> <message> - <location line="+29"/> + <location line="+30"/> <source>INTERFACE</source> - <translation type="unfinished"></translation> + <translation>INTERFACE</translation> </message> <message> - <location line="+166"/> + <location line="+172"/> <source>Emoji Font Family</source> - <translation type="unfinished"></translation> + <translation>Nom de Police Emoji</translation> </message> <message> - <location line="+179"/> + <location line="+191"/> <source>Open Sessions File</source> - <translation type="unfinished"></translation> + <translation>Ouvrir fichier de sessions</translation> </message> <message> <location line="+4"/> @@ -1258,34 +1385,34 @@ This usually causes the application icon in the task bar to animate in some fash <location line="+2"/> <location line="+2"/> <source>Error</source> - <translation type="unfinished"></translation> + <translation>Erreur</translation> </message> <message> <location line="-74"/> <location line="+32"/> <source>File Password</source> - <translation type="unfinished"></translation> + <translation>Mot de passe du fichier</translation> </message> <message> <location line="-31"/> <source>Enter the passphrase to decrypt the file:</source> - <translation type="unfinished"></translation> + <translation>Entrez la clé secrète pour déchiffrer le fichier  :</translation> </message> <message> <location line="+8"/> <location line="+32"/> <source>The password cannot be empty</source> - <translation type="unfinished"></translation> + <translation>Le mot de passe ne peut être vide</translation> </message> <message> <location line="-8"/> <source>Enter passphrase to encrypt your session keys:</source> - <translation type="unfinished"></translation> + <translation>Entrez une clé secrète pour chiffrer vos clés de session  :</translation> </message> <message> <location line="+15"/> <source>File to save the exported session keys</source> - <translation type="unfinished"></translation> + <translation>Fichier où sauvegarder les clés de session exportées</translation> </message> </context> <context> @@ -1314,9 +1441,22 @@ This usually causes the application icon in the task bar to animate in some fash <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+147"/> + <location filename="../../src/Utils.cpp" line="+146"/> <source>Yesterday</source> - <translation type="unfinished"></translation> + <translation>Hier</translation> + </message> +</context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation>Accepter</translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation>Rejeter</translation> </message> </context> <context> @@ -1324,12 +1464,12 @@ This usually causes the application icon in the task bar to animate in some fash <message> <location filename="../../src/dialogs/CreateRoom.cpp" line="+36"/> <source>Create room</source> - <translation type="unfinished"></translation> + <translation>Créer un salon</translation> </message> <message> <location line="+2"/> <source>Cancel</source> - <translation type="unfinished">Annuler</translation> + <translation>Annuler</translation> </message> <message> <location line="+10"/> @@ -1367,22 +1507,22 @@ This usually causes the application icon in the task bar to animate in some fash <message> <location filename="../../src/dialogs/FallbackAuth.cpp" line="+30"/> <source>Open Fallback in Browser</source> - <translation type="unfinished"></translation> + <translation>Ouvrir la solution de repli dans le navigateur</translation> </message> <message> <location line="+1"/> <source>Cancel</source> - <translation type="unfinished">Annuler</translation> + <translation>Annuler</translation> </message> <message> <location line="+1"/> <source>Confirm</source> - <translation type="unfinished"></translation> + <translation>Confirmer</translation> </message> <message> <location line="+12"/> <source>Open the fallback, follow the steps and confirm after completing them.</source> - <translation type="unfinished"></translation> + <translation>Ouvrez la solution de repli, suivez les étapes et confirmez après les avoir terminées.</translation> </message> </context> <context> @@ -1390,7 +1530,7 @@ This usually causes the application icon in the task bar to animate in some fash <message> <location filename="../../src/dialogs/InviteUsers.cpp" line="+42"/> <source>Cancel</source> - <translation type="unfinished">Annuler</translation> + <translation>Annuler</translation> </message> <message> <location line="+8"/> @@ -1403,12 +1543,12 @@ This usually causes the application icon in the task bar to animate in some fash <message> <location filename="../../src/dialogs/JoinRoom.cpp" line="+30"/> <source>Join</source> - <translation type="unfinished"></translation> + <translation>Rejoindre</translation> </message> <message> <location line="+2"/> <source>Cancel</source> - <translation type="unfinished">Annuler</translation> + <translation>Annuler</translation> </message> <message> <location line="+7"/> @@ -1421,7 +1561,7 @@ This usually causes the application icon in the task bar to animate in some fash <message> <location filename="../../src/dialogs/LeaveRoom.cpp" line="+31"/> <source>Cancel</source> - <translation type="unfinished">Annuler</translation> + <translation>Annuler</translation> </message> <message> <location line="+8"/> @@ -1434,7 +1574,7 @@ This usually causes the application icon in the task bar to animate in some fash <message> <location filename="../../src/dialogs/Logout.cpp" line="+47"/> <source>Cancel</source> - <translation type="unfinished">Annuler</translation> + <translation>Annuler</translation> </message> <message> <location line="+8"/> @@ -1442,6 +1582,19 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Déconnexion. Êtes-vous sûr·e ?</translation> </message> </context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation>Voix</translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation>Annuler</translation> + </message> +</context> <context> <name>dialogs::PreviewUploadOverlay</name> <message> @@ -1469,12 +1622,12 @@ Taille du média : %2 <message> <location filename="../../src/dialogs/ReCaptcha.cpp" line="+31"/> <source>Cancel</source> - <translation type="unfinished">Annuler</translation> + <translation>Annuler</translation> </message> <message> <location line="+1"/> <source>Confirm</source> - <translation type="unfinished"></translation> + <translation>Confirmer</translation> </message> <message> <location line="+11"/> @@ -1492,7 +1645,7 @@ Taille du média : %2 <message> <location line="+4"/> <source>Close</source> - <translation type="unfinished"></translation> + <translation>Fermer</translation> </message> </context> <context> @@ -1500,12 +1653,12 @@ Taille du média : %2 <message> <location line="-46"/> <source>Today %1</source> - <translation type="unfinished"></translation> + <translation>Aujourd'hui %1</translation> </message> <message> <location line="+3"/> <source>Yesterday %1</source> - <translation type="unfinished"></translation> + <translation>Hier %1</translation> </message> </context> <context> @@ -1513,22 +1666,22 @@ Taille du média : %2 <message> <location filename="../../src/dialogs/RoomSettings.cpp" line="+135"/> <source>Settings</source> - <translation type="unfinished">Paramètres</translation> + <translation>Paramètres</translation> </message> <message> <location line="+3"/> <source>Info</source> - <translation type="unfinished"></translation> + <translation>Info</translation> </message> <message> <location line="+11"/> <source>Internal ID</source> - <translation type="unfinished"></translation> + <translation>Identifiant interne</translation> </message> <message> <location line="+10"/> <source>Room Version</source> - <translation type="unfinished"></translation> + <translation>Version de salon</translation> </message> <message> <location line="+4"/> @@ -1573,96 +1726,110 @@ Taille du média : %2 <message> <location line="+50"/> <source>Encryption</source> - <translation type="unfinished"></translation> + <translation>Chiffrement</translation> </message> <message> <location line="+8"/> <source>End-to-End Encryption</source> - <translation type="unfinished"></translation> + <translation>Chiffrement bout-à -bout</translation> </message> <message> <location line="+1"/> <source>Encryption is currently experimental and things might break unexpectedly. <br>Please take note that it can't be disabled afterwards.</source> - <translation type="unfinished"></translation> + <translation>Le chiffrement est actuellement expérimental, et des choses inattendues peuvent se produire. +Veuillez noter qu'il n'est pas possible de le désactiver ultérieurement.</translation> </message> <message> <location line="+27"/> <source>Respond to key requests</source> - <translation type="unfinished"></translation> + <translation>Répondre aux requêtes de clés</translation> </message> <message> <location line="+3"/> <source>Whether or not the client should respond automatically with the session keys upon request. Use with caution, this is a temporary measure to test the E2E implementation until device verification is completed.</source> - <translation type="unfinished"></translation> + <translation>Choisit si le client doit répondre automatiquement ou non avec les clés de session +lorsqu'elles lui sont demandées. Utiliser avec précaution, il s'agit d'une mesure +temporaire pour valider l'implémentation du chiffrement de bout en bout en +attendant que la vérification des appareils soit opérationnelle.</translation> </message> <message numerus="yes"> <location line="+51"/> <source>%n member(s)</source> - <translation type="unfinished"> - <numerusform></numerusform> - <numerusform></numerusform> + <translation> + <numerusform>%n membre</numerusform> + <numerusform>%n membres</numerusform> </translation> </message> <message> <location line="+140"/> <source>Failed to enable encryption: %1</source> - <translation type="unfinished"></translation> + <translation>Échec de l'activation du chiffrement  : %1</translation> </message> <message> <location line="+147"/> <source>Select an avatar</source> - <translation type="unfinished"></translation> + <translation>Sélectionner un avatar</translation> </message> <message> <location line="+0"/> <source>All Files (*)</source> - <translation type="unfinished">Tous les types de fichiers (*)</translation> + <translation>Tous les types de fichiers (*)</translation> </message> <message> <location line="+12"/> <source>The selected file is not an image</source> - <translation type="unfinished"></translation> + <translation>Le fichier sélectionné n'est pas une image</translation> </message> <message> <location line="+5"/> <source>Error while reading file: %1</source> - <translation type="unfinished"></translation> + <translation>Erreur lors de la lecture du fichier  : %1</translation> </message> <message> <location line="+35"/> <location line="+20"/> <source>Failed to upload image: %s</source> - <translation type="unfinished"></translation> + <translation>Échec de l'envoi de l'image  : %s</translation> </message> </context> <context> <name>dialogs::UserProfile</name> <message> - <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> <source>Ban the user from the room</source> - <translation type="unfinished"></translation> + <translation>Bannir l'utilisateur du salon</translation> </message> <message> <location line="+8"/> <source>Ignore messages from this user</source> - <translation type="unfinished"></translation> + <translation>Ignorer les messages de cet utilisateur</translation> </message> <message> <location line="+9"/> <source>Kick the user from the room</source> - <translation type="unfinished"></translation> + <translation>Expulser l'utilisateur de ce salon</translation> </message> <message> <location line="+8"/> <source>Start a conversation</source> - <translation type="unfinished"></translation> + <translation>Démarrer une conversation</translation> </message> <message> - <location line="+61"/> + <location line="+14"/> + <source>Confirm DM</source> + <translation>Confirmer message privé</translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation>Voulez-vous vraiment inviter %1 (%2) dans un chat privé  ?</translation> + </message> + <message> + <location line="+54"/> <source>Devices</source> - <translation type="unfinished"></translation> + <translation>Appareils</translation> </message> </context> <context> @@ -1711,84 +1878,114 @@ Taille du média : %2 <context> <name>message-description sent:</name> <message> - <location filename="../../src/Utils.h" line="+103"/> + <location filename="../../src/Utils.h" line="+106"/> <source>You sent an audio clip</source> - <translation type="unfinished"></translation> + <translation>Vous avez envoyé un message audio</translation> </message> <message> <location line="+3"/> <source>%1 sent an audio clip</source> - <translation type="unfinished"></translation> + <translation>%1 a envoyé un message audio</translation> </message> <message> <location line="+5"/> <source>You sent an image</source> - <translation type="unfinished"></translation> + <translation>Vous avez envoyé une image</translation> </message> <message> <location line="+3"/> <source>%1 sent an image</source> - <translation type="unfinished"></translation> + <translation>%1 a envoyé une image</translation> </message> <message> <location line="+5"/> <source>You sent a file</source> - <translation type="unfinished"></translation> + <translation>Vous avez envoyé un fichier</translation> </message> <message> <location line="+3"/> <source>%1 sent a file</source> - <translation type="unfinished"></translation> + <translation>%1 a envoyé un fichier</translation> </message> <message> <location line="+5"/> <source>You sent a video</source> - <translation type="unfinished"></translation> + <translation>Vous avez envoyé une vidéo</translation> </message> <message> <location line="+3"/> <source>%1 sent a video</source> - <translation type="unfinished"></translation> + <translation>%1 a envoyé une vidéo</translation> </message> <message> <location line="+5"/> <source>You sent a sticker</source> - <translation type="unfinished"></translation> + <translation>Vous avez envoyé un autocollant</translation> </message> <message> <location line="+3"/> <source>%1 sent a sticker</source> - <translation type="unfinished"></translation> + <translation>%1 a envoyé un autocollant</translation> </message> <message> <location line="+5"/> <source>You sent a notification</source> - <translation type="unfinished"></translation> + <translation>Vous avez envoyé une notification</translation> </message> <message> <location line="+3"/> <source>%1 sent a notification</source> - <translation type="unfinished"></translation> + <translation>%1 a envoyé une notification</translation> </message> <message> <location line="+5"/> <source>You: %1</source> - <translation type="unfinished"></translation> + <translation>Vous  : %1</translation> </message> <message> <location line="+3"/> <source>%1: %2</source> - <translation type="unfinished"></translation> + <translation>%1  : %2</translation> </message> <message> <location line="+7"/> <source>You sent an encrypted message</source> - <translation type="unfinished"></translation> + <translation>Vous avez envoyé un message chiffré</translation> </message> <message> <location line="+3"/> <source>%1 sent an encrypted message</source> - <translation type="unfinished"></translation> + <translation>%1 a envoyé un message chiffré</translation> + </message> + <message> + <location line="+5"/> + <source>You placed a call</source> + <translation>Vous avez appelé</translation> + </message> + <message> + <location line="+3"/> + <source>%1 placed a call</source> + <translation>%1 a appelé</translation> + </message> + <message> + <location line="+5"/> + <source>You answered a call</source> + <translation>Vous avez répondu à un appel</translation> + </message> + <message> + <location line="+3"/> + <source>%1 answered a call</source> + <translation>%1 a répondu à un appel</translation> + </message> + <message> + <location line="+5"/> + <source>You ended a call</source> + <translation>Vous avez terminé un appel</translation> + </message> + <message> + <location line="+3"/> + <source>%1 ended a call</source> + <translation>%1 a terminé un appel</translation> </message> </context> <context> @@ -1796,12 +1993,12 @@ Taille du média : %2 <message> <location filename="../../src/popups/UserMentions.cpp" line="+64"/> <source>This Room</source> - <translation type="unfinished"></translation> + <translation>Ce salon</translation> </message> <message> <location line="+1"/> <source>All Rooms</source> - <translation type="unfinished"></translation> + <translation>Tous les salons</translation> </message> </context> <context> @@ -1809,7 +2006,7 @@ Taille du média : %2 <message> <location filename="../../src/Utils.h" line="+4"/> <source>Unknown Message Type</source> - <translation type="unfinished"></translation> + <translation>Type du message inconnu</translation> </message> </context> </TS> diff --git a/resources/langs/nheko_it.ts b/resources/langs/nheko_it.ts index b502640832f2bd99de5984f80f805e6f86bc89a6..4b9c32d4335af0bfc2c13b2060527cc12520321f 100644 --- a/resources/langs/nheko_it.ts +++ b/resources/langs/nheko_it.ts @@ -4,7 +4,7 @@ <context> <name>Cache</name> <message> - <location filename="../../src/Cache.cpp" line="+1359"/> + <location filename="../../src/Cache.cpp" line="+1658"/> <source>You joined this room.</source> <translation>Sei entrato in questa stanza.</translation> </message> @@ -12,33 +12,53 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+229"/> + <location filename="../../src/ChatPage.cpp" line="+218"/> <source>Failed to invite user: %1</source> <translation>Impossibile invitare l'utente: %1</translation> </message> <message> <location line="+4"/> - <location line="+926"/> + <location line="+947"/> <source>Invited user: %1</source> <translation>Invitato utente: %1</translation> </message> <message> - <location line="-474"/> + <location line="-458"/> <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> <translation>Migrazione della cache alla versione corrente fallita. Questo può avere diverse cause. Per favore apri una issue e nel frattempo prova ad usare una versione più vecchia. In alternativa puoi provare a cancellare la cache manualmente.</translation> </message> <message> - <location line="+439"/> + <location line="+415"/> <source>Room %1 created.</source> <translation>Stanza %1 creata.</translation> </message> <message> - <location line="+30"/> + <location line="+26"/> + <source>Confirm invite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to invite %1 to %2: %3</source> <translation>Impossibile invitare %1 a %2: %3</translation> </message> <message> - <location line="+19"/> + <location line="+15"/> + <source>Confirm kick</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to kick %1 to %2: %3</source> <translation>Impossibile scacciare %1 a %2: %3</translation> </message> @@ -48,7 +68,17 @@ <translation>Scacciato utente: %1</translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm ban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to ban %1 in %2: %3</source> <translation>Impossibile bannare %1 in %2: %3</translation> </message> @@ -58,7 +88,17 @@ <translation>Utente bannato: %1</translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm unban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to unban %1 in %2: %3</source> <translation>Impossibile rimuovere il ban di %1 in %2: %3</translation> </message> @@ -68,12 +108,12 @@ <translation>Rimosso il ban dall'utente: %1</translation> </message> <message> - <location line="-828"/> + <location line="-874"/> <source>Failed to upload media. Please try again.</source> <translation>Impossibile inviare il file multimediale. Per favore riprova.</translation> </message> <message> - <location line="+296"/> + <location line="+334"/> <source>Cache migration failed!</source> <translation>Migrazione della cache fallita!</translation> </message> @@ -88,28 +128,28 @@ <translation>La cache sul tuo disco è più nuova di quella supportata da questa versione di Nheko. Per favore aggiorna o pulisci la tua cache.</translation> </message> <message> - <location line="+111"/> + <location line="+67"/> <source>Failed to restore OLM account. Please login again.</source> <translation>Impossibile ripristinare l'account OLM. Per favore accedi nuovamente.</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Failed to restore save data. Please login again.</source> <translation>Impossibile ripristinare i dati salvati. Per favore accedi nuovamente.</translation> </message> <message> - <location line="+156"/> + <location line="+165"/> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <translation>Impossibile configurare le chiavi crittografiche. Risposta del server: %1 %2. Per favore riprova in seguito.</translation> </message> <message> - <location line="+54"/> - <location line="+252"/> + <location line="+99"/> + <location line="+251"/> <source>Please try to login again: %1</source> <translation>Per favore prova ad accedere nuovamente: %1</translation> </message> <message> - <location line="-187"/> + <location line="-219"/> <source>Failed to join room: %1</source> <translation>Impossibile accedere alla stanza: %1</translation> </message> @@ -254,6 +294,43 @@ <translation>Questo messaggio è in chiaro!</translation> </message> </context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation type="unfinished">-- Evento Criptato (Chiavi per la decriptazione non trovate) --</translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation type="unfinished">-- Errore di Decrittazione (impossibile recuperare le chiavi megolm dal DB) --</translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation type="unfinished">-- Errore di Decrittazione (%1) --</translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation type="unfinished">-- Evento Criptato (Tipo di evento ignoto) --</translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>InviteeItem</name> <message> @@ -371,6 +448,7 @@ Esempio: https://server.mio:8787</translation> <name>MessageDelegate</name> <message> <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> <source>redacted</source> <translation>oscurato</translation> </message> @@ -404,6 +482,36 @@ Esempio: https://server.mio:8787</translation> <source>%1 created and configured room: %2</source> <translation>%1 creato e configurata stanza: %2</translation> </message> + <message> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>%1 answered the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>%1 ended the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Negotiating call...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Placeholder</name> @@ -492,7 +600,7 @@ Esempio: https://server.mio:8787</translation> <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+984"/> + <location filename="../../src/Cache.cpp" line="+1443"/> <source>no version stored</source> <translation>nessuna versione memorizzata</translation> </message> @@ -616,13 +724,13 @@ Esempio: https://server.mio:8787</translation> <context> <name>TextInputWidget</name> <message> - <location filename="../../src/TextInputWidget.cpp" line="+460"/> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> <source>Send a file</source> <translation>Invia un file</translation> </message> <message> <location line="+13"/> - <location filename="../../src/TextInputWidget.h" line="+145"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> <source>Write a message...</source> <translation>Scrivi un messaggio…</translation> </message> @@ -637,7 +745,7 @@ Esempio: https://server.mio:8787</translation> <translation>Emoji</translation> </message> <message> - <location line="+86"/> + <location line="+94"/> <source>Select a file</source> <translation>Seleziona un file</translation> </message> @@ -646,6 +754,16 @@ Esempio: https://server.mio:8787</translation> <source>All Files (*)</source> <translation>Tutti i file (*)</translation> </message> + <message> + <location line="+64"/> + <source>Place a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Hang up</source> + <translation type="unfinished"></translation> + </message> <message> <location filename="../../src/TextInputWidget.h" line="-5"/> <source>Connection lost. Nheko is trying to re-connect...</source> @@ -655,30 +773,20 @@ Esempio: https://server.mio:8787</translation> <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+891"/> - <source>-- Decryption Error (failed to communicate with DB) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment> - <translation>-- Errore di Decriptazione (impossibile comunicare con il DB) --</translation> - </message> - <message> - <location line="+20"/> - <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> - <translation>-- Errore di Decrittazione (impossibile recuperare le chiavi megolm dal DB) --</translation> - </message> - <message> - <location line="+13"/> - <source>-- Decryption Error (%1) --</source> - <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1.</comment> - <translation>-- Errore di Decrittazione (%1) --</translation> - </message> - <message> - <location line="+99"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> <source>Message redaction failed: %1</source> <translation>Oscuramento del messaggio fallito: %1</translation> </message> <message> - <location line="+488"/> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+195"/> <source>Save image</source> <translation>Salva immagine</translation> </message> @@ -697,20 +805,8 @@ Esempio: https://server.mio:8787</translation> <source>Save file</source> <translation>Salva file</translation> </message> - <message> - <location line="-643"/> - <source>-- Encrypted Event (No keys found for decryption) --</source> - <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> - <translation>-- Evento Criptato (Chiavi per la decriptazione non trovate) --</translation> - </message> - <message> - <location line="+82"/> - <source>-- Encrypted Event (Unknown event type) --</source> - <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> - <translation>-- Evento Criptato (Tipo di evento ignoto) --</translation> - </message> <message numerus="yes"> - <location line="+693"/> + <location line="+129"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation> @@ -764,7 +860,7 @@ Esempio: https://server.mio:8787</translation> <translation>%1 ha cambiato i permessi della stanza.</translation> </message> <message> - <location line="+48"/> + <location line="+33"/> <source>%1 was invited.</source> <translation>%1 è stato invitato.</translation> </message> @@ -829,12 +925,12 @@ Esempio: https://server.mio:8787</translation> <translation>%1 ha oscurato la sua bussata.</translation> </message> <message> - <location line="-1281"/> + <location line="-943"/> <source>You joined this room.</source> <translation>Sei entrato in questa stanza.</translation> </message> <message> - <location line="+1283"/> + <location line="+945"/> <source>Rejected the knock from %1.</source> <translation>Rifiutata la bussata di %1.</translation> </message> @@ -858,12 +954,12 @@ Esempio: https://server.mio:8787</translation> <context> <name>TimelineRow</name> <message> - <location filename="../qml/TimelineRow.qml" line="+91"/> + <location filename="../qml/TimelineRow.qml" line="+94"/> <source>React</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> + <location line="+16"/> <source>Reply</source> <translation>Rispondi</translation> </message> @@ -876,7 +972,7 @@ Esempio: https://server.mio:8787</translation> <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+54"/> + <location filename="../qml/TimelineView.qml" line="+61"/> <source>React</source> <translation type="unfinished"></translation> </message> @@ -916,47 +1012,50 @@ Esempio: https://server.mio:8787</translation> <translation>Salva come</translation> </message> <message> - <location line="+14"/> + <location line="+12"/> <source>No room open</source> <translation>Nessuna stanza aperta</translation> </message> <message> - <location line="+271"/> - <source>Close</source> - <translation>Chiudi</translation> + <location line="+53"/> + <source>Back to room list</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TopRoomBar</name> <message> - <location filename="../../src/TopRoomBar.cpp" line="+86"/> - <source>Room options</source> - <translation>Opzioni della stanza</translation> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Mentions</source> - <translation>Menzioni</translation> + <location line="+28"/> + <source>Room options</source> + <translation type="unfinished">Opzioni della stanza</translation> </message> <message> - <location line="+34"/> + <location line="+7"/> <source>Invite users</source> - <translation>Invita utenti</translation> + <translation type="unfinished">Invita utenti</translation> </message> <message> - <location line="+6"/> + <location line="+4"/> <source>Members</source> - <translation>Membri</translation> + <translation type="unfinished">Membri</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Leave room</source> - <translation>Lascia la stanza</translation> + <translation type="unfinished">Lascia la stanza</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Settings</source> - <translation>Impostazioni</translation> + <translation type="unfinished">Impostazioni</translation> + </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation>Chiudi</translation> </message> </context> <context> @@ -1018,7 +1117,7 @@ Esempio: https://server.mio:8787</translation> <context> <name>UserSettingsPage</name> <message> - <location filename="../../src/UserSettingsPage.cpp" line="+535"/> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> <source>Minimize to tray</source> <translation>Minimizza nella tray</translation> </message> @@ -1038,7 +1137,12 @@ Esempio: https://server.mio:8787</translation> <translation>Avatar Circolari</translation> </message> <message> - <location line="-5"/> + <location line="-63"/> + <source>CALLS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+58"/> <source>Keep the application running in the background after closing the client window.</source> <translation type="unfinished"></translation> </message> @@ -1201,7 +1305,17 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Tema</translation> </message> <message> - <location line="+3"/> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> <source>Device ID</source> <translation>ID Dispositivo</translation> </message> @@ -1211,7 +1325,7 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Impronta digitale del dispositivo</translation> </message> <message> - <location line="-113"/> + <location line="-120"/> <source>Session Keys</source> <translation>Chiavi di Sessione</translation> </message> @@ -1231,22 +1345,22 @@ This usually causes the application icon in the task bar to animate in some fash <translation>CRITTOGRAFIA</translation> </message> <message> - <location line="-71"/> + <location line="-78"/> <source>GENERAL</source> <translation>GENERALE</translation> </message> <message> - <location line="+29"/> + <location line="+30"/> <source>INTERFACE</source> <translation>INTERFACCIA</translation> </message> <message> - <location line="+166"/> + <location line="+172"/> <source>Emoji Font Family</source> <translation>Famiglia dei caratteri delle Emoji</translation> </message> <message> - <location line="+179"/> + <location line="+191"/> <source>Open Sessions File</source> <translation>Apri File delle Sessioni</translation> </message> @@ -1318,11 +1432,24 @@ This usually causes the application icon in the task bar to animate in some fash <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+147"/> + <location filename="../../src/Utils.cpp" line="+146"/> <source>Yesterday</source> <translation>Ieri</translation> </message> </context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation type="unfinished">Accetta</translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>dialogs::CreateRoom</name> <message> @@ -1446,6 +1573,19 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Uscita. Ne sei certo?</translation> </message> </context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation type="unfinished">Annulla</translation> + </message> +</context> <context> <name>dialogs::PreviewUploadOverlay</name> <message> @@ -1646,7 +1786,7 @@ Peso media: %2 <context> <name>dialogs::UserProfile</name> <message> - <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> <source>Ban the user from the room</source> <translation>Banna l'utente dalla stanza</translation> </message> @@ -1666,7 +1806,17 @@ Peso media: %2 <translation>Inizia una conversazione</translation> </message> <message> - <location line="+61"/> + <location line="+14"/> + <source>Confirm DM</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+54"/> <source>Devices</source> <translation>Dispositivi</translation> </message> @@ -1717,7 +1867,7 @@ Peso media: %2 <context> <name>message-description sent:</name> <message> - <location filename="../../src/Utils.h" line="+103"/> + <location filename="../../src/Utils.h" line="+106"/> <source>You sent an audio clip</source> <translation>Hai inviato una clip audio</translation> </message> @@ -1796,6 +1946,36 @@ Peso media: %2 <source>%1 sent an encrypted message</source> <translation>%1 ha inviato un messaggio criptato</translation> </message> + <message> + <location line="+5"/> + <source>You placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You ended a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 ended a call</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>popups::UserMentions</name> diff --git a/resources/langs/nheko_ja.ts b/resources/langs/nheko_ja.ts index a806031bff166224cc524c800e9635f868640333..79fdd9a4c3fec0c2563ae1c1f24d6ea2607fe716 100644 --- a/resources/langs/nheko_ja.ts +++ b/resources/langs/nheko_ja.ts @@ -4,7 +4,7 @@ <context> <name>Cache</name> <message> - <location filename="../../src/Cache.cpp" line="+1359"/> + <location filename="../../src/Cache.cpp" line="+1658"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> @@ -12,33 +12,53 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+229"/> + <location filename="../../src/ChatPage.cpp" line="+218"/> <source>Failed to invite user: %1</source> <translation>ユーザーを招待ã§ãã¾ã›ã‚“ã§ã—ãŸ: %1</translation> </message> <message> <location line="+4"/> - <location line="+926"/> + <location line="+947"/> <source>Invited user: %1</source> <translation>招待ã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼: %1</translation> </message> <message> - <location line="-474"/> + <location line="-458"/> <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+439"/> + <location line="+415"/> <source>Room %1 created.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+30"/> + <location line="+26"/> + <source>Confirm invite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to invite %1 to %2: %3</source> <translation>%2ã«%1を招待ã§ãã¾ã›ã‚“ã§ã—ãŸ: %3</translation> </message> <message> - <location line="+19"/> + <location line="+15"/> + <source>Confirm kick</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to kick %1 to %2: %3</source> <translation>%2ã«%1を一時的ã«è¿½æ”¾ã§ãã¾ã›ã‚“ã§ã—ãŸ: %3</translation> </message> @@ -48,7 +68,17 @@ <translation>一時的ã«è¿½æ”¾ã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼: %1</translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm ban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to ban %1 in %2: %3</source> <translation>%2ã§%1を永久追放ã§ãã¾ã›ã‚“ã§ã—ãŸ: %3</translation> </message> @@ -58,7 +88,17 @@ <translation>永久追放ã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼: %1</translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm unban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to unban %1 in %2: %3</source> <translation>%2ã§%1ã®æ°¸ä¹…追放を解除ã§ãã¾ã›ã‚“ã§ã—ãŸ: %3</translation> </message> @@ -68,12 +108,12 @@ <translation>永久追放を解除ã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼: %1</translation> </message> <message> - <location line="-828"/> + <location line="-874"/> <source>Failed to upload media. Please try again.</source> <translation>メディアをアップãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚やり直ã—ã¦ä¸‹ã•ã„。</translation> </message> <message> - <location line="+296"/> + <location line="+334"/> <source>Cache migration failed!</source> <translation type="unfinished"></translation> </message> @@ -88,28 +128,28 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+111"/> + <location line="+67"/> <source>Failed to restore OLM account. Please login again.</source> <translation>OLMアカウントを復元ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã‚‚ã†ä¸€åº¦ãƒã‚°ã‚¤ãƒ³ã—ã¦ä¸‹ã•ã„。</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Failed to restore save data. Please login again.</source> <translation>セーブデータを復元ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã‚‚ã†ä¸€åº¦ãƒã‚°ã‚¤ãƒ³ã—ã¦ä¸‹ã•ã„。</translation> </message> <message> - <location line="+156"/> + <location line="+165"/> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <translation>æš—å·åŒ–éµã‚’è¨å®šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚サーãƒãƒ¼ã®å¿œç”: %1 %2. 後ã§ã‚„り直ã—ã¦ä¸‹ã•ã„。</translation> </message> <message> - <location line="+54"/> - <location line="+252"/> + <location line="+99"/> + <location line="+251"/> <source>Please try to login again: %1</source> <translation>ã‚‚ã†ä¸€åº¦ãƒã‚°ã‚¤ãƒ³ã—ã¦ã¿ã¦ä¸‹ã•ã„: %1</translation> </message> <message> - <location line="-187"/> + <location line="-219"/> <source>Failed to join room: %1</source> <translation>部屋ã«å‚åŠ ã§ãã¾ã›ã‚“ã§ã—ãŸ: %1</translation> </message> @@ -254,6 +294,43 @@ <translation type="unfinished"></translation> </message> </context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation type="unfinished">-- æš—å·åŒ–イベント (復å·éµãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“) --</translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation type="unfinished">-- 復å·ã‚¨ãƒ©ãƒ¼ (データベースã‹ã‚‰megolméµã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ) --</translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation type="unfinished">-- 復å·ã‚¨ãƒ©ãƒ¼ (%1) --</translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation type="unfinished">-- æš—å·åŒ–イベント (䏿˜Žãªã‚¤ãƒ™ãƒ³ãƒˆåž‹ã§ã™) --</translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>InviteeItem</name> <message> @@ -367,6 +444,7 @@ Example: https://server.my:8787</source> <name>MessageDelegate</name> <message> <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> <source>redacted</source> <translation>編集済ã¿</translation> </message> @@ -400,6 +478,36 @@ Example: https://server.my:8787</source> <source>%1 created and configured room: %2</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>%1 answered the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>%1 ended the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Negotiating call...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Placeholder</name> @@ -488,7 +596,7 @@ Example: https://server.my:8787</source> <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+984"/> + <location filename="../../src/Cache.cpp" line="+1443"/> <source>no version stored</source> <translation>ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒä¿å˜ã•れã¦ã„ã¾ã›ã‚“</translation> </message> @@ -612,13 +720,13 @@ Example: https://server.my:8787</source> <context> <name>TextInputWidget</name> <message> - <location filename="../../src/TextInputWidget.cpp" line="+460"/> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> <source>Send a file</source> <translation>ファイルをé€ä¿¡</translation> </message> <message> <location line="+13"/> - <location filename="../../src/TextInputWidget.h" line="+145"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> <source>Write a message...</source> <translation>メッセージを書ã...</translation> </message> @@ -633,7 +741,7 @@ Example: https://server.my:8787</source> <translation>絵文å—</translation> </message> <message> - <location line="+86"/> + <location line="+94"/> <source>Select a file</source> <translation>ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž</translation> </message> @@ -642,6 +750,16 @@ Example: https://server.my:8787</source> <source>All Files (*)</source> <translation>å…¨ã¦ã®ãƒ•ァイル (*)</translation> </message> + <message> + <location line="+64"/> + <source>Place a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Hang up</source> + <translation type="unfinished"></translation> + </message> <message> <location filename="../../src/TextInputWidget.h" line="-5"/> <source>Connection lost. Nheko is trying to re-connect...</source> @@ -651,30 +769,20 @@ Example: https://server.my:8787</source> <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+891"/> - <source>-- Decryption Error (failed to communicate with DB) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment> - <translation>-- 復å·ã‚¨ãƒ©ãƒ¼ (データベースã¨é€šä¿¡ã§ãã¾ã›ã‚“ã§ã—ãŸ) --</translation> - </message> - <message> - <location line="+20"/> - <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> - <translation>-- 復å·ã‚¨ãƒ©ãƒ¼ (データベースã‹ã‚‰megolméµã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ) --</translation> - </message> - <message> - <location line="+13"/> - <source>-- Decryption Error (%1) --</source> - <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1.</comment> - <translation type="unfinished">-- 復å·ã‚¨ãƒ©ãƒ¼ (%1) --</translation> - </message> - <message> - <location line="+99"/> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> <source>Message redaction failed: %1</source> <translation>メッセージを編集ã§ãã¾ã›ã‚“ã§ã—ãŸ: %1</translation> </message> <message> - <location line="+488"/> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+195"/> <source>Save image</source> <translation>ç”»åƒã‚’ä¿å˜</translation> </message> @@ -693,20 +801,8 @@ Example: https://server.my:8787</source> <source>Save file</source> <translation>ファイルをä¿å˜</translation> </message> - <message> - <location line="-643"/> - <source>-- Encrypted Event (No keys found for decryption) --</source> - <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> - <translation type="unfinished">-- æš—å·åŒ–イベント (復å·éµãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“) --</translation> - </message> - <message> - <location line="+82"/> - <source>-- Encrypted Event (Unknown event type) --</source> - <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> - <translation type="unfinished">-- æš—å·åŒ–イベント (䏿˜Žãªã‚¤ãƒ™ãƒ³ãƒˆåž‹ã§ã™) --</translation> - </message> <message numerus="yes"> - <location line="+693"/> + <location line="+129"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation> @@ -759,7 +855,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+48"/> + <location line="+33"/> <source>%1 was invited.</source> <translation>%1ãŒæ‹›å¾…ã•れã¾ã—ãŸã€‚</translation> </message> @@ -824,12 +920,12 @@ Example: https://server.my:8787</source> <translation>%1ãŒãƒŽãƒƒã‚¯ã‚’編集ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location line="-1281"/> + <location line="-943"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1283"/> + <location line="+945"/> <source>Rejected the knock from %1.</source> <translation>%1ã‹ã‚‰ã®ãƒŽãƒƒã‚¯ã‚’æ‹’å¦ã—ã¾ã—ãŸã€‚</translation> </message> @@ -853,12 +949,12 @@ Example: https://server.my:8787</source> <context> <name>TimelineRow</name> <message> - <location filename="../qml/TimelineRow.qml" line="+91"/> + <location filename="../qml/TimelineRow.qml" line="+94"/> <source>React</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> + <location line="+16"/> <source>Reply</source> <translation>返信</translation> </message> @@ -871,7 +967,7 @@ Example: https://server.my:8787</source> <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+54"/> + <location filename="../qml/TimelineView.qml" line="+61"/> <source>React</source> <translation type="unfinished"></translation> </message> @@ -911,47 +1007,50 @@ Example: https://server.my:8787</source> <translation>åå‰ã‚’付ã‘ã¦ä¿å˜</translation> </message> <message> - <location line="+14"/> + <location line="+12"/> <source>No room open</source> <translation>部屋ãŒé–‹ã„ã¦ã„ã¾ã›ã‚“</translation> </message> <message> - <location line="+271"/> - <source>Close</source> - <translation>é–‰ã˜ã‚‹</translation> + <location line="+53"/> + <source>Back to room list</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TopRoomBar</name> <message> - <location filename="../../src/TopRoomBar.cpp" line="+86"/> - <source>Room options</source> - <translation>部屋ã®ã‚ªãƒ—ション</translation> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Mentions</source> - <translation>メンション</translation> + <location line="+28"/> + <source>Room options</source> + <translation type="unfinished">部屋ã®ã‚ªãƒ—ション</translation> </message> <message> - <location line="+34"/> + <location line="+7"/> <source>Invite users</source> - <translation>ユーザーを招待</translation> + <translation type="unfinished">ユーザーを招待</translation> </message> <message> - <location line="+6"/> + <location line="+4"/> <source>Members</source> - <translation>メンãƒãƒ¼</translation> + <translation type="unfinished">メンãƒãƒ¼</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Leave room</source> - <translation>退室ã™ã‚‹</translation> + <translation type="unfinished">部屋を出る</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Settings</source> - <translation>è¨å®š</translation> + <translation type="unfinished">è¨å®š</translation> + </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation>é–‰ã˜ã‚‹</translation> </message> </context> <context> @@ -1013,7 +1112,7 @@ Example: https://server.my:8787</source> <context> <name>UserSettingsPage</name> <message> - <location filename="../../src/UserSettingsPage.cpp" line="+535"/> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> <source>Minimize to tray</source> <translation>ãƒˆãƒ¬ã‚¤ã¸æœ€å°åŒ–</translation> </message> @@ -1033,7 +1132,12 @@ Example: https://server.my:8787</source> <translation>円形アãƒã‚¿ãƒ¼</translation> </message> <message> - <location line="-5"/> + <location line="-63"/> + <source>CALLS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+58"/> <source>Keep the application running in the background after closing the client window.</source> <translation type="unfinished"></translation> </message> @@ -1196,7 +1300,17 @@ This usually causes the application icon in the task bar to animate in some fash <translation>テーマ</translation> </message> <message> - <location line="+3"/> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> <source>Device ID</source> <translation>デãƒã‚¤ã‚¹ID</translation> </message> @@ -1206,7 +1320,7 @@ This usually causes the application icon in the task bar to animate in some fash <translation>デãƒã‚¤ã‚¹ã®æŒ‡ç´‹</translation> </message> <message> - <location line="-113"/> + <location line="-120"/> <source>Session Keys</source> <translation>セッションéµ</translation> </message> @@ -1226,22 +1340,22 @@ This usually causes the application icon in the task bar to animate in some fash <translation>æš—å·åŒ–</translation> </message> <message> - <location line="-71"/> + <location line="-78"/> <source>GENERAL</source> <translation>全般</translation> </message> <message> - <location line="+29"/> + <location line="+30"/> <source>INTERFACE</source> <translation type="unfinished"></translation> </message> <message> - <location line="+166"/> + <location line="+172"/> <source>Emoji Font Family</source> <translation type="unfinished"></translation> </message> <message> - <location line="+179"/> + <location line="+191"/> <source>Open Sessions File</source> <translation>セッションファイルを開ã</translation> </message> @@ -1313,11 +1427,24 @@ This usually causes the application icon in the task bar to animate in some fash <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+147"/> + <location filename="../../src/Utils.cpp" line="+146"/> <source>Yesterday</source> <translation>昨日</translation> </message> </context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation type="unfinished">容èª</translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>dialogs::CreateRoom</name> <message> @@ -1441,6 +1568,19 @@ This usually causes the application icon in the task bar to animate in some fash <translation>本当ã«ãƒã‚°ã‚¢ã‚¦ãƒˆã—ã¾ã™ã‹?</translation> </message> </context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation type="unfinished">ã‚ャンセル</translation> + </message> +</context> <context> <name>dialogs::PreviewUploadOverlay</name> <message> @@ -1640,7 +1780,7 @@ Media size: %2 <context> <name>dialogs::UserProfile</name> <message> - <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> <source>Ban the user from the room</source> <translation>ユーザーを部屋ã‹ã‚‰æ°¸ä¹…追放ã™ã‚‹</translation> </message> @@ -1660,7 +1800,17 @@ Media size: %2 <translation>会話を始ã‚ã‚‹</translation> </message> <message> - <location line="+61"/> + <location line="+14"/> + <source>Confirm DM</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+54"/> <source>Devices</source> <translation>デãƒã‚¤ã‚¹</translation> </message> @@ -1711,7 +1861,7 @@ Media size: %2 <context> <name>message-description sent:</name> <message> - <location filename="../../src/Utils.h" line="+103"/> + <location filename="../../src/Utils.h" line="+106"/> <source>You sent an audio clip</source> <translation>音声データをé€ä¿¡ã—ã¾ã—ãŸ</translation> </message> @@ -1790,6 +1940,36 @@ Media size: %2 <source>%1 sent an encrypted message</source> <translation>%1ãŒæš—å·åŒ–ã•れãŸãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã—ã¾ã—ãŸ</translation> </message> + <message> + <location line="+5"/> + <source>You placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You ended a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 ended a call</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>popups::UserMentions</name> diff --git a/resources/langs/nheko_nl.ts b/resources/langs/nheko_nl.ts index 8d6a9f689ecbd845183e84309072d96ecdc6fab3..e957c57885d5d9825028bd6d77079e793a42f0f6 100644 --- a/resources/langs/nheko_nl.ts +++ b/resources/langs/nheko_nl.ts @@ -4,7 +4,7 @@ <context> <name>Cache</name> <message> - <location filename="../../src/Cache.cpp" line="+1359"/> + <location filename="../../src/Cache.cpp" line="+1658"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> @@ -12,33 +12,53 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+229"/> + <location filename="../../src/ChatPage.cpp" line="+218"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+926"/> + <location line="+947"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="-474"/> + <location line="-458"/> <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+439"/> + <location line="+415"/> <source>Room %1 created.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+30"/> + <location line="+26"/> + <source>Confirm invite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to invite %1 to %2: %3</source> <translation type="unfinished"></translation> </message> <message> - <location line="+19"/> + <location line="+15"/> + <source>Confirm kick</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to kick %1 to %2: %3</source> <translation type="unfinished"></translation> </message> @@ -48,7 +68,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm ban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to ban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -58,7 +88,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm unban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to unban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -68,12 +108,12 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-828"/> + <location line="-874"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+296"/> + <location line="+334"/> <source>Cache migration failed!</source> <translation type="unfinished"></translation> </message> @@ -88,28 +128,28 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+111"/> + <location line="+67"/> <source>Failed to restore OLM account. Please login again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Failed to restore save data. Please login again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+156"/> + <location line="+165"/> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+54"/> - <location line="+252"/> + <location line="+99"/> + <location line="+251"/> <source>Please try to login again: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="-187"/> + <location line="-219"/> <source>Failed to join room: %1</source> <translation type="unfinished"></translation> </message> @@ -254,6 +294,43 @@ <translation type="unfinished"></translation> </message> </context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>InviteeItem</name> <message> @@ -367,6 +444,7 @@ Example: https://server.my:8787</source> <name>MessageDelegate</name> <message> <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> <source>redacted</source> <translation type="unfinished"></translation> </message> @@ -400,6 +478,36 @@ Example: https://server.my:8787</source> <source>%1 created and configured room: %2</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>%1 answered the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>%1 ended the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Negotiating call...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Placeholder</name> @@ -488,7 +596,7 @@ Example: https://server.my:8787</source> <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+984"/> + <location filename="../../src/Cache.cpp" line="+1443"/> <source>no version stored</source> <translation type="unfinished"></translation> </message> @@ -612,13 +720,13 @@ Example: https://server.my:8787</source> <context> <name>TextInputWidget</name> <message> - <location filename="../../src/TextInputWidget.cpp" line="+460"/> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> <source>Send a file</source> <translation type="unfinished"></translation> </message> <message> <location line="+13"/> - <location filename="../../src/TextInputWidget.h" line="+145"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> <source>Write a message...</source> <translation>Typ een bericht...</translation> </message> @@ -633,7 +741,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+86"/> + <location line="+94"/> <source>Select a file</source> <translation>Kies een bestand</translation> </message> @@ -643,38 +751,38 @@ Example: https://server.my:8787</source> <translation>Alle bestanden (*)</translation> </message> <message> - <location filename="../../src/TextInputWidget.h" line="-5"/> - <source>Connection lost. Nheko is trying to re-connect...</source> + <location line="+64"/> + <source>Place a call</source> <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+891"/> - <source>-- Decryption Error (failed to communicate with DB) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment> + <location line="+3"/> + <source>Hang up</source> <translation type="unfinished"></translation> </message> <message> - <location line="+20"/> - <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <location filename="../../src/TextInputWidget.h" line="-5"/> + <source>Connection lost. Nheko is trying to re-connect...</source> <translation type="unfinished"></translation> </message> +</context> +<context> + <name>TimelineModel</name> <message> - <location line="+13"/> - <source>-- Decryption Error (%1) --</source> - <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1.</comment> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> + <source>Message redaction failed: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="+99"/> - <source>Message redaction failed: %1</source> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> <translation type="unfinished"></translation> </message> <message> - <location line="+488"/> + <location line="+195"/> <source>Save image</source> <translation type="unfinished">Afbeelding opslaan</translation> </message> @@ -693,20 +801,8 @@ Example: https://server.my:8787</source> <source>Save file</source> <translation type="unfinished"></translation> </message> - <message> - <location line="-643"/> - <source>-- Encrypted Event (No keys found for decryption) --</source> - <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+82"/> - <source>-- Encrypted Event (Unknown event type) --</source> - <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> - <translation type="unfinished"></translation> - </message> <message numerus="yes"> - <location line="+693"/> + <location line="+129"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation type="unfinished"> @@ -760,7 +856,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+48"/> + <location line="+33"/> <source>%1 was invited.</source> <translation type="unfinished"></translation> </message> @@ -825,12 +921,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-1281"/> + <location line="-943"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1283"/> + <location line="+945"/> <source>Rejected the knock from %1.</source> <translation type="unfinished"></translation> </message> @@ -854,12 +950,12 @@ Example: https://server.my:8787</source> <context> <name>TimelineRow</name> <message> - <location filename="../qml/TimelineRow.qml" line="+91"/> + <location filename="../qml/TimelineRow.qml" line="+94"/> <source>React</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> + <location line="+16"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -872,7 +968,7 @@ Example: https://server.my:8787</source> <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+54"/> + <location filename="../qml/TimelineView.qml" line="+61"/> <source>React</source> <translation type="unfinished"></translation> </message> @@ -912,47 +1008,50 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+12"/> <source>No room open</source> <translation type="unfinished"></translation> </message> <message> - <location line="+271"/> - <source>Close</source> + <location line="+53"/> + <source>Back to room list</source> <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TopRoomBar</name> <message> - <location filename="../../src/TopRoomBar.cpp" line="+86"/> - <source>Room options</source> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Mentions</source> + <location line="+28"/> + <source>Room options</source> <translation type="unfinished"></translation> </message> <message> - <location line="+34"/> + <location line="+7"/> <source>Invite users</source> - <translation>Gebruikers uitnodigen</translation> + <translation type="unfinished">Gebruikers uitnodigen</translation> </message> <message> - <location line="+6"/> + <location line="+4"/> <source>Members</source> - <translation>Leden</translation> + <translation type="unfinished">Leden</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Leave room</source> - <translation>Kamer verlaten</translation> + <translation type="unfinished">Kamer verlaten</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Settings</source> - <translation>Instellingen</translation> + <translation type="unfinished">Instellingen</translation> + </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation type="unfinished"></translation> </message> </context> <context> @@ -1014,7 +1113,7 @@ Example: https://server.my:8787</source> <context> <name>UserSettingsPage</name> <message> - <location filename="../../src/UserSettingsPage.cpp" line="+535"/> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> <source>Minimize to tray</source> <translation>Minimaliseren naar systeemvak</translation> </message> @@ -1034,7 +1133,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-5"/> + <location line="-63"/> + <source>CALLS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+58"/> <source>Keep the application running in the background after closing the client window.</source> <translation type="unfinished"></translation> </message> @@ -1197,7 +1301,17 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Thema</translation> </message> <message> - <location line="+3"/> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> <source>Device ID</source> <translation type="unfinished"></translation> </message> @@ -1207,7 +1321,7 @@ This usually causes the application icon in the task bar to animate in some fash <translation type="unfinished"></translation> </message> <message> - <location line="-113"/> + <location line="-120"/> <source>Session Keys</source> <translation type="unfinished"></translation> </message> @@ -1227,22 +1341,22 @@ This usually causes the application icon in the task bar to animate in some fash <translation type="unfinished"></translation> </message> <message> - <location line="-71"/> + <location line="-78"/> <source>GENERAL</source> <translation>ALGEMEEN</translation> </message> <message> - <location line="+29"/> + <location line="+30"/> <source>INTERFACE</source> <translation type="unfinished"></translation> </message> <message> - <location line="+166"/> + <location line="+172"/> <source>Emoji Font Family</source> <translation type="unfinished"></translation> </message> <message> - <location line="+179"/> + <location line="+191"/> <source>Open Sessions File</source> <translation type="unfinished"></translation> </message> @@ -1314,11 +1428,24 @@ This usually causes the application icon in the task bar to animate in some fash <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+147"/> + <location filename="../../src/Utils.cpp" line="+146"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> </context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation type="unfinished">Accepteren</translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>dialogs::CreateRoom</name> <message> @@ -1442,6 +1569,19 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Uitloggen. Weet je het zeker?</translation> </message> </context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation type="unfinished">Annuleren</translation> + </message> +</context> <context> <name>dialogs::PreviewUploadOverlay</name> <message> @@ -1640,7 +1780,7 @@ Mediagrootte: %2 <context> <name>dialogs::UserProfile</name> <message> - <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> <source>Ban the user from the room</source> <translation type="unfinished"></translation> </message> @@ -1660,7 +1800,17 @@ Mediagrootte: %2 <translation type="unfinished"></translation> </message> <message> - <location line="+61"/> + <location line="+14"/> + <source>Confirm DM</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+54"/> <source>Devices</source> <translation type="unfinished"></translation> </message> @@ -1711,7 +1861,7 @@ Mediagrootte: %2 <context> <name>message-description sent:</name> <message> - <location filename="../../src/Utils.h" line="+103"/> + <location filename="../../src/Utils.h" line="+106"/> <source>You sent an audio clip</source> <translation type="unfinished"></translation> </message> @@ -1790,6 +1940,36 @@ Mediagrootte: %2 <source>%1 sent an encrypted message</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+5"/> + <source>You placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You ended a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 ended a call</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>popups::UserMentions</name> diff --git a/resources/langs/nheko_pl.ts b/resources/langs/nheko_pl.ts index 934221a256045af73e2408f49b418015467c3522..fd4657d73db3cbc74a8e6a85dee7af3583bd2069 100644 --- a/resources/langs/nheko_pl.ts +++ b/resources/langs/nheko_pl.ts @@ -4,7 +4,7 @@ <context> <name>Cache</name> <message> - <location filename="../../src/Cache.cpp" line="+1359"/> + <location filename="../../src/Cache.cpp" line="+1658"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> @@ -12,33 +12,53 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+229"/> + <location filename="../../src/ChatPage.cpp" line="+218"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+926"/> + <location line="+947"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="-474"/> + <location line="-458"/> <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+439"/> + <location line="+415"/> <source>Room %1 created.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+30"/> + <location line="+26"/> + <source>Confirm invite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to invite %1 to %2: %3</source> <translation type="unfinished"></translation> </message> <message> - <location line="+19"/> + <location line="+15"/> + <source>Confirm kick</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to kick %1 to %2: %3</source> <translation type="unfinished"></translation> </message> @@ -48,7 +68,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm ban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to ban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -58,7 +88,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm unban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to unban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -68,12 +108,12 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-828"/> + <location line="-874"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+296"/> + <location line="+334"/> <source>Cache migration failed!</source> <translation type="unfinished"></translation> </message> @@ -88,28 +128,28 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+111"/> + <location line="+67"/> <source>Failed to restore OLM account. Please login again.</source> <translation>Nie udaÅ‚o siÄ™ przywrócić konta OLM. Spróbuj zalogować siÄ™ ponownie.</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Failed to restore save data. Please login again.</source> <translation>Nie udaÅ‚o siÄ™ przywrócić zapisanych danych. Spróbuj zalogować siÄ™ ponownie.</translation> </message> <message> - <location line="+156"/> + <location line="+165"/> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+54"/> - <location line="+252"/> + <location line="+99"/> + <location line="+251"/> <source>Please try to login again: %1</source> <translation>Spróbuj zalogować siÄ™ ponownie: %1</translation> </message> <message> - <location line="-187"/> + <location line="-219"/> <source>Failed to join room: %1</source> <translation type="unfinished"></translation> </message> @@ -254,6 +294,43 @@ <translation type="unfinished"></translation> </message> </context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>InviteeItem</name> <message> @@ -367,6 +444,7 @@ Example: https://server.my:8787</source> <name>MessageDelegate</name> <message> <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> <source>redacted</source> <translation type="unfinished"></translation> </message> @@ -400,6 +478,36 @@ Example: https://server.my:8787</source> <source>%1 created and configured room: %2</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>%1 answered the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>%1 ended the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Negotiating call...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Placeholder</name> @@ -488,7 +596,7 @@ Example: https://server.my:8787</source> <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+984"/> + <location filename="../../src/Cache.cpp" line="+1443"/> <source>no version stored</source> <translation type="unfinished"></translation> </message> @@ -612,13 +720,13 @@ Example: https://server.my:8787</source> <context> <name>TextInputWidget</name> <message> - <location filename="../../src/TextInputWidget.cpp" line="+460"/> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> <source>Send a file</source> <translation>WyÅ›lij plik</translation> </message> <message> <location line="+13"/> - <location filename="../../src/TextInputWidget.h" line="+145"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> <source>Write a message...</source> <translation>Napisz wiadomość…</translation> </message> @@ -633,7 +741,7 @@ Example: https://server.my:8787</source> <translation>Emoji</translation> </message> <message> - <location line="+86"/> + <location line="+94"/> <source>Select a file</source> <translation>Wybierz plik</translation> </message> @@ -642,6 +750,16 @@ Example: https://server.my:8787</source> <source>All Files (*)</source> <translation>Wszystkie pliki (*)</translation> </message> + <message> + <location line="+64"/> + <source>Place a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Hang up</source> + <translation type="unfinished"></translation> + </message> <message> <location filename="../../src/TextInputWidget.h" line="-5"/> <source>Connection lost. Nheko is trying to re-connect...</source> @@ -651,30 +769,20 @@ Example: https://server.my:8787</source> <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+891"/> - <source>-- Decryption Error (failed to communicate with DB) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+20"/> - <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> - <translation type="unfinished"></translation> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> + <source>Message redaction failed: %1</source> + <translation type="unfinished">Redagowanie wiadomoÅ›ci nie powiodÅ‚o siÄ™: %1</translation> </message> <message> - <location line="+13"/> - <source>-- Decryption Error (%1) --</source> - <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1.</comment> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> <translation type="unfinished"></translation> </message> <message> - <location line="+99"/> - <source>Message redaction failed: %1</source> - <translation type="unfinished">Redagowanie wiadomoÅ›ci nie powiodÅ‚o siÄ™: %1</translation> - </message> - <message> - <location line="+488"/> + <location line="+195"/> <source>Save image</source> <translation type="unfinished">Zapisz obraz</translation> </message> @@ -693,20 +801,8 @@ Example: https://server.my:8787</source> <source>Save file</source> <translation type="unfinished"></translation> </message> - <message> - <location line="-643"/> - <source>-- Encrypted Event (No keys found for decryption) --</source> - <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+82"/> - <source>-- Encrypted Event (Unknown event type) --</source> - <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> - <translation type="unfinished"></translation> - </message> <message numerus="yes"> - <location line="+693"/> + <location line="+129"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation type="unfinished"> @@ -761,7 +857,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+48"/> + <location line="+33"/> <source>%1 was invited.</source> <translation type="unfinished"></translation> </message> @@ -826,12 +922,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-1281"/> + <location line="-943"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1283"/> + <location line="+945"/> <source>Rejected the knock from %1.</source> <translation type="unfinished"></translation> </message> @@ -855,12 +951,12 @@ Example: https://server.my:8787</source> <context> <name>TimelineRow</name> <message> - <location filename="../qml/TimelineRow.qml" line="+91"/> + <location filename="../qml/TimelineRow.qml" line="+94"/> <source>React</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> + <location line="+16"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -873,7 +969,7 @@ Example: https://server.my:8787</source> <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+54"/> + <location filename="../qml/TimelineView.qml" line="+61"/> <source>React</source> <translation type="unfinished"></translation> </message> @@ -913,47 +1009,50 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+12"/> <source>No room open</source> <translation type="unfinished"></translation> </message> <message> - <location line="+271"/> - <source>Close</source> + <location line="+53"/> + <source>Back to room list</source> <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TopRoomBar</name> <message> - <location filename="../../src/TopRoomBar.cpp" line="+86"/> - <source>Room options</source> - <translation>Ustawienia pokoju</translation> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Mentions</source> - <translation type="unfinished"></translation> + <location line="+28"/> + <source>Room options</source> + <translation type="unfinished">Ustawienia pokoju</translation> </message> <message> - <location line="+34"/> + <location line="+7"/> <source>Invite users</source> - <translation>ZaproÅ› użytkowników</translation> + <translation type="unfinished">ZaproÅ› użytkowników</translation> </message> <message> - <location line="+6"/> + <location line="+4"/> <source>Members</source> - <translation>CzÅ‚onkowie</translation> + <translation type="unfinished">CzÅ‚onkowie</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Leave room</source> - <translation>Opuść pokój</translation> + <translation type="unfinished">Opuść pokój</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Settings</source> - <translation>Ustawienia</translation> + <translation type="unfinished">Ustawienia</translation> + </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation type="unfinished"></translation> </message> </context> <context> @@ -1015,7 +1114,7 @@ Example: https://server.my:8787</source> <context> <name>UserSettingsPage</name> <message> - <location filename="../../src/UserSettingsPage.cpp" line="+535"/> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> <source>Minimize to tray</source> <translation>Zminimalizuj do paska zadaÅ„</translation> </message> @@ -1035,7 +1134,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-5"/> + <location line="-63"/> + <source>CALLS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+58"/> <source>Keep the application running in the background after closing the client window.</source> <translation type="unfinished"></translation> </message> @@ -1198,7 +1302,17 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Motyw</translation> </message> <message> - <location line="+3"/> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> <source>Device ID</source> <translation>ID urzÄ…dzenia</translation> </message> @@ -1208,7 +1322,7 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Odcisk palca urzÄ…dzenia</translation> </message> <message> - <location line="-113"/> + <location line="-120"/> <source>Session Keys</source> <translation type="unfinished"></translation> </message> @@ -1228,22 +1342,22 @@ This usually causes the application icon in the task bar to animate in some fash <translation>SZYFROWANIE</translation> </message> <message> - <location line="-71"/> + <location line="-78"/> <source>GENERAL</source> <translation>OGÓLNE</translation> </message> <message> - <location line="+29"/> + <location line="+30"/> <source>INTERFACE</source> <translation type="unfinished"></translation> </message> <message> - <location line="+166"/> + <location line="+172"/> <source>Emoji Font Family</source> <translation type="unfinished"></translation> </message> <message> - <location line="+179"/> + <location line="+191"/> <source>Open Sessions File</source> <translation type="unfinished"></translation> </message> @@ -1315,11 +1429,24 @@ This usually causes the application icon in the task bar to animate in some fash <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+147"/> + <location filename="../../src/Utils.cpp" line="+146"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> </context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation type="unfinished">Akceptuj</translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>dialogs::CreateRoom</name> <message> @@ -1443,6 +1570,19 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Czy na pewno chcesz wylogować siÄ™?</translation> </message> </context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation type="unfinished">Anuluj</translation> + </message> +</context> <context> <name>dialogs::PreviewUploadOverlay</name> <message> @@ -1644,7 +1784,7 @@ Rozmiar multimediów: %2 <context> <name>dialogs::UserProfile</name> <message> - <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> <source>Ban the user from the room</source> <translation>Zablokuj użytkownika w tym pokoju</translation> </message> @@ -1664,7 +1804,17 @@ Rozmiar multimediów: %2 <translation>Rozpocznij rozmowÄ™</translation> </message> <message> - <location line="+61"/> + <location line="+14"/> + <source>Confirm DM</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+54"/> <source>Devices</source> <translation>UrzÄ…dzenia</translation> </message> @@ -1715,7 +1865,7 @@ Rozmiar multimediów: %2 <context> <name>message-description sent:</name> <message> - <location filename="../../src/Utils.h" line="+103"/> + <location filename="../../src/Utils.h" line="+106"/> <source>You sent an audio clip</source> <translation type="unfinished"></translation> </message> @@ -1794,6 +1944,36 @@ Rozmiar multimediów: %2 <source>%1 sent an encrypted message</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+5"/> + <source>You placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You ended a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 ended a call</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>popups::UserMentions</name> diff --git a/resources/langs/nheko_ro.ts b/resources/langs/nheko_ro.ts index 659c8f6cdd9126acca1462d0a838400e5e689027..9468bb28c72d5bb21524622dbe16a33f03d0393b 100644 --- a/resources/langs/nheko_ro.ts +++ b/resources/langs/nheko_ro.ts @@ -4,7 +4,7 @@ <context> <name>Cache</name> <message> - <location filename="../../src/Cache.cpp" line="+1359"/> + <location filename="../../src/Cache.cpp" line="+1658"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> @@ -12,33 +12,53 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+229"/> + <location filename="../../src/ChatPage.cpp" line="+218"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+926"/> + <location line="+947"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="-474"/> + <location line="-458"/> <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+439"/> + <location line="+415"/> <source>Room %1 created.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+30"/> + <location line="+26"/> + <source>Confirm invite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to invite %1 to %2: %3</source> <translation type="unfinished"></translation> </message> <message> - <location line="+19"/> + <location line="+15"/> + <source>Confirm kick</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to kick %1 to %2: %3</source> <translation type="unfinished"></translation> </message> @@ -48,7 +68,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm ban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to ban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -58,7 +88,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm unban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to unban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -68,12 +108,12 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-828"/> + <location line="-874"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+296"/> + <location line="+334"/> <source>Cache migration failed!</source> <translation type="unfinished"></translation> </message> @@ -88,28 +128,28 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+111"/> + <location line="+67"/> <source>Failed to restore OLM account. Please login again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Failed to restore save data. Please login again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+156"/> + <location line="+165"/> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+54"/> - <location line="+252"/> + <location line="+99"/> + <location line="+251"/> <source>Please try to login again: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="-187"/> + <location line="-219"/> <source>Failed to join room: %1</source> <translation type="unfinished"></translation> </message> @@ -254,6 +294,43 @@ <translation type="unfinished"></translation> </message> </context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>InviteeItem</name> <message> @@ -367,6 +444,7 @@ Example: https://server.my:8787</source> <name>MessageDelegate</name> <message> <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> <source>redacted</source> <translation type="unfinished"></translation> </message> @@ -400,6 +478,36 @@ Example: https://server.my:8787</source> <source>%1 created and configured room: %2</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>%1 answered the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>%1 ended the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Negotiating call...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Placeholder</name> @@ -488,7 +596,7 @@ Example: https://server.my:8787</source> <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+984"/> + <location filename="../../src/Cache.cpp" line="+1443"/> <source>no version stored</source> <translation type="unfinished"></translation> </message> @@ -612,13 +720,13 @@ Example: https://server.my:8787</source> <context> <name>TextInputWidget</name> <message> - <location filename="../../src/TextInputWidget.cpp" line="+460"/> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> <source>Send a file</source> <translation type="unfinished"></translation> </message> <message> <location line="+13"/> - <location filename="../../src/TextInputWidget.h" line="+145"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> <source>Write a message...</source> <translation type="unfinished"></translation> </message> @@ -633,7 +741,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+86"/> + <location line="+94"/> <source>Select a file</source> <translation type="unfinished"></translation> </message> @@ -643,38 +751,38 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../src/TextInputWidget.h" line="-5"/> - <source>Connection lost. Nheko is trying to re-connect...</source> + <location line="+64"/> + <source>Place a call</source> <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+891"/> - <source>-- Decryption Error (failed to communicate with DB) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment> + <location line="+3"/> + <source>Hang up</source> <translation type="unfinished"></translation> </message> <message> - <location line="+20"/> - <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <location filename="../../src/TextInputWidget.h" line="-5"/> + <source>Connection lost. Nheko is trying to re-connect...</source> <translation type="unfinished"></translation> </message> +</context> +<context> + <name>TimelineModel</name> <message> - <location line="+13"/> - <source>-- Decryption Error (%1) --</source> - <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1.</comment> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> + <source>Message redaction failed: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="+99"/> - <source>Message redaction failed: %1</source> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> <translation type="unfinished"></translation> </message> <message> - <location line="+488"/> + <location line="+195"/> <source>Save image</source> <translation type="unfinished"></translation> </message> @@ -693,20 +801,8 @@ Example: https://server.my:8787</source> <source>Save file</source> <translation type="unfinished"></translation> </message> - <message> - <location line="-643"/> - <source>-- Encrypted Event (No keys found for decryption) --</source> - <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+82"/> - <source>-- Encrypted Event (Unknown event type) --</source> - <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> - <translation type="unfinished"></translation> - </message> <message numerus="yes"> - <location line="+693"/> + <location line="+129"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation type="unfinished"> @@ -761,7 +857,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+48"/> + <location line="+33"/> <source>%1 was invited.</source> <translation type="unfinished"></translation> </message> @@ -826,12 +922,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-1281"/> + <location line="-943"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1283"/> + <location line="+945"/> <source>Rejected the knock from %1.</source> <translation type="unfinished"></translation> </message> @@ -855,12 +951,12 @@ Example: https://server.my:8787</source> <context> <name>TimelineRow</name> <message> - <location filename="../qml/TimelineRow.qml" line="+91"/> + <location filename="../qml/TimelineRow.qml" line="+94"/> <source>React</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> + <location line="+16"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -873,7 +969,7 @@ Example: https://server.my:8787</source> <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+54"/> + <location filename="../qml/TimelineView.qml" line="+61"/> <source>React</source> <translation type="unfinished"></translation> </message> @@ -913,48 +1009,51 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+12"/> <source>No room open</source> <translation type="unfinished"></translation> </message> <message> - <location line="+271"/> - <source>Close</source> + <location line="+53"/> + <source>Back to room list</source> <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TopRoomBar</name> <message> - <location filename="../../src/TopRoomBar.cpp" line="+86"/> - <source>Room options</source> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Mentions</source> + <location line="+28"/> + <source>Room options</source> <translation type="unfinished"></translation> </message> <message> - <location line="+34"/> + <location line="+7"/> <source>Invite users</source> <translation type="unfinished"></translation> </message> <message> - <location line="+6"/> + <location line="+4"/> <source>Members</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Leave room</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Settings</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>TrayIcon</name> @@ -1015,7 +1114,7 @@ Example: https://server.my:8787</source> <context> <name>UserSettingsPage</name> <message> - <location filename="../../src/UserSettingsPage.cpp" line="+535"/> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> <source>Minimize to tray</source> <translation type="unfinished"></translation> </message> @@ -1035,7 +1134,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-5"/> + <location line="-63"/> + <source>CALLS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+58"/> <source>Keep the application running in the background after closing the client window.</source> <translation type="unfinished"></translation> </message> @@ -1198,7 +1302,17 @@ This usually causes the application icon in the task bar to animate in some fash <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> <source>Device ID</source> <translation type="unfinished"></translation> </message> @@ -1208,7 +1322,7 @@ This usually causes the application icon in the task bar to animate in some fash <translation type="unfinished"></translation> </message> <message> - <location line="-113"/> + <location line="-120"/> <source>Session Keys</source> <translation type="unfinished"></translation> </message> @@ -1228,22 +1342,22 @@ This usually causes the application icon in the task bar to animate in some fash <translation type="unfinished"></translation> </message> <message> - <location line="-71"/> + <location line="-78"/> <source>GENERAL</source> <translation type="unfinished"></translation> </message> <message> - <location line="+29"/> + <location line="+30"/> <source>INTERFACE</source> <translation type="unfinished"></translation> </message> <message> - <location line="+166"/> + <location line="+172"/> <source>Emoji Font Family</source> <translation type="unfinished"></translation> </message> <message> - <location line="+179"/> + <location line="+191"/> <source>Open Sessions File</source> <translation type="unfinished"></translation> </message> @@ -1315,11 +1429,24 @@ This usually causes the application icon in the task bar to animate in some fash <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+147"/> + <location filename="../../src/Utils.cpp" line="+146"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> </context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>dialogs::CreateRoom</name> <message> @@ -1443,6 +1570,19 @@ This usually causes the application icon in the task bar to animate in some fash <translation type="unfinished"></translation> </message> </context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>dialogs::PreviewUploadOverlay</name> <message> @@ -1640,7 +1780,7 @@ Media size: %2 <context> <name>dialogs::UserProfile</name> <message> - <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> <source>Ban the user from the room</source> <translation type="unfinished"></translation> </message> @@ -1660,7 +1800,17 @@ Media size: %2 <translation type="unfinished"></translation> </message> <message> - <location line="+61"/> + <location line="+14"/> + <source>Confirm DM</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+54"/> <source>Devices</source> <translation type="unfinished"></translation> </message> @@ -1711,7 +1861,7 @@ Media size: %2 <context> <name>message-description sent:</name> <message> - <location filename="../../src/Utils.h" line="+103"/> + <location filename="../../src/Utils.h" line="+106"/> <source>You sent an audio clip</source> <translation type="unfinished"></translation> </message> @@ -1790,6 +1940,36 @@ Media size: %2 <source>%1 sent an encrypted message</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+5"/> + <source>You placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You ended a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 ended a call</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>popups::UserMentions</name> diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts index 541b0df9303c30b94f360706718dbdf9c9d1805a..95cef76780c9d62b85ff4b2804113bcd7b93cfa5 100644 --- a/resources/langs/nheko_ru.ts +++ b/resources/langs/nheko_ru.ts @@ -4,7 +4,7 @@ <context> <name>Cache</name> <message> - <location filename="../../src/Cache.cpp" line="+1359"/> + <location filename="../../src/Cache.cpp" line="+1658"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> @@ -12,33 +12,53 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+229"/> + <location filename="../../src/ChatPage.cpp" line="+218"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+926"/> + <location line="+947"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="-474"/> + <location line="-458"/> <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+439"/> + <location line="+415"/> <source>Room %1 created.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+30"/> + <location line="+26"/> + <source>Confirm invite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to invite %1 to %2: %3</source> <translation type="unfinished"></translation> </message> <message> - <location line="+19"/> + <location line="+15"/> + <source>Confirm kick</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to kick %1 to %2: %3</source> <translation type="unfinished"></translation> </message> @@ -48,7 +68,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm ban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to ban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -58,7 +88,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm unban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to unban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -68,12 +108,12 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-828"/> + <location line="-874"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+296"/> + <location line="+334"/> <source>Cache migration failed!</source> <translation type="unfinished"></translation> </message> @@ -88,28 +128,28 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+111"/> + <location line="+67"/> <source>Failed to restore OLM account. Please login again.</source> <translation>Ðе удалоÑÑŒ воÑÑтановить учетную запиÑÑŒ OLM. ПожалуйÑта, войдите Ñнова.</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Failed to restore save data. Please login again.</source> <translation>Ðе удалоÑÑŒ воÑÑтановить Ñохраненные данные. ПожалуйÑта, войдите Ñнова.</translation> </message> <message> - <location line="+156"/> + <location line="+165"/> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <translation>Ðе удалоÑÑŒ наÑтроить ключи шифрованиÑ. Ответ Ñервера:%1 %2. ПожалуйÑта, попробуйте позже.</translation> </message> <message> - <location line="+54"/> - <location line="+252"/> + <location line="+99"/> + <location line="+251"/> <source>Please try to login again: %1</source> <translation>Повторите попытку входа: %1</translation> </message> <message> - <location line="-187"/> + <location line="-219"/> <source>Failed to join room: %1</source> <translation type="unfinished"></translation> </message> @@ -254,6 +294,43 @@ <translation type="unfinished"></translation> </message> </context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>InviteeItem</name> <message> @@ -367,6 +444,7 @@ Example: https://server.my:8787</source> <name>MessageDelegate</name> <message> <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> <source>redacted</source> <translation type="unfinished"></translation> </message> @@ -400,6 +478,36 @@ Example: https://server.my:8787</source> <source>%1 created and configured room: %2</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>%1 answered the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>%1 ended the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Negotiating call...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Placeholder</name> @@ -488,7 +596,7 @@ Example: https://server.my:8787</source> <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+984"/> + <location filename="../../src/Cache.cpp" line="+1443"/> <source>no version stored</source> <translation type="unfinished"></translation> </message> @@ -612,13 +720,13 @@ Example: https://server.my:8787</source> <context> <name>TextInputWidget</name> <message> - <location filename="../../src/TextInputWidget.cpp" line="+460"/> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> <source>Send a file</source> <translation>Отправить файл</translation> </message> <message> <location line="+13"/> - <location filename="../../src/TextInputWidget.h" line="+145"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> <source>Write a message...</source> <translation>ÐапиÑать Ñообщение...</translation> </message> @@ -633,7 +741,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+86"/> + <location line="+94"/> <source>Select a file</source> <translation>Выберите файл</translation> </message> @@ -642,6 +750,16 @@ Example: https://server.my:8787</source> <source>All Files (*)</source> <translation>Ð’Ñе файлы (*)</translation> </message> + <message> + <location line="+64"/> + <source>Place a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Hang up</source> + <translation type="unfinished"></translation> + </message> <message> <location filename="../../src/TextInputWidget.h" line="-5"/> <source>Connection lost. Nheko is trying to re-connect...</source> @@ -651,30 +769,20 @@ Example: https://server.my:8787</source> <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+891"/> - <source>-- Decryption Error (failed to communicate with DB) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+20"/> - <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> - <translation type="unfinished"></translation> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> + <source>Message redaction failed: %1</source> + <translation type="unfinished">Ошибка Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑообщениÑ: %1</translation> </message> <message> - <location line="+13"/> - <source>-- Decryption Error (%1) --</source> - <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1.</comment> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> <translation type="unfinished"></translation> </message> <message> - <location line="+99"/> - <source>Message redaction failed: %1</source> - <translation type="unfinished">Ошибка Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑообщениÑ: %1</translation> - </message> - <message> - <location line="+488"/> + <location line="+195"/> <source>Save image</source> <translation type="unfinished">Сохранить изображение</translation> </message> @@ -693,20 +801,8 @@ Example: https://server.my:8787</source> <source>Save file</source> <translation type="unfinished"></translation> </message> - <message> - <location line="-643"/> - <source>-- Encrypted Event (No keys found for decryption) --</source> - <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+82"/> - <source>-- Encrypted Event (Unknown event type) --</source> - <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> - <translation type="unfinished"></translation> - </message> <message numerus="yes"> - <location line="+693"/> + <location line="+129"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation type="unfinished"> @@ -761,7 +857,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+48"/> + <location line="+33"/> <source>%1 was invited.</source> <translation type="unfinished"></translation> </message> @@ -826,12 +922,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-1281"/> + <location line="-943"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1283"/> + <location line="+945"/> <source>Rejected the knock from %1.</source> <translation type="unfinished"></translation> </message> @@ -855,12 +951,12 @@ Example: https://server.my:8787</source> <context> <name>TimelineRow</name> <message> - <location filename="../qml/TimelineRow.qml" line="+91"/> + <location filename="../qml/TimelineRow.qml" line="+94"/> <source>React</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> + <location line="+16"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -873,7 +969,7 @@ Example: https://server.my:8787</source> <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+54"/> + <location filename="../qml/TimelineView.qml" line="+61"/> <source>React</source> <translation type="unfinished"></translation> </message> @@ -913,47 +1009,50 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+12"/> <source>No room open</source> <translation type="unfinished"></translation> </message> <message> - <location line="+271"/> - <source>Close</source> - <translation type="unfinished">Закрыть</translation> + <location line="+53"/> + <source>Back to room list</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TopRoomBar</name> <message> - <location filename="../../src/TopRoomBar.cpp" line="+86"/> - <source>Room options</source> - <translation>ÐаÑтройки комнаты</translation> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Mentions</source> - <translation type="unfinished"></translation> + <location line="+28"/> + <source>Room options</source> + <translation type="unfinished">ÐаÑтройки комнаты</translation> </message> <message> - <location line="+34"/> + <location line="+7"/> <source>Invite users</source> - <translation>ПриглаÑить пользователей</translation> + <translation type="unfinished">ПриглаÑить пользователей</translation> </message> <message> - <location line="+6"/> + <location line="+4"/> <source>Members</source> - <translation>УчаÑтники</translation> + <translation type="unfinished">УчаÑтники</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Leave room</source> - <translation>Покинуть комнату</translation> + <translation type="unfinished">Покинуть комнату</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Settings</source> - <translation>ÐаÑтройки</translation> + <translation type="unfinished">ÐаÑтройки</translation> + </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation type="unfinished">Закрыть</translation> </message> </context> <context> @@ -1015,7 +1114,7 @@ Example: https://server.my:8787</source> <context> <name>UserSettingsPage</name> <message> - <location filename="../../src/UserSettingsPage.cpp" line="+535"/> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> <source>Minimize to tray</source> <translation>Сворачивать в ÑиÑтемную панель</translation> </message> @@ -1035,7 +1134,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-5"/> + <location line="-63"/> + <source>CALLS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+58"/> <source>Keep the application running in the background after closing the client window.</source> <translation type="unfinished"></translation> </message> @@ -1198,7 +1302,17 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Тема</translation> </message> <message> - <location line="+3"/> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> <source>Device ID</source> <translation>ID уÑтройÑтва</translation> </message> @@ -1208,7 +1322,7 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Отпечаток уÑтройÑтва</translation> </message> <message> - <location line="-113"/> + <location line="-120"/> <source>Session Keys</source> <translation>Ключи ÑеанÑа</translation> </message> @@ -1228,22 +1342,22 @@ This usually causes the application icon in the task bar to animate in some fash <translation>ШИФРОВÐÐИЕ</translation> </message> <message> - <location line="-71"/> + <location line="-78"/> <source>GENERAL</source> <translation>ГЛÐÐ’ÐОЕ</translation> </message> <message> - <location line="+29"/> + <location line="+30"/> <source>INTERFACE</source> <translation type="unfinished"></translation> </message> <message> - <location line="+166"/> + <location line="+172"/> <source>Emoji Font Family</source> <translation type="unfinished"></translation> </message> <message> - <location line="+179"/> + <location line="+191"/> <source>Open Sessions File</source> <translation>Открыть файл ÑеанÑов</translation> </message> @@ -1316,11 +1430,24 @@ This usually causes the application icon in the task bar to animate in some fash <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+147"/> + <location filename="../../src/Utils.cpp" line="+146"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> </context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation type="unfinished">ПринÑть</translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>dialogs::CreateRoom</name> <message> @@ -1444,6 +1571,19 @@ This usually causes the application icon in the task bar to animate in some fash <translation>Выйти из учётной запиÑи. Ð’Ñ‹ уверены?</translation> </message> </context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>dialogs::PreviewUploadOverlay</name> <message> @@ -1643,7 +1783,7 @@ Media size: %2 <context> <name>dialogs::UserProfile</name> <message> - <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> <source>Ban the user from the room</source> <translation>Заблокировать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² комнате</translation> </message> @@ -1663,7 +1803,17 @@ Media size: %2 <translation>Ðачать разговор</translation> </message> <message> - <location line="+61"/> + <location line="+14"/> + <source>Confirm DM</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+54"/> <source>Devices</source> <translation>УÑтройÑтва</translation> </message> @@ -1714,7 +1864,7 @@ Media size: %2 <context> <name>message-description sent:</name> <message> - <location filename="../../src/Utils.h" line="+103"/> + <location filename="../../src/Utils.h" line="+106"/> <source>You sent an audio clip</source> <translation type="unfinished"></translation> </message> @@ -1793,6 +1943,36 @@ Media size: %2 <source>%1 sent an encrypted message</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+5"/> + <source>You placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You ended a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 ended a call</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>popups::UserMentions</name> diff --git a/resources/langs/nheko_si.ts b/resources/langs/nheko_si.ts index 2f405ca2dae2dfba8fd2c1c7a886c4f641f46e95..d490b4d1d92ec4b8794de023e639341e8e80c2d9 100644 --- a/resources/langs/nheko_si.ts +++ b/resources/langs/nheko_si.ts @@ -4,7 +4,7 @@ <context> <name>Cache</name> <message> - <location filename="../../src/Cache.cpp" line="+1341"/> + <location filename="../../src/Cache.cpp" line="+1658"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> @@ -12,33 +12,53 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+226"/> + <location filename="../../src/ChatPage.cpp" line="+218"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+892"/> + <location line="+947"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="-463"/> + <location line="-458"/> <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+428"/> + <location line="+415"/> <source>Room %1 created.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+30"/> + <location line="+26"/> + <source>Confirm invite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to invite %1 to %2: %3</source> <translation type="unfinished"></translation> </message> <message> - <location line="+19"/> + <location line="+15"/> + <source>Confirm kick</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to kick %1 to %2: %3</source> <translation type="unfinished"></translation> </message> @@ -48,7 +68,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm ban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to ban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -58,7 +88,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm unban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to unban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -68,12 +108,12 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-817"/> + <location line="-874"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+296"/> + <location line="+334"/> <source>Cache migration failed!</source> <translation type="unfinished"></translation> </message> @@ -88,28 +128,28 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+111"/> + <location line="+67"/> <source>Failed to restore OLM account. Please login again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Failed to restore save data. Please login again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+148"/> + <location line="+165"/> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+51"/> - <location line="+219"/> + <location line="+99"/> + <location line="+251"/> <source>Please try to login again: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="-154"/> + <location line="-219"/> <source>Failed to join room: %1</source> <translation type="unfinished"></translation> </message> @@ -151,6 +191,12 @@ <source>Low priority rooms</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+2"/> + <source>Server Notices</source> + <comment>Tag translation for m.server_notice</comment> + <translation type="unfinished"></translation> + </message> <message> <location line="+2"/> <location line="+2"/> @@ -166,7 +212,7 @@ <context> <name>EditModal</name> <message> - <location filename="../../src/dialogs/RoomSettings.cpp" line="+60"/> + <location filename="../../src/dialogs/RoomSettings.cpp" line="+72"/> <source>Apply</source> <translation type="unfinished"></translation> </message> @@ -186,6 +232,55 @@ <translation type="unfinished"></translation> </message> </context> +<context> + <name>EmojiPicker</name> + <message> + <location filename="../qml/emoji/EmojiPicker.qml" line="+117"/> + <location line="+139"/> + <source>Search</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-42"/> + <source>People</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Nature</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Food</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Activity</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Travel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Objects</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Symbols</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Flags</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>EncryptionIndicator</name> <message> @@ -199,10 +294,47 @@ <translation type="unfinished"></translation> </message> </context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>InviteeItem</name> <message> - <location filename="../../src/InviteeItem.cpp" line="+17"/> + <location filename="../../src/InviteeItem.cpp" line="+18"/> <source>Remove</source> <translation type="unfinished"></translation> </message> @@ -210,7 +342,7 @@ <context> <name>LoginPage</name> <message> - <location filename="../../src/LoginPage.cpp" line="+89"/> + <location filename="../../src/LoginPage.cpp" line="+90"/> <source>Matrix ID</source> <translation type="unfinished"></translation> </message> @@ -239,7 +371,7 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th </message> <message> <location line="+2"/> - <source>A name for this device, which will be shown to others, when verifying your devices. If none is provided, a random string is used for privacy purposes.</source> + <source>A name for this device, which will be shown to others, when verifying your devices. If none is provided a default is used.</source> <translation type="unfinished"></translation> </message> <message> @@ -250,7 +382,7 @@ Example: https://server.my:8787</source> </message> <message> <location line="+16"/> - <location line="+185"/> + <location line="+191"/> <source>LOGIN</source> <translation type="unfinished"></translation> </message> @@ -312,6 +444,7 @@ Example: https://server.my:8787</source> <name>MessageDelegate</name> <message> <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> <source>redacted</source> <translation type="unfinished"></translation> </message> @@ -345,6 +478,36 @@ Example: https://server.my:8787</source> <source>%1 created and configured room: %2</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>%1 answered the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>%1 ended the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Negotiating call...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Placeholder</name> @@ -365,7 +528,7 @@ Example: https://server.my:8787</source> <context> <name>RegisterPage</name> <message> - <location filename="../../src/RegisterPage.cpp" line="+87"/> + <location filename="../../src/RegisterPage.cpp" line="+88"/> <source>Username</source> <translation type="unfinished"></translation> </message> @@ -433,7 +596,7 @@ Example: https://server.my:8787</source> <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+939"/> + <location filename="../../src/Cache.cpp" line="+1443"/> <source>no version stored</source> <translation type="unfinished"></translation> </message> @@ -451,7 +614,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+7"/> + <location line="+18"/> <source>Favourite</source> <comment>Standard matrix tag for favourites</comment> <translation type="unfinished"></translation> @@ -469,7 +632,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+13"/> + <location line="+12"/> <source>Adds or removes the specified tag.</source> <comment>WhatsThis hint for tag menu actions</comment> <translation type="unfinished"></translation> @@ -481,14 +644,15 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> + <location line="+4"/> <source>New Tag</source> <comment>Tag name prompt title</comment> <translation type="unfinished"></translation> </message> <message> - <location line="+0"/> + <location line="+1"/> <source>Tag:</source> + <comment>Tag name prompt</comment> <translation type="unfinished"></translation> </message> <message> @@ -505,7 +669,7 @@ Example: https://server.my:8787</source> <context> <name>SideBarActions</name> <message> - <location filename="../../src/SideBarActions.cpp" line="+38"/> + <location filename="../../src/SideBarActions.cpp" line="+40"/> <source>User settings</source> <translation type="unfinished"></translation> </message> @@ -556,13 +720,13 @@ Example: https://server.my:8787</source> <context> <name>TextInputWidget</name> <message> - <location filename="../../src/TextInputWidget.cpp" line="+459"/> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> <source>Send a file</source> <translation type="unfinished"></translation> </message> <message> <location line="+13"/> - <location filename="../../src/TextInputWidget.h" line="+145"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> <source>Write a message...</source> <translation type="unfinished"></translation> </message> @@ -577,7 +741,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+84"/> + <location line="+94"/> <source>Select a file</source> <translation type="unfinished"></translation> </message> @@ -587,38 +751,38 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../src/TextInputWidget.h" line="-5"/> - <source>Connection lost. Nheko is trying to re-connect...</source> + <location line="+64"/> + <source>Place a call</source> <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+853"/> - <source>-- Decryption Error (failed to communicate with DB) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment> + <location line="+3"/> + <source>Hang up</source> <translation type="unfinished"></translation> </message> <message> - <location line="+20"/> - <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <location filename="../../src/TextInputWidget.h" line="-5"/> + <source>Connection lost. Nheko is trying to re-connect...</source> <translation type="unfinished"></translation> </message> +</context> +<context> + <name>TimelineModel</name> <message> - <location line="+13"/> - <source>-- Decryption Error (%1) --</source> - <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1.</comment> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> + <source>Message redaction failed: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="+99"/> - <source>Message redaction failed: %1</source> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> <translation type="unfinished"></translation> </message> <message> - <location line="+455"/> + <location line="+195"/> <source>Save image</source> <translation type="unfinished"></translation> </message> @@ -637,20 +801,8 @@ Example: https://server.my:8787</source> <source>Save file</source> <translation type="unfinished"></translation> </message> - <message> - <location line="-610"/> - <source>-- Encrypted Event (No keys found for decryption) --</source> - <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+82"/> - <source>-- Encrypted Event (Unknown event type) --</source> - <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> - <translation type="unfinished"></translation> - </message> <message numerus="yes"> - <location line="+660"/> + <location line="+129"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation type="unfinished"> @@ -704,7 +856,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+48"/> + <location line="+33"/> <source>%1 was invited.</source> <translation type="unfinished"></translation> </message> @@ -723,6 +875,11 @@ Example: https://server.my:8787</source> <source>%1 changed their avatar.</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+2"/> + <source>%1 changed some profile info.</source> + <translation type="unfinished"></translation> + </message> <message> <location line="+4"/> <source>%1 joined.</source> @@ -764,12 +921,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-1238"/> + <location line="-943"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1240"/> + <location line="+945"/> <source>Rejected the knock from %1.</source> <translation type="unfinished"></translation> </message> @@ -793,7 +950,12 @@ Example: https://server.my:8787</source> <context> <name>TimelineRow</name> <message> - <location filename="../qml/TimelineRow.qml" line="+92"/> + <location filename="../qml/TimelineRow.qml" line="+94"/> + <source>React</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+16"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -806,7 +968,12 @@ Example: https://server.my:8787</source> <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+54"/> + <location filename="../qml/TimelineView.qml" line="+61"/> + <source>React</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -841,48 +1008,51 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+12"/> <source>No room open</source> <translation type="unfinished"></translation> </message> <message> - <location line="+257"/> - <source>Close</source> + <location line="+53"/> + <source>Back to room list</source> <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TopRoomBar</name> <message> - <location filename="../../src/TopRoomBar.cpp" line="+86"/> - <source>Room options</source> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Mentions</source> + <location line="+28"/> + <source>Room options</source> <translation type="unfinished"></translation> </message> <message> - <location line="+34"/> + <location line="+7"/> <source>Invite users</source> <translation type="unfinished"></translation> </message> <message> - <location line="+6"/> + <location line="+4"/> <source>Members</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Leave room</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Settings</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>TrayIcon</name> @@ -900,78 +1070,221 @@ Example: https://server.my:8787</source> <context> <name>UserInfoWidget</name> <message> - <location filename="../../src/UserInfoWidget.cpp" line="+88"/> + <location filename="../../src/UserInfoWidget.cpp" line="+95"/> <source>Logout</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+20"/> + <source>Set custom status message</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Custom status message</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Status:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+9"/> + <source>Set presence automatically</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Online</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Unavailable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Offline</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>UserSettingsPage</name> <message> - <location filename="../../src/UserSettingsPage.cpp" line="+339"/> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> <source>Minimize to tray</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> + <location line="+3"/> <source>Start in tray</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> + <location line="+7"/> <source>Group's sidebar</source> <translation type="unfinished"></translation> </message> <message> - <location line="-1"/> + <location line="-3"/> <source>Circular Avatars</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> - <source>Decrypt messages in sidebar</source> + <location line="-63"/> + <source>CALLS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+58"/> + <source>Keep the application running in the background after closing the client window.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Start the application in the background without showing the client window.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Change the appearance of user avatars in chats. +OFF - square, ON - Circle.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Show a column containing groups and tags next to the room list.</source> <translation type="unfinished"></translation> </message> <message> <location line="+1"/> + <source>Decrypt messages in sidebar</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Decrypt the messages shown in the sidebar. +Only affects messages in encrypted chats.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> <source>Show buttons in timeline</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> + <location line="+2"/> + <source>Show buttons to quickly reply, react or access additional options next to each message.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Limit width of timeline</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Set the max width of messages in the timeline (in pixels). This can help readability on wide screen, when Nheko is maximised</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> <source>Typing notifications</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> + <location line="+2"/> + <source>Show who is typing in a room. +This will also enable or disable sending typing notifications to others.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> <source>Sort rooms by unreads</source> <translation type="unfinished"></translation> </message> <message> <location line="+2"/> + <source>Display rooms with new messages first. +If this is off, the list of rooms will only be sorted by the timestamp of the last message in a room. +If this is on, rooms which have active notifications (the small circle with a number in it) will be sorted on top. Rooms, that you have muted, will still be sorted by timestamp, since you don't seem to consider them as important as the other rooms.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> <source>Read receipts</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> + <location line="+2"/> + <source>Show if your message was read. +Status is displayed next to timestamps.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> <source>Send messages as Markdown</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1"/> + <location line="+2"/> + <source>Allow using markdown in messages. +When disabled, all messages are sent as a plain text.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> <source>Desktop notifications</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+2"/> + <source>Notify about received message when the client is not currently focused.</source> + <translation type="unfinished"></translation> + </message> <message> <location line="+1"/> + <source>Alert on notification</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Show an alert when a message is received. +This usually causes the application icon in the task bar to animate in some fashion.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> <source>Highlight message on hover</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+2"/> + <source>Change the background color of messages when you hover over them.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Large Emoji in timeline</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Make font size larger if messages with only a few emojis are displayed.</source> + <translation type="unfinished"></translation> + </message> <message> <location line="+5"/> <source>Scale factor</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+2"/> + <source>Change the scale factor of the whole user interface.</source> + <translation type="unfinished"></translation> + </message> <message> <location line="+4"/> <source>Font size</source> @@ -988,7 +1301,17 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+3"/> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> <source>Device ID</source> <translation type="unfinished"></translation> </message> @@ -998,7 +1321,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-60"/> + <location line="-120"/> <source>Session Keys</source> <translation type="unfinished"></translation> </message> @@ -1018,22 +1341,22 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-64"/> + <location line="-78"/> <source>GENERAL</source> <translation type="unfinished"></translation> </message> <message> - <location line="+26"/> + <location line="+30"/> <source>INTERFACE</source> <translation type="unfinished"></translation> </message> <message> - <location line="+109"/> + <location line="+172"/> <source>Emoji Font Family</source> <translation type="unfinished"></translation> </message> <message> - <location line="+163"/> + <location line="+191"/> <source>Open Sessions File</source> <translation type="unfinished"></translation> </message> @@ -1105,11 +1428,24 @@ Example: https://server.my:8787</source> <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+141"/> + <location filename="../../src/Utils.cpp" line="+146"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> </context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>dialogs::CreateRoom</name> <message> @@ -1179,7 +1515,7 @@ Example: https://server.my:8787</source> <context> <name>dialogs::InviteUsers</name> <message> - <location filename="../../src/dialogs/InviteUsers.cpp" line="+41"/> + <location filename="../../src/dialogs/InviteUsers.cpp" line="+42"/> <source>Cancel</source> <translation type="unfinished"></translation> </message> @@ -1233,6 +1569,19 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> </context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>dialogs::PreviewUploadOverlay</name> <message> @@ -1274,7 +1623,7 @@ Media size: %2 <context> <name>dialogs::ReadReceipts</name> <message> - <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/> + <location filename="../../src/dialogs/ReadReceipts.cpp" line="+120"/> <source>Read receipts</source> <translation type="unfinished"></translation> </message> @@ -1287,12 +1636,12 @@ Media size: %2 <context> <name>dialogs::ReceiptItem</name> <message> - <location line="-44"/> + <location line="-46"/> <source>Today %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="+2"/> + <location line="+3"/> <source>Yesterday %1</source> <translation type="unfinished"></translation> </message> @@ -1300,7 +1649,7 @@ Media size: %2 <context> <name>dialogs::RoomSettings</name> <message> - <location filename="../../src/dialogs/RoomSettings.cpp" line="+113"/> + <location filename="../../src/dialogs/RoomSettings.cpp" line="+135"/> <source>Settings</source> <translation type="unfinished"></translation> </message> @@ -1429,7 +1778,7 @@ Media size: %2 <context> <name>dialogs::UserProfile</name> <message> - <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> <source>Ban the user from the room</source> <translation type="unfinished"></translation> </message> @@ -1449,7 +1798,17 @@ Media size: %2 <translation type="unfinished"></translation> </message> <message> - <location line="+61"/> + <location line="+14"/> + <source>Confirm DM</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+54"/> <source>Devices</source> <translation type="unfinished"></translation> </message> @@ -1500,7 +1859,7 @@ Media size: %2 <context> <name>message-description sent:</name> <message> - <location filename="../../src/Utils.h" line="+100"/> + <location filename="../../src/Utils.h" line="+106"/> <source>You sent an audio clip</source> <translation type="unfinished"></translation> </message> @@ -1579,6 +1938,36 @@ Media size: %2 <source>%1 sent an encrypted message</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+5"/> + <source>You placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You ended a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 ended a call</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>popups::UserMentions</name> diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts index 545e098b1d4a41e016111fce553111f4d1a18252..e4927ff605c92db04d71d7da80a8013dfb104964 100644 --- a/resources/langs/nheko_zh_CN.ts +++ b/resources/langs/nheko_zh_CN.ts @@ -4,7 +4,7 @@ <context> <name>Cache</name> <message> - <location filename="../../src/Cache.cpp" line="+1359"/> + <location filename="../../src/Cache.cpp" line="+1658"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> @@ -12,33 +12,53 @@ <context> <name>ChatPage</name> <message> - <location filename="../../src/ChatPage.cpp" line="+229"/> + <location filename="../../src/ChatPage.cpp" line="+218"/> <source>Failed to invite user: %1</source> <translation type="unfinished"></translation> </message> <message> <location line="+4"/> - <location line="+926"/> + <location line="+947"/> <source>Invited user: %1</source> <translation type="unfinished"></translation> </message> <message> - <location line="-474"/> + <location line="-458"/> <source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+439"/> + <location line="+415"/> <source>Room %1 created.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+30"/> + <location line="+26"/> + <source>Confirm invite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to invite %1 to %2: %3</source> <translation type="unfinished"></translation> </message> <message> - <location line="+19"/> + <location line="+15"/> + <source>Confirm kick</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to kick %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to kick %1 to %2: %3</source> <translation type="unfinished"></translation> </message> @@ -48,7 +68,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm ban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to ban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to ban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -58,7 +88,17 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+10"/> + <source>Confirm unban</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to unban %1 (%2)?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+11"/> <source>Failed to unban %1 in %2: %3</source> <translation type="unfinished"></translation> </message> @@ -68,12 +108,12 @@ <translation type="unfinished"></translation> </message> <message> - <location line="-828"/> + <location line="-874"/> <source>Failed to upload media. Please try again.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+296"/> + <location line="+334"/> <source>Cache migration failed!</source> <translation type="unfinished"></translation> </message> @@ -88,28 +128,28 @@ <translation type="unfinished"></translation> </message> <message> - <location line="+111"/> + <location line="+67"/> <source>Failed to restore OLM account. Please login again.</source> <translation>æ¢å¤ OLM è´¦æˆ·å¤±è´¥ã€‚è¯·é‡æ–°ç™»å½•。</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Failed to restore save data. Please login again.</source> <translation>æ¢å¤ä¿å˜çš„æ•°æ®å¤±è´¥ã€‚è¯·é‡æ–°ç™»å½•。</translation> </message> <message> - <location line="+156"/> + <location line="+165"/> <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+54"/> - <location line="+252"/> + <location line="+99"/> + <location line="+251"/> <source>Please try to login again: %1</source> <translation>请å°è¯•冿¬¡ç™»å½•:%1</translation> </message> <message> - <location line="-187"/> + <location line="-219"/> <source>Failed to join room: %1</source> <translation type="unfinished"></translation> </message> @@ -254,6 +294,43 @@ <translation type="unfinished"></translation> </message> </context> +<context> + <name>EventStore</name> + <message> + <location filename="../../src/timeline/EventStore.cpp" line="+418"/> + <source>-- Encrypted Event (No keys found for decryption) --</source> + <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+19"/> + <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> + <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+14"/> + <source>-- Decryption Error (%1) --</source> + <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed as %1.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+10"/> + <source>-- Encrypted Event (Unknown event type) --</source> + <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+13"/> + <source>-- Replay attack! This message index was reused! --</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>-- Message by unverified device! --</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>InviteeItem</name> <message> @@ -367,6 +444,7 @@ Example: https://server.my:8787</source> <name>MessageDelegate</name> <message> <location filename="../qml/delegates/MessageDelegate.qml" line="+66"/> + <location line="+6"/> <source>redacted</source> <translation type="unfinished"></translation> </message> @@ -400,6 +478,36 @@ Example: https://server.my:8787</source> <source>%1 created and configured room: %2</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+7"/> + <source>%1 placed a voice call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a video call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>%1 placed a call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>%1 answered the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>%1 ended the call.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Negotiating call...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Placeholder</name> @@ -488,7 +596,7 @@ Example: https://server.my:8787</source> <context> <name>RoomInfo</name> <message> - <location filename="../../src/Cache.cpp" line="+984"/> + <location filename="../../src/Cache.cpp" line="+1443"/> <source>no version stored</source> <translation type="unfinished"></translation> </message> @@ -612,13 +720,13 @@ Example: https://server.my:8787</source> <context> <name>TextInputWidget</name> <message> - <location filename="../../src/TextInputWidget.cpp" line="+460"/> + <location filename="../../src/TextInputWidget.cpp" line="+574"/> <source>Send a file</source> <translation>å‘é€ä¸€ä¸ªæ–‡ä»¶</translation> </message> <message> <location line="+13"/> - <location filename="../../src/TextInputWidget.h" line="+145"/> + <location filename="../../src/TextInputWidget.h" line="+160"/> <source>Write a message...</source> <translation>å†™ä¸€æ¡æ¶ˆæ¯...</translation> </message> @@ -633,7 +741,7 @@ Example: https://server.my:8787</source> <translation></translation> </message> <message> - <location line="+86"/> + <location line="+94"/> <source>Select a file</source> <translation>选择一个文件</translation> </message> @@ -642,6 +750,16 @@ Example: https://server.my:8787</source> <source>All Files (*)</source> <translation>所有文件(*)</translation> </message> + <message> + <location line="+64"/> + <source>Place a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Hang up</source> + <translation type="unfinished"></translation> + </message> <message> <location filename="../../src/TextInputWidget.h" line="-5"/> <source>Connection lost. Nheko is trying to re-connect...</source> @@ -651,30 +769,20 @@ Example: https://server.my:8787</source> <context> <name>TimelineModel</name> <message> - <location filename="../../src/timeline/TimelineModel.cpp" line="+891"/> - <source>-- Decryption Error (failed to communicate with DB) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed when trying to lookup the session.</comment> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+20"/> - <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source> - <comment>Placeholder, when the message can't be decrypted, because the DB access failed.</comment> - <translation type="unfinished"></translation> + <location filename="../../src/timeline/TimelineModel.cpp" line="+805"/> + <source>Message redaction failed: %1</source> + <translation type="unfinished">åˆ é™¤æ¶ˆæ¯å¤±è´¥ï¼š%1</translation> </message> <message> - <location line="+13"/> - <source>-- Decryption Error (%1) --</source> - <comment>Placeholder, when the message can't be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1.</comment> + <location line="+114"/> + <location line="+17"/> + <location line="+101"/> + <location line="+5"/> + <source>Failed to encrypt event, sending aborted!</source> <translation type="unfinished"></translation> </message> <message> - <location line="+99"/> - <source>Message redaction failed: %1</source> - <translation type="unfinished">åˆ é™¤æ¶ˆæ¯å¤±è´¥ï¼š%1</translation> - </message> - <message> - <location line="+488"/> + <location line="+195"/> <source>Save image</source> <translation type="unfinished">ä¿å˜å›¾åƒ</translation> </message> @@ -693,20 +801,8 @@ Example: https://server.my:8787</source> <source>Save file</source> <translation type="unfinished"></translation> </message> - <message> - <location line="-643"/> - <source>-- Encrypted Event (No keys found for decryption) --</source> - <comment>Placeholder, when the message was not decrypted yet or can't be decrypted.</comment> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+82"/> - <source>-- Encrypted Event (Unknown event type) --</source> - <comment>Placeholder, when the message was decrypted, but we couldn't parse it, because Nheko/mtxclient don't support that event type yet.</comment> - <translation type="unfinished"></translation> - </message> <message numerus="yes"> - <location line="+693"/> + <location line="+129"/> <source>%1 and %2 are typing.</source> <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment> <translation type="unfinished"> @@ -759,7 +855,7 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+48"/> + <location line="+33"/> <source>%1 was invited.</source> <translation type="unfinished"></translation> </message> @@ -824,12 +920,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-1281"/> + <location line="-943"/> <source>You joined this room.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+1283"/> + <location line="+945"/> <source>Rejected the knock from %1.</source> <translation type="unfinished"></translation> </message> @@ -853,12 +949,12 @@ Example: https://server.my:8787</source> <context> <name>TimelineRow</name> <message> - <location filename="../qml/TimelineRow.qml" line="+91"/> + <location filename="../qml/TimelineRow.qml" line="+94"/> <source>React</source> <translation type="unfinished"></translation> </message> <message> - <location line="+17"/> + <location line="+16"/> <source>Reply</source> <translation type="unfinished"></translation> </message> @@ -871,7 +967,7 @@ Example: https://server.my:8787</source> <context> <name>TimelineView</name> <message> - <location filename="../qml/TimelineView.qml" line="+54"/> + <location filename="../qml/TimelineView.qml" line="+61"/> <source>React</source> <translation type="unfinished"></translation> </message> @@ -911,47 +1007,50 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location line="+12"/> <source>No room open</source> <translation type="unfinished"></translation> </message> <message> - <location line="+271"/> - <source>Close</source> + <location line="+53"/> + <source>Back to room list</source> <translation type="unfinished"></translation> </message> -</context> -<context> - <name>TopRoomBar</name> <message> - <location filename="../../src/TopRoomBar.cpp" line="+86"/> - <source>Room options</source> - <translation>èŠå¤©å®¤é€‰é¡¹</translation> + <location line="+15"/> + <location line="+15"/> + <source>No room selected</source> + <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> - <source>Mentions</source> - <translation type="unfinished"></translation> + <location line="+28"/> + <source>Room options</source> + <translation type="unfinished">èŠå¤©å®¤é€‰é¡¹</translation> </message> <message> - <location line="+34"/> + <location line="+7"/> <source>Invite users</source> - <translation>邀请用户</translation> + <translation type="unfinished">邀请用户</translation> </message> <message> - <location line="+6"/> + <location line="+4"/> <source>Members</source> - <translation>æˆå‘˜</translation> + <translation type="unfinished">æˆå‘˜</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Leave room</source> - <translation>离开èŠå¤©å®¤</translation> + <translation type="unfinished">离开èŠå¤©å®¤</translation> </message> <message> - <location line="+5"/> + <location line="+4"/> <source>Settings</source> - <translation>设置</translation> + <translation type="unfinished">设置</translation> + </message> + <message> + <location line="+253"/> + <source>Close</source> + <translation type="unfinished"></translation> </message> </context> <context> @@ -1013,7 +1112,7 @@ Example: https://server.my:8787</source> <context> <name>UserSettingsPage</name> <message> - <location filename="../../src/UserSettingsPage.cpp" line="+535"/> + <location filename="../../src/UserSettingsPage.cpp" line="+566"/> <source>Minimize to tray</source> <translation>最å°åŒ–至托盘</translation> </message> @@ -1033,7 +1132,12 @@ Example: https://server.my:8787</source> <translation type="unfinished"></translation> </message> <message> - <location line="-5"/> + <location line="-63"/> + <source>CALLS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+58"/> <source>Keep the application running in the background after closing the client window.</source> <translation type="unfinished"></translation> </message> @@ -1196,7 +1300,17 @@ This usually causes the application icon in the task bar to animate in some fash <translation>主题</translation> </message> <message> - <location line="+3"/> + <location line="+4"/> + <source>Allow fallback call assist server</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Will use turn.matrix.org as assist when your home server does not offer one.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> <source>Device ID</source> <translation>设备 ID</translation> </message> @@ -1206,7 +1320,7 @@ This usually causes the application icon in the task bar to animate in some fash <translation>设备指纹</translation> </message> <message> - <location line="-113"/> + <location line="-120"/> <source>Session Keys</source> <translation>会è¯å¯†é’¥</translation> </message> @@ -1226,22 +1340,22 @@ This usually causes the application icon in the task bar to animate in some fash <translation>åŠ å¯†</translation> </message> <message> - <location line="-71"/> + <location line="-78"/> <source>GENERAL</source> <translation>通用</translation> </message> <message> - <location line="+29"/> + <location line="+30"/> <source>INTERFACE</source> <translation type="unfinished"></translation> </message> <message> - <location line="+166"/> + <location line="+172"/> <source>Emoji Font Family</source> <translation type="unfinished"></translation> </message> <message> - <location line="+179"/> + <location line="+191"/> <source>Open Sessions File</source> <translation>æ‰“å¼€ä¼šè¯æ–‡ä»¶</translation> </message> @@ -1313,11 +1427,24 @@ This usually causes the application icon in the task bar to animate in some fash <context> <name>descriptiveTime</name> <message> - <location filename="../../src/Utils.cpp" line="+147"/> + <location filename="../../src/Utils.cpp" line="+146"/> <source>Yesterday</source> <translation type="unfinished"></translation> </message> </context> +<context> + <name>dialogs::AcceptCall</name> + <message> + <location filename="../../src/dialogs/AcceptCall.cpp" line="+89"/> + <source>Accept</source> + <translation type="unfinished">接å—</translation> + </message> + <message> + <location line="+5"/> + <source>Reject</source> + <translation type="unfinished"></translation> + </message> +</context> <context> <name>dialogs::CreateRoom</name> <message> @@ -1441,6 +1568,19 @@ This usually causes the application icon in the task bar to animate in some fash <translation>登出。确定å—?</translation> </message> </context> +<context> + <name>dialogs::PlaceCall</name> + <message> + <location filename="../../src/dialogs/PlaceCall.cpp" line="+60"/> + <source>Voice</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>Cancel</source> + <translation type="unfinished">å–æ¶ˆ</translation> + </message> +</context> <context> <name>dialogs::PreviewUploadOverlay</name> <message> @@ -1640,7 +1780,7 @@ Media size: %2 <context> <name>dialogs::UserProfile</name> <message> - <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/> + <location filename="../../src/dialogs/UserProfile.cpp" line="+64"/> <source>Ban the user from the room</source> <translation>在这个èŠå¤©å®¤å°ç¦è¿™ä¸ªç”¨æˆ·</translation> </message> @@ -1660,7 +1800,17 @@ Media size: %2 <translation>开始一个èŠå¤©</translation> </message> <message> - <location line="+61"/> + <location line="+14"/> + <source>Confirm DM</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Do you really want to invite %1 (%2) to a direct chat?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+54"/> <source>Devices</source> <translation>设备</translation> </message> @@ -1719,7 +1869,7 @@ Media size: %2 <context> <name>message-description sent:</name> <message> - <location filename="../../src/Utils.h" line="+103"/> + <location filename="../../src/Utils.h" line="+106"/> <source>You sent an audio clip</source> <translation type="unfinished"></translation> </message> @@ -1798,6 +1948,36 @@ Media size: %2 <source>%1 sent an encrypted message</source> <translation type="unfinished"></translation> </message> + <message> + <location line="+5"/> + <source>You placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 placed a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 answered a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>You ended a call</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>%1 ended a call</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>popups::UserMentions</name> diff --git a/resources/qml/Avatar.qml b/resources/qml/Avatar.qml index e687e17053155ec46546b074a3319c332f2d76d4..67c3e008f2b1a75ed76c61a80b5224bff0d2d4d8 100644 --- a/resources/qml/Avatar.qml +++ b/resources/qml/Avatar.qml @@ -16,7 +16,7 @@ Rectangle { Label { anchors.fill: parent - text: chat.model.escapeEmoji(String.fromCodePoint(displayName.codePointAt(0))) + text: TimelineManager.escapeEmoji(String.fromCodePoint(displayName.codePointAt(0))) textFormat: Text.RichText font.pixelSize: avatar.height/2 verticalAlignment: Text.AlignVCenter @@ -52,6 +52,8 @@ Rectangle { anchors.bottom: avatar.bottom anchors.right: avatar.right + visible: !!userid + height: avatar.height / 6 width: height radius: Settings.avatarCircles ? height / 2 : height / 4 diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index 30158e3afcbcb130a3d31349c4185b47d51404fe..e65622114210fd5dc5063c6462a4a218bcbb8885 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -147,6 +147,130 @@ Page { z: 3 } + ColumnLayout { + anchors.fill: parent + Rectangle { + id: topBar + + Layout.fillWidth: true + implicitHeight: topLayout.height + 16 + z: 3 + + color: colors.base + + MouseArea { + anchors.fill: parent + onClicked: TimelineManager.openRoomSettings(); + } + + GridLayout { + id: topLayout + + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: 8 + anchors.verticalCenter: parent.verticalCenter + + //Layout.margins: 8 + + ImageButton { + id: backToRoomsButton + + Layout.column: 0 + Layout.row: 0 + Layout.rowSpan: 2 + Layout.alignment: Qt.AlignVCenter + + visible: TimelineManager.isNarrowView + + image: ":/icons/icons/ui/angle-pointing-to-left.png" + + ToolTip.visible: hovered + ToolTip.text: qsTr("Back to room list") + + onClicked: TimelineManager.backToRooms() + } + + Avatar { + Layout.column: 1 + Layout.row: 0 + Layout.rowSpan: 2 + Layout.alignment: Qt.AlignVCenter + + width: avatarSize + height: avatarSize + + url: chat.model ? chat.model.roomAvatarUrl.replace("mxc://", "image://MxcImage/") : "" + displayName: chat.model ? chat.model.roomName : qsTr("No room selected") + + MouseArea { + anchors.fill: parent + onClicked: TimelineManager.openRoomSettings(); + } + } + + Label { + Layout.fillWidth: true + Layout.column: 2 + Layout.row: 0 + + font.pointSize: fontMetrics.font.pointSize * 1.1 + + text: chat.model ? chat.model.roomName : qsTr("No room selected") + + MouseArea { + anchors.fill: parent + onClicked: TimelineManager.openRoomSettings(); + } + } + MatrixText { + Layout.fillWidth: true + Layout.column: 2 + Layout.row: 1 + Layout.maximumHeight: fontMetrics.lineSpacing * 2 // show 2 lines + clip: true + + text: chat.model ? chat.model.roomTopic : "" + } + + ImageButton { + id: roomOptionsButton + + Layout.column: 3 + Layout.row: 0 + Layout.rowSpan: 2 + Layout.alignment: Qt.AlignVCenter + + image: ":/icons/icons/ui/vertical-ellipsis.png" + + ToolTip.visible: hovered + ToolTip.text: qsTr("Room options") + + onClicked: roomOptionsMenu.popup(roomOptionsButton) + + Menu { + id: roomOptionsMenu + MenuItem { + text: qsTr("Invite users") + onTriggered: TimelineManager.openInviteUsersDialog(); + } + MenuItem { + text: qsTr("Members") + onTriggered: TimelineManager.openMemberListDialog(); + } + MenuItem { + text: qsTr("Leave room") + onTriggered: TimelineManager.openLeaveRoomDialog(); + } + MenuItem { + text: qsTr("Settings") + onTriggered: TimelineManager.openRoomSettings(); + } + } + } + } + } + ListView { id: chat @@ -154,13 +278,8 @@ Page { cacheBuffer: 400 - anchors.horizontalCenter: parent.horizontalCenter - anchors.top: parent.top - anchors.bottom: chatFooter.top - width: parent.width - - anchors.leftMargin: 4 - anchors.rightMargin: scrollbar.width + Layout.fillWidth: true + Layout.fillHeight: true model: TimelineManager.timeline @@ -199,10 +318,6 @@ Page { ScrollBar.vertical: ScrollBar { id: scrollbar - parent: chat.parent - anchors.top: chat.top - anchors.right: chat.right - anchors.bottom: chat.bottom } spacing: 4 @@ -210,9 +325,9 @@ Page { onCountChanged: if (atYEnd) model.currentIndex = 0 // Mark last event as read, since we are at the bottom - property int delegateMaxWidth: (Settings.timelineMaxWidth > 100 && (parent.width - Settings.timelineMaxWidth) > 32) ? Settings.timelineMaxWidth : (parent.width - 32) + property int delegateMaxWidth: (Settings.timelineMaxWidth > 100 && (parent.width - Settings.timelineMaxWidth) > scrollbar.width*2) ? Settings.timelineMaxWidth : (parent.width - scrollbar.width*2) - delegate: Rectangle { + delegate: Item { // This would normally be previousSection, but our model's order is inverted. property bool sectionBoundary: (ListView.nextSection != "" && ListView.nextSection !== ListView.section) || model.index === chat.count - 1 @@ -221,7 +336,6 @@ Page { anchors.horizontalCenter: parent ? parent.horizontalCenter : undefined width: chat.delegateMaxWidth height: section ? section.height + timelinerow.height : timelinerow.height - color: "transparent" TimelineRow { id: timelinerow @@ -314,7 +428,7 @@ Page { Label { id: userName - text: chat.model.escapeEmoji(modelData.userName) + text: TimelineManager.escapeEmoji(modelData.userName) color: TimelineManager.userColor(modelData.userId, colors.window) textFormat: Text.RichText @@ -339,33 +453,35 @@ Page { } } - Rectangle { + Item { id: chatFooter - height: Math.max(fontMetrics.height * 1.2, footerContent.height) - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom + implicitHeight: Math.max(fontMetrics.height * 1.2, footerContent.height) + Layout.fillWidth: true z: 3 - color: "transparent" - Column { id: footerContent anchors.left: parent.left anchors.right: parent.right - - Label { - id: typingDisplay - anchors.left: parent.left - anchors.right: parent.right - anchors.leftMargin: 10 - anchors.rightMargin: 10 - - color: colors.text - text: chat.model ? chat.model.formatTypingUsers(chat.model.typingUsers, colors.window) : "" - textFormat: Text.RichText - } + anchors.bottom: parent.bottom + Rectangle { + id: typingRect + anchors.left: parent.left + anchors.right: parent.right + color: (chat.model && chat.model.typingUsers.length > 0) ? colors.window : "transparent" + height: typingDisplay.height + Label { + id: typingDisplay + anchors.left: parent.left + anchors.leftMargin: 10 + anchors.right: parent.right + anchors.rightMargin: 10 + color: colors.text + text: chat.model ? chat.model.formatTypingUsers(chat.model.typingUsers, colors.window) : "" + textFormat: Text.RichText + } + } Rectangle { anchors.left: parent.left @@ -412,4 +528,5 @@ Page { } } } + } } diff --git a/resources/qml/delegates/FileMessage.qml b/resources/qml/delegates/FileMessage.qml index 158daf453f79b45e0b74c22cc63b6299e07c3e64..7a2588f364858c12b135a63c5637fe03173147df 100644 --- a/resources/qml/delegates/FileMessage.qml +++ b/resources/qml/delegates/FileMessage.qml @@ -41,7 +41,7 @@ Item { Text { id: filename Layout.fillWidth: true - text: model.data.body + text: model.data.filename textFormat: Text.PlainText elide: Text.ElideRight color: colors.text diff --git a/resources/qml/delegates/MessageDelegate.qml b/resources/qml/delegates/MessageDelegate.qml index ff025730778aff7dabc683d8b4af235f1f14c211..a5cb2ae7f8b56c664aa5b0075540378fed47bd75 100644 --- a/resources/qml/delegates/MessageDelegate.qml +++ b/resources/qml/delegates/MessageDelegate.qml @@ -36,7 +36,7 @@ Item { DelegateChoice { roleValue: MtxEvent.EmoteMessage NoticeMessage { - formatted: chat.model.escapeEmoji(modelData.userName) + " " + model.data.formattedBody + formatted: TimelineManager.escapeEmoji(modelData.userName) + " " + model.data.formattedBody color: TimelineManager.userColor(modelData.userId, colors.window) } } @@ -99,7 +99,11 @@ Item { DelegateChoice { roleValue: MtxEvent.CallInvite NoticeMessage { - text: qsTr("%1 placed a %2 call.").arg(model.data.userName).arg(model.data.callType) + text: switch(model.data.callType) { + case "voice": return qsTr("%1 placed a voice call.").arg(model.data.userName) + case "video": return qsTr("%1 placed a video call.").arg(model.data.userName) + default: return qsTr("%1 placed a call.").arg(model.data.userName) + } } } DelegateChoice { diff --git a/resources/qml/delegates/Reply.qml b/resources/qml/delegates/Reply.qml index d4fffb06def17627778a6003659abc1fcafd31bd..43fc28147dd6949cda17a33def0dd39eee8b3456 100644 --- a/resources/qml/delegates/Reply.qml +++ b/resources/qml/delegates/Reply.qml @@ -39,7 +39,7 @@ Item { Text { id: userName - text: chat.model ? chat.model.escapeEmoji(reply.modelData.userName) : "" + text: TimelineManager.escapeEmoji(reply.modelData.userName) color: replyComponent.userColor textFormat: Text.RichText diff --git a/src/AvatarProvider.cpp b/src/AvatarProvider.cpp index 603bb71abafaae6bf979eca3672b2abb541153ed..b1751c33d1a05a636283a988bbc1b85aad9ef512 100644 --- a/src/AvatarProvider.cpp +++ b/src/AvatarProvider.cpp @@ -34,10 +34,12 @@ resolve(const QString &avatarUrl, int size, QObject *receiver, AvatarCallback ca { const auto cacheKey = QString("%1_size_%2").arg(avatarUrl).arg(size); - if (avatarUrl.isEmpty()) + QPixmap pixmap; + if (avatarUrl.isEmpty()) { + callback(pixmap); return; + } - QPixmap pixmap; if (avatar_cache.find(cacheKey, &pixmap)) { callback(pixmap); return; @@ -75,11 +77,10 @@ resolve(const QString &avatarUrl, int size, QObject *receiver, AvatarCallback ca opts.mxc_url, mtx::errors::to_string(err->matrix_error.errcode), err->matrix_error.error); - return; + } else { + cache::saveImage(cacheKey.toStdString(), res); } - cache::saveImage(cacheKey.toStdString(), res); - emit proxy->avatarDownloaded(QByteArray(res.data(), res.size())); }); } diff --git a/src/Cache.cpp b/src/Cache.cpp index 07d01819aff7152ef3d5394c6facd45d97a05fcd..667506c5c85d524530ed87ce6d7bc6e1b6d7c053 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -96,8 +96,10 @@ namespace { std::unique_ptr<Cache> instance_ = nullptr; } -static bool -isHiddenEvent(mtx::events::collections::TimelineEvents e, const std::string &room_id) +bool +Cache::isHiddenEvent(lmdb::txn &txn, + mtx::events::collections::TimelineEvents e, + const std::string &room_id) { using namespace mtx::events; if (auto encryptedEvent = std::get_if<EncryptedEvent<msg::Encrypted>>(&e)) { @@ -111,13 +113,27 @@ isHiddenEvent(mtx::events::collections::TimelineEvents e, const std::string &roo e = result.event.value(); } - static constexpr std::initializer_list<EventType> hiddenEvents = { + mtx::events::account_data::nheko_extensions::HiddenEvents hiddenEvents; + hiddenEvents.hidden_event_types = { EventType::Reaction, EventType::CallCandidates, EventType::Unsupported}; + if (auto temp = getAccountData(txn, mtx::events::EventType::NhekoHiddenEvents, "")) + hiddenEvents = std::move( + std::get< + mtx::events::Event<mtx::events::account_data::nheko_extensions::HiddenEvents>>( + *temp) + .content); + if (auto temp = getAccountData(txn, mtx::events::EventType::NhekoHiddenEvents, room_id)) + hiddenEvents = std::move( + std::get< + mtx::events::Event<mtx::events::account_data::nheko_extensions::HiddenEvents>>( + *temp) + .content); + return std::visit( - [](const auto &ev) { - return std::any_of(hiddenEvents.begin(), - hiddenEvents.end(), + [hiddenEvents](const auto &ev) { + return std::any_of(hiddenEvents.hidden_event_types.begin(), + hiddenEvents.hidden_event_types.end(), [ev](EventType type) { return type == ev.type; }); }, e); @@ -646,6 +662,7 @@ Cache::removeRoom(lmdb::txn &txn, const std::string &roomid) { lmdb::dbi_del(txn, roomsDb_, lmdb::val(roomid), nullptr); lmdb::dbi_drop(txn, getStatesDb(txn, roomid), true); + lmdb::dbi_drop(txn, getAccountDataDb(txn, roomid), true); lmdb::dbi_drop(txn, getMembersDb(txn, roomid), true); } @@ -1004,6 +1021,19 @@ Cache::saveState(const mtx::responses::Sync &res) setNextBatchToken(txn, res.next_batch); + if (!res.account_data.events.empty()) { + auto accountDataDb = getAccountDataDb(txn, ""); + for (const auto &ev : res.account_data.events) + std::visit( + [&txn, &accountDataDb](const auto &event) { + lmdb::dbi_put(txn, + accountDataDb, + lmdb::val(to_string(event.type)), + lmdb::val(json(event).dump())); + }, + ev); + } + // Save joined rooms for (const auto &room : res.rooms.join) { auto statesdb = getStatesDb(txn, room.first); @@ -1023,30 +1053,43 @@ Cache::saveState(const mtx::responses::Sync &res) updatedInfo.version = getRoomVersion(txn, statesdb).toStdString(); // Process the account_data associated with this room - bool has_new_tags = false; - for (const auto &evt : room.second.account_data.events) { - // for now only fetch tag events - if (std::holds_alternative<Event<account_data::Tags>>(evt)) { - auto tags_evt = std::get<Event<account_data::Tags>>(evt); - has_new_tags = true; - for (const auto &tag : tags_evt.content.tags) { - updatedInfo.tags.push_back(tag.first); + if (!room.second.account_data.events.empty()) { + auto accountDataDb = getAccountDataDb(txn, room.first); + + bool has_new_tags = false; + for (const auto &evt : room.second.account_data.events) { + std::visit( + [&txn, &accountDataDb](const auto &event) { + lmdb::dbi_put(txn, + accountDataDb, + lmdb::val(to_string(event.type)), + lmdb::val(json(event).dump())); + }, + evt); + + // for tag events + if (std::holds_alternative<Event<account_data::Tags>>(evt)) { + auto tags_evt = std::get<Event<account_data::Tags>>(evt); + has_new_tags = true; + for (const auto &tag : tags_evt.content.tags) { + updatedInfo.tags.push_back(tag.first); + } } } - } - if (!has_new_tags) { - // retrieve the old tags, they haven't changed - lmdb::val data; - if (lmdb::dbi_get(txn, roomsDb_, lmdb::val(room.first), data)) { - try { - RoomInfo tmp = - json::parse(std::string_view(data.data(), data.size())); - updatedInfo.tags = tmp.tags; - } catch (const json::exception &e) { - nhlog::db()->warn( - "failed to parse room info: room_id ({}), {}", - room.first, - std::string(data.data(), data.size())); + if (!has_new_tags) { + // retrieve the old tags, they haven't changed + lmdb::val data; + if (lmdb::dbi_get(txn, roomsDb_, lmdb::val(room.first), data)) { + try { + RoomInfo tmp = json::parse( + std::string_view(data.data(), data.size())); + updatedInfo.tags = tmp.tags; + } catch (const json::exception &e) { + nhlog::db()->warn( + "failed to parse room info: room_id ({}), {}", + room.first, + std::string(data.data(), data.size())); + } } } } @@ -2463,7 +2506,7 @@ Cache::saveTimelineMessages(lmdb::txn &txn, lmdb::dbi_put(txn, evToOrderDb, event_id, lmdb::val(&index, sizeof(index))); // TODO(Nico): Allow blacklisting more event types in UI - if (!isHiddenEvent(e, room_id)) { + if (!isHiddenEvent(txn, e, room_id)) { ++msgIndex; lmdb::cursor_put(msgCursor.handle(), lmdb::val(&msgIndex, sizeof(msgIndex)), @@ -2546,7 +2589,7 @@ Cache::saveOldMessages(const std::string &room_id, const mtx::responses::Message lmdb::dbi_put(txn, evToOrderDb, event_id, lmdb::val(&index, sizeof(index))); // TODO(Nico): Allow blacklisting more event types in UI - if (!isHiddenEvent(e, room_id)) { + if (!isHiddenEvent(txn, e, room_id)) { --msgIndex; lmdb::dbi_put( txn, order2msgDb, lmdb::val(&msgIndex, sizeof(msgIndex)), event_id); @@ -2864,6 +2907,24 @@ Cache::deleteOldData() noexcept } } +std::optional<mtx::events::collections::RoomAccountDataEvents> +Cache::getAccountData(lmdb::txn &txn, mtx::events::EventType type, const std::string &room_id) +{ + try { + auto db = getAccountDataDb(txn, room_id); + + lmdb::val data; + if (lmdb::dbi_get(txn, db, lmdb::val(to_string(type)), data)) { + mtx::responses::utils::RoomAccountDataEvents events; + mtx::responses::utils::parse_room_account_data_events( + std::string_view(data.data(), data.size()), events); + return events.front(); + } + } catch (...) { + } + return std::nullopt; +} + bool Cache::hasEnoughPowerLevel(const std::vector<mtx::events::EventType> &eventTypes, const std::string &room_id, diff --git a/src/Cache_p.h b/src/Cache_p.h index 7d7b70e6bdaabc5120e89c72b97c4bcbfe7f5493..ce6414abda12aaceb44a6c6c6abd01524c6cbb21 100644 --- a/src/Cache_p.h +++ b/src/Cache_p.h @@ -301,6 +301,14 @@ private: const std::string &room_id, const mtx::responses::Timeline &res); + //! retrieve a specific event from account data + //! pass empty room_id for global account data + std::optional<mtx::events::collections::RoomAccountDataEvents> + getAccountData(lmdb::txn &txn, mtx::events::EventType type, const std::string &room_id); + bool isHiddenEvent(lmdb::txn &txn, + mtx::events::collections::TimelineEvents e, + const std::string &room_id); + //! Remove a room from the cache. // void removeLeftRoom(lmdb::txn &txn, const std::string &room_id); template<class T> @@ -510,6 +518,12 @@ private: return lmdb::dbi::open(txn, std::string(room_id + "/state").c_str(), MDB_CREATE); } + lmdb::dbi getAccountDataDb(lmdb::txn &txn, const std::string &room_id) + { + return lmdb::dbi::open( + txn, std::string(room_id + "/account_data").c_str(), MDB_CREATE); + } + lmdb::dbi getMembersDb(lmdb::txn &txn, const std::string &room_id) { return lmdb::dbi::open(txn, std::string(room_id + "/members").c_str(), MDB_CREATE); diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 704543b5485d9f2611a3f65baabc3c93af8d7d91..c6978a59d3c31d56cd7d6bc6bbeaabf4c6f94605 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -38,7 +38,6 @@ #include "SideBarActions.h" #include "Splitter.h" #include "TextInputWidget.h" -#include "TopRoomBar.h" #include "UserInfoWidget.h" #include "UserSettingsPage.h" #include "Utils.h" @@ -127,10 +126,8 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent) contentLayout_->setSpacing(0); contentLayout_->setMargin(0); - top_bar_ = new TopRoomBar(this); view_manager_ = new TimelineViewManager(userSettings_, &callManager_, this); - contentLayout_->addWidget(top_bar_); contentLayout_->addWidget(view_manager_->getWidget()); activeCallBar_ = new ActiveCallBar(this); @@ -182,30 +179,6 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent) room_list_->previousRoom(); }); - connect(top_bar_, &TopRoomBar::mentionsClicked, this, [this](const QPoint &mentionsPos) { - if (user_mentions_popup_->isVisible()) { - user_mentions_popup_->hide(); - } else { - showNotificationsDialog(mentionsPos); - http::client()->notifications( - 1000, - "", - "highlight", - [this, mentionsPos](const mtx::responses::Notifications &res, - mtx::http::RequestErr err) { - if (err) { - nhlog::net()->warn( - "failed to retrieve notifications: {} ({})", - err->matrix_error.error, - static_cast<int>(err->status_code)); - return; - } - - emit highlightedNotifsRetrieved(std::move(res), mentionsPos); - }); - } - }); - connectivityTimer_.setInterval(CHECK_CONNECTIVITY_INTERVAL); connect(&connectivityTimer_, &QTimer::timeout, this, [=]() { if (http::client()->access_token().empty()) { @@ -227,8 +200,9 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent) connect(this, &ChatPage::loggedOut, this, &ChatPage::logout); - connect(top_bar_, &TopRoomBar::showRoomList, splitter, &Splitter::showFullRoomList); - connect(top_bar_, &TopRoomBar::inviteUsers, this, [this](QStringList users) { + connect( + view_manager_, &TimelineViewManager::showRoomList, splitter, &Splitter::showFullRoomList); + connect(view_manager_, &TimelineViewManager::inviteUsers, this, [this](QStringList users) { const auto room_id = current_room_.toStdString(); for (int ii = 0; ii < users.size(); ++ii) { @@ -252,8 +226,10 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent) } }); + connect(room_list_, &RoomList::roomChanged, this, [this](QString room_id) { + this->current_room_ = room_id; + }); connect(room_list_, &RoomList::roomChanged, text_input_, &TextInputWidget::stopTyping); - connect(room_list_, &RoomList::roomChanged, this, &ChatPage::changeTopRoomInfo); connect(room_list_, &RoomList::roomChanged, splitter, &Splitter::showChatView); connect(room_list_, &RoomList::roomChanged, text_input_, &TextInputWidget::focusLineEdit); connect( @@ -488,8 +464,6 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent) } }); - connect(room_list_, &RoomList::roomAvatarChanged, this, &ChatPage::updateTopBarAvatar); - connect( this, &ChatPage::updateGroupsInfo, communitiesList_, &CommunitiesList::setCommunities); @@ -589,11 +563,6 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent) }); connect(this, &ChatPage::syncRoomlist, room_list_, &RoomList::sync); connect(this, &ChatPage::syncTags, communitiesList_, &CommunitiesList::syncTags); - connect( - this, &ChatPage::syncTopBar, this, [this](const std::map<QString, RoomInfo> &updates) { - if (updates.find(currentRoom()) != updates.end()) - changeTopRoomInfo(currentRoom()); - }); // Callbacks to update the user info (top left corner of the page). connect(this, &ChatPage::setUserAvatar, user_info_widget_, &UserInfoWidget::setAvatar); @@ -658,7 +627,6 @@ void ChatPage::resetUI() { room_list_->clear(); - top_bar_->reset(); user_info_widget_->reset(); view_manager_->clearAll(); @@ -787,46 +755,6 @@ ChatPage::bootstrap(QString userid, QString homeserver, QString token) tryInitialSync(); } -void -ChatPage::updateTopBarAvatar(const QString &roomid, const QString &img) -{ - if (current_room_ != roomid) - return; - - top_bar_->updateRoomAvatar(img); -} - -void -ChatPage::changeTopRoomInfo(const QString &room_id) -{ - if (room_id.isEmpty()) { - nhlog::ui()->warn("cannot switch to empty room_id"); - return; - } - - try { - auto room_info = cache::getRoomInfo({room_id.toStdString()}); - - if (room_info.find(room_id) == room_info.end()) - return; - - const auto name = QString::fromStdString(room_info[room_id].name); - const auto avatar_url = QString::fromStdString(room_info[room_id].avatar_url); - - top_bar_->updateRoomName(name); - top_bar_->updateRoomTopic(QString::fromStdString(room_info[room_id].topic)); - - top_bar_->updateRoomAvatarFromName(name); - if (!avatar_url.isEmpty()) - top_bar_->updateRoomAvatar(avatar_url); - - } catch (const lmdb::error &e) { - nhlog::ui()->error("failed to change top bar room info: {}", e.what()); - } - - current_room_ = room_id; -} - void ChatPage::showUnreadMessageNotification(int count) { @@ -968,14 +896,22 @@ ChatPage::sendNotifications(const mtx::responses::Notifications &res) } if (userSettings_->hasDesktopNotifications()) { - notificationsManager.postNotification( - room_id, - QString::fromStdString(event_id), - QString::fromStdString( - cache::singleRoomInfo(item.room_id).name), - cache::displayName(room_id, user_id), - utils::event_body(item.event), - cache::getRoomAvatar(room_id)); + auto info = cache::singleRoomInfo(item.room_id); + + AvatarProvider::resolve( + QString::fromStdString(info.avatar_url), + 96, + this, + [this, room_id, event_id, item, user_id, info]( + QPixmap image) { + notificationsManager.postNotification( + room_id, + QString::fromStdString(event_id), + QString::fromStdString(info.name), + cache::displayName(room_id, user_id), + utils::event_body(item.event), + image.toImage()); + }); } } } catch (const lmdb::error &e) { @@ -1071,7 +1007,6 @@ ChatPage::handleSyncResponse(mtx::responses::Sync res) auto updates = cache::roomUpdates(res); - emit syncTopBar(updates); emit syncRoomlist(updates); emit syncUI(res.rooms); @@ -1482,9 +1417,12 @@ ChatPage::getProfileInfo() void ChatPage::hideSideBars() { - communitiesList_->hide(); - sideBar_->hide(); - top_bar_->enableBackButton(); + // Don't hide side bar, if we are currently only showing the side bar! + if (view_manager_->getWidget()->isVisible()) { + communitiesList_->hide(); + sideBar_->hide(); + } + view_manager_->enableBackButton(); } void @@ -1494,23 +1432,19 @@ ChatPage::showSideBars() communitiesList_->show(); sideBar_->show(); - top_bar_->disableBackButton(); + view_manager_->disableBackButton(); + content_->show(); } uint64_t ChatPage::timelineWidth() { - int sidebarWidth = sideBar_->size().width(); - sidebarWidth += communitiesList_->size().width(); + int sidebarWidth = sideBar_->minimumSize().width(); + sidebarWidth += communitiesList_->minimumSize().width(); + nhlog::ui()->info("timelineWidth: {}", size().width() - sidebarWidth); return size().width() - sidebarWidth; } -bool -ChatPage::isSideBarExpanded() -{ - const auto sz = splitter::calculateSidebarSizes(QFont{}); - return sideBar_->size().width() > sz.normal; -} void ChatPage::initiateLogout() diff --git a/src/ChatPage.h b/src/ChatPage.h index de4cb4caae6ffb14eb4ba6a81701e95cfb086c37..9d8abb248ee2196c3005e14b5fc6d5ac3a0e2e2f 100644 --- a/src/ChatPage.h +++ b/src/ChatPage.h @@ -50,7 +50,6 @@ class SideBarActions; class Splitter; class TextInputWidget; class TimelineViewManager; -class TopRoomBar; class UserInfoWidget; class UserSettings; class NotificationsManager; @@ -85,7 +84,6 @@ public: //! Calculate the width of the message timeline. uint64_t timelineWidth(); - bool isSideBarExpanded(); //! Hide the room & group list (if it was visible). void hideSideBars(); //! Show the room/group list (if it was visible). @@ -156,7 +154,6 @@ signals: void syncUI(const mtx::responses::Rooms &rooms); void syncRoomlist(const std::map<QString, RoomInfo> &updates); void syncTags(const std::map<QString, RoomInfo> &updates); - void syncTopBar(const std::map<QString, RoomInfo> &updates); void dropToLoginPageCb(const QString &msg); void notifyMessage(const QString &roomid, @@ -191,8 +188,6 @@ signals: private slots: void showUnreadMessageNotification(int count); - void updateTopBarAvatar(const QString &roomid, const QString &img); - void changeTopRoomInfo(const QString &room_id); void logout(); void removeRoom(const QString &room_id); void dropToLoginPage(const QString &msg); @@ -263,7 +258,6 @@ private: TimelineViewManager *view_manager_; SideBarActions *sidebarActions_; - TopRoomBar *top_bar_; TextInputWidget *text_input_; ActiveCallBar *activeCallBar_; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 59557bff5e596c69b1e344225ded396bb8132097..63722372f1b584df5a5169cddd77137cbafcf139 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -200,7 +200,8 @@ MainWindow::adjustSideBars() const uint64_t timelineWidth = chat_page_->timelineWidth(); const uint64_t minAvailableWidth = sz.collapsePoint + sz.groups; - if (timelineWidth < minAvailableWidth && !chat_page_->isSideBarExpanded()) { + nhlog::ui()->info("timelineWidth: {}, min {}", timelineWidth, minAvailableWidth); + if (timelineWidth < minAvailableWidth) { chat_page_->hideSideBars(); } else { chat_page_->showSideBars(); @@ -330,9 +331,7 @@ MainWindow::hasActiveUser() void MainWindow::openRoomSettings(const QString &room_id) { - const auto roomToSearch = room_id.isEmpty() ? chat_page_->currentRoom() : ""; - - auto dialog = new dialogs::RoomSettings(roomToSearch, this); + auto dialog = new dialogs::RoomSettings(room_id, this); showDialog(dialog); } @@ -340,8 +339,7 @@ MainWindow::openRoomSettings(const QString &room_id) void MainWindow::openMemberListDialog(const QString &room_id) { - const auto roomToSearch = room_id.isEmpty() ? chat_page_->currentRoom() : ""; - auto dialog = new dialogs::MemberList(roomToSearch, this); + auto dialog = new dialogs::MemberList(room_id, this); showDialog(dialog); } @@ -349,11 +347,9 @@ MainWindow::openMemberListDialog(const QString &room_id) void MainWindow::openLeaveRoomDialog(const QString &room_id) { - auto roomToLeave = room_id.isEmpty() ? chat_page_->currentRoom() : room_id; - auto dialog = new dialogs::LeaveRoom(this); - connect(dialog, &dialogs::LeaveRoom::leaving, this, [this, roomToLeave]() { - chat_page_->leaveRoom(roomToLeave); + connect(dialog, &dialogs::LeaveRoom::leaving, this, [this, room_id]() { + chat_page_->leaveRoom(room_id); }); showDialog(dialog); diff --git a/src/MainWindow.h b/src/MainWindow.h index 2fc2d00f46e32370f6a4a5e34820248ddf923192..e66f299f8080d8a5e6504acd8f16af0d6fa9d576 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -67,14 +67,14 @@ public: static MainWindow *instance() { return instance_; }; void saveCurrentWindowSize(); - void openLeaveRoomDialog(const QString &room_id = ""); + void openLeaveRoomDialog(const QString &room_id); void openInviteUsersDialog(std::function<void(const QStringList &invitees)> callback); void openCreateRoomDialog( std::function<void(const mtx::requests::CreateRoom &request)> callback); void openJoinRoomDialog(std::function<void(const QString &room_id)> callback); void openLogoutDialog(); - void openRoomSettings(const QString &room_id = ""); - void openMemberListDialog(const QString &room_id = ""); + void openRoomSettings(const QString &room_id); + void openMemberListDialog(const QString &room_id); void openReadReceiptsDialog(const QString &event_id); void hideOverlay(); diff --git a/src/MxcImageProvider.cpp b/src/MxcImageProvider.cpp index a197e4aa3f124d4acf53b1903a42efd24d51514f..b59fdff8a96c2bcd6485505afb33c8357fc77901 100644 --- a/src/MxcImageProvider.cpp +++ b/src/MxcImageProvider.cpp @@ -17,13 +17,16 @@ MxcImageResponse::run() auto data = cache::image(fileName); if (!data.isNull()) { m_image = utils::readImage(&data); - m_image = m_image.scaled( - m_requestedSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); - m_image.setText("mxc url", "mxc://" + m_id); if (!m_image.isNull()) { - emit finished(); - return; + m_image = m_image.scaled( + m_requestedSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); + m_image.setText("mxc url", "mxc://" + m_id); + + if (!m_image.isNull()) { + emit finished(); + return; + } } } @@ -34,7 +37,7 @@ MxcImageResponse::run() opts.method = "crop"; http::client()->get_thumbnail( opts, [this, fileName](const std::string &res, mtx::http::RequestErr err) { - if (err) { + if (err || res.empty()) { nhlog::net()->error("Failed to download image {}", m_id.toStdString()); m_error = "Failed download"; @@ -46,6 +49,10 @@ MxcImageResponse::run() auto data = QByteArray(res.data(), res.size()); cache::saveImage(fileName, data); m_image = utils::readImage(&data); + if (!m_image.isNull()) { + m_image = m_image.scaled( + m_requestedSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); + } m_image.setText("mxc url", "mxc://" + m_id); emit finished(); diff --git a/src/TextInputWidget.cpp b/src/TextInputWidget.cpp index 6d57a5f15f95a8a68dee1e84a38ba9bac55b3b0c..4a25c4cf99f6fd11a40520e23423ea34d2ffada3 100644 --- a/src/TextInputWidget.cpp +++ b/src/TextInputWidget.cpp @@ -246,7 +246,8 @@ FilteredTextEdit::keyPressEvent(QKeyEvent *event) } case Qt::Key_Colon: { QTextEdit::keyPressEvent(event); - trigger_pos_ = textCursor().position() - 1; + trigger_pos_ = textCursor().position() - 1; + emoji_completion_model_->setFilterRegExp(""); emoji_popup_open_ = true; break; } diff --git a/src/TopRoomBar.cpp b/src/TopRoomBar.cpp deleted file mode 100644 index a45a751e75b5ed1ab15a1e153e963e973c1da2d6..0000000000000000000000000000000000000000 --- a/src/TopRoomBar.cpp +++ /dev/null @@ -1,229 +0,0 @@ -/* - * nheko Copyright (C) 2017 Konstantinos Sideris <siderisk@auth.gr> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <QAction> -#include <QIcon> -#include <QLabel> -#include <QPaintEvent> -#include <QPainter> -#include <QPen> -#include <QPoint> -#include <QStyle> -#include <QStyleOption> -#include <QVBoxLayout> - -#include "Config.h" -#include "MainWindow.h" -#include "TopRoomBar.h" -#include "Utils.h" -#include "ui/Avatar.h" -#include "ui/FlatButton.h" -#include "ui/Menu.h" -#include "ui/OverlayModal.h" -#include "ui/TextLabel.h" - -TopRoomBar::TopRoomBar(QWidget *parent) - : QWidget(parent) - , buttonSize_{32} -{ - QFont f; - f.setPointSizeF(f.pointSizeF()); - - const int fontHeight = QFontMetrics(f).height(); - const int widgetMargin = fontHeight / 3; - const int contentHeight = fontHeight * 3; - - setFixedHeight(contentHeight + widgetMargin); - - topLayout_ = new QHBoxLayout(this); - topLayout_->setSpacing(widgetMargin); - topLayout_->setContentsMargins( - 2 * widgetMargin, widgetMargin, 2 * widgetMargin, widgetMargin); - - avatar_ = new Avatar(this, fontHeight * 2); - avatar_->setLetter(""); - - textLayout_ = new QVBoxLayout(); - textLayout_->setSpacing(0); - textLayout_->setMargin(0); - - QFont roomFont; - roomFont.setPointSizeF(roomFont.pointSizeF() * 1.1); - roomFont.setWeight(QFont::Medium); - - nameLabel_ = new QLabel(this); - nameLabel_->setFont(roomFont); - nameLabel_->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); - - QFont descriptionFont; - - topicLabel_ = new TextLabel(this); - topicLabel_->setLineWrapMode(QTextEdit::NoWrap); - topicLabel_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - topicLabel_->setFont(descriptionFont); - topicLabel_->setTextInteractionFlags(Qt::TextBrowserInteraction); - topicLabel_->setOpenExternalLinks(true); - topicLabel_->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); - - textLayout_->addWidget(nameLabel_); - textLayout_->addWidget(topicLabel_); - - settingsBtn_ = new FlatButton(this); - settingsBtn_->setToolTip(tr("Room options")); - settingsBtn_->setFixedSize(buttonSize_, buttonSize_); - settingsBtn_->setCornerRadius(buttonSize_ / 2); - - mentionsBtn_ = new FlatButton(this); - mentionsBtn_->setToolTip(tr("Mentions")); - mentionsBtn_->setFixedSize(buttonSize_, buttonSize_); - mentionsBtn_->setCornerRadius(buttonSize_ / 2); - - QIcon settings_icon; - settings_icon.addFile(":/icons/icons/ui/vertical-ellipsis.png"); - settingsBtn_->setIcon(settings_icon); - settingsBtn_->setIconSize(QSize(buttonSize_ / 2, buttonSize_ / 2)); - - QIcon mentions_icon; - mentions_icon.addFile(":/icons/icons/ui/at-solid.svg"); - mentionsBtn_->setIcon(mentions_icon); - mentionsBtn_->setIconSize(QSize(buttonSize_ / 2, buttonSize_ / 2)); - - backBtn_ = new FlatButton(this); - backBtn_->setFixedSize(buttonSize_, buttonSize_); - backBtn_->setCornerRadius(buttonSize_ / 2); - - QIcon backIcon; - backIcon.addFile(":/icons/icons/ui/angle-pointing-to-left.png"); - backBtn_->setIcon(backIcon); - backBtn_->setIconSize(QSize(buttonSize_ / 2, buttonSize_ / 2)); - backBtn_->hide(); - - connect(backBtn_, &QPushButton::clicked, this, &TopRoomBar::showRoomList); - - topLayout_->addWidget(avatar_); - topLayout_->addWidget(backBtn_); - topLayout_->addLayout(textLayout_, 1); - topLayout_->addWidget(mentionsBtn_, 0, Qt::AlignRight); - topLayout_->addWidget(settingsBtn_, 0, Qt::AlignRight); - - menu_ = new Menu(this); - - inviteUsers_ = new QAction(tr("Invite users"), this); - connect(inviteUsers_, &QAction::triggered, this, [this]() { - MainWindow::instance()->openInviteUsersDialog( - [this](const QStringList &invitees) { emit inviteUsers(invitees); }); - }); - - roomMembers_ = new QAction(tr("Members"), this); - connect(roomMembers_, &QAction::triggered, this, []() { - MainWindow::instance()->openMemberListDialog(); - }); - - leaveRoom_ = new QAction(tr("Leave room"), this); - connect(leaveRoom_, &QAction::triggered, this, []() { - MainWindow::instance()->openLeaveRoomDialog(); - }); - - roomSettings_ = new QAction(tr("Settings"), this); - connect(roomSettings_, &QAction::triggered, this, []() { - MainWindow::instance()->openRoomSettings(); - }); - - menu_->addAction(inviteUsers_); - menu_->addAction(roomMembers_); - menu_->addAction(leaveRoom_); - menu_->addAction(roomSettings_); - - connect(settingsBtn_, &QPushButton::clicked, this, [this]() { - auto pos = mapToGlobal(settingsBtn_->pos()); - menu_->popup( - QPoint(pos.x() + buttonSize_ - menu_->sizeHint().width(), pos.y() + buttonSize_)); - }); - - connect(mentionsBtn_, &QPushButton::clicked, this, [this]() { - auto pos = mapToGlobal(mentionsBtn_->pos()); - emit mentionsClicked(pos); - }); -} - -void -TopRoomBar::enableBackButton() -{ - avatar_->hide(); - backBtn_->show(); -} - -void -TopRoomBar::disableBackButton() -{ - avatar_->show(); - backBtn_->hide(); -} - -void -TopRoomBar::updateRoomAvatarFromName(const QString &name) -{ - avatar_->setLetter(utils::firstChar(name)); - update(); -} - -void -TopRoomBar::reset() -{ - nameLabel_->setText(""); - topicLabel_->setText(""); - avatar_->setLetter(""); -} - -void -TopRoomBar::updateRoomAvatar(const QString &avatar_image) -{ - avatar_->setImage(avatar_image); - update(); -} - -void -TopRoomBar::updateRoomName(const QString &name) -{ - nameLabel_->setText(name); - update(); -} - -void -TopRoomBar::updateRoomTopic(QString topic) -{ - topic.replace(conf::strings::url_regex, conf::strings::url_html); - topicLabel_->clearLinks(); - topicLabel_->setHtml(topic); - update(); -} - -void -TopRoomBar::mousePressEvent(QMouseEvent *) -{ - if (roomSettings_ != nullptr) - roomSettings_->trigger(); -} - -void -TopRoomBar::paintEvent(QPaintEvent *) -{ - QStyleOption opt; - opt.init(this); - QPainter p(this); - style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); -} diff --git a/src/TopRoomBar.h b/src/TopRoomBar.h deleted file mode 100644 index 0c33c1e0d1fff1f72824de9cf252818530904a04..0000000000000000000000000000000000000000 --- a/src/TopRoomBar.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * nheko Copyright (C) 2017 Konstantinos Sideris <siderisk@auth.gr> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#pragma once - -#include <QColor> -#include <QStringList> -#include <QWidget> - -class Avatar; -class FlatButton; -class Menu; -class TextLabel; -class OverlayModal; - -class QLabel; -class QHBoxLayout; -class QVBoxLayout; - -class TopRoomBar : public QWidget -{ - Q_OBJECT - - Q_PROPERTY(QColor borderColor READ borderColor WRITE setBorderColor) - -public: - TopRoomBar(QWidget *parent = nullptr); - - void updateRoomAvatar(const QString &avatar_image); - void updateRoomName(const QString &name); - void updateRoomTopic(QString topic); - void updateRoomAvatarFromName(const QString &name); - - void reset(); - - QColor borderColor() const { return borderColor_; } - void setBorderColor(QColor &color) { borderColor_ = color; } - -public slots: - //! Add a "back-arrow" button that can switch to roomlist only view. - void enableBackButton(); - //! Replace the "back-arrow" button with the avatar of the room. - void disableBackButton(); - -signals: - void inviteUsers(QStringList users); - void showRoomList(); - void mentionsClicked(const QPoint &pos); - -protected: - void mousePressEvent(QMouseEvent *) override; - void paintEvent(QPaintEvent *) override; - -private: - QHBoxLayout *topLayout_ = nullptr; - QVBoxLayout *textLayout_ = nullptr; - - QLabel *nameLabel_ = nullptr; - TextLabel *topicLabel_ = nullptr; - - Menu *menu_; - QAction *leaveRoom_ = nullptr; - QAction *roomMembers_ = nullptr; - QAction *roomSettings_ = nullptr; - QAction *inviteUsers_ = nullptr; - - FlatButton *settingsBtn_; - FlatButton *mentionsBtn_; - FlatButton *backBtn_; - - Avatar *avatar_; - - int buttonSize_; - - QColor borderColor_; -}; diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index ab5658a40ae07bb999fc89890b7613200d9804f7..f1542ec5e021da3ccb1705d51fdf90b46aa93ba6 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -513,9 +513,6 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge callsLabel->setFont(font); useStunServer_ = new Toggle{this}; - defaultAudioSourceValue_ = new QLabel(this); - defaultAudioSourceValue_->setFont(font); - auto encryptionLabel_ = new QLabel{tr("ENCRYPTION"), this}; encryptionLabel_->setFixedHeight(encryptionLabel_->minimumHeight() + LayoutTopMargin); encryptionLabel_->setAlignment(Qt::AlignBottom); @@ -652,7 +649,6 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge boxWrap(tr("Allow fallback call assist server"), useStunServer_, tr("Will use turn.matrix.org as assist when your home server does not offer one.")); - boxWrap(tr("Default audio source device"), defaultAudioSourceValue_); formLayout_->addRow(encryptionLabel_); formLayout_->addRow(new HorizontalLine{this}); @@ -813,7 +809,6 @@ UserSettingsPage::showEvent(QShowEvent *) deviceIdValue_->setText(QString::fromStdString(http::client()->device_id())); timelineMaxWidthSpin_->setValue(settings_->timelineMaxWidth()); useStunServer_->setState(!settings_->useStunServer()); - defaultAudioSourceValue_->setText(settings_->defaultAudioSource()); deviceFingerprintValue_->setText( utils::humanReadableFingerprint(olm::client()->identity_keys().ed25519)); diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h index 52ff9466a0a9fb42f7486daf70651d3340b3a01f..e947bfaec29dd8170cb2e9d08e09dc46e1854764 100644 --- a/src/UserSettingsPage.h +++ b/src/UserSettingsPage.h @@ -250,7 +250,6 @@ private: Toggle *decryptSidebar_; QLabel *deviceFingerprintValue_; QLabel *deviceIdValue_; - QLabel *defaultAudioSourceValue_; QComboBox *themeCombo_; QComboBox *scaleFactorCombo_; diff --git a/src/WebRTCSession.cpp b/src/WebRTCSession.cpp index 64172e616784aaa5094563a9743a06451a54aa4a..30a27b6043a3fdd9b13478ca23491f2628c06053 100644 --- a/src/WebRTCSession.cpp +++ b/src/WebRTCSession.cpp @@ -21,6 +21,7 @@ WebRTCSession::WebRTCSession() { qRegisterMetaType<WebRTCSession::State>(); connect(this, &WebRTCSession::stateChanged, this, &WebRTCSession::setState); + init(); } bool @@ -78,7 +79,11 @@ WebRTCSession::init(std::string *errorMessage) gst_object_unref(plugin); } - if (!initialised_) { + if (initialised_) { +#if GST_CHECK_VERSION(1, 18, 0) + startDeviceMonitor(); +#endif + } else { nhlog::ui()->error(strError); if (errorMessage) *errorMessage = strError; @@ -95,12 +100,65 @@ namespace { bool isoffering_; std::string localsdp_; std::vector<mtx::events::msg::CallCandidates::Candidate> localcandidates_; +std::vector<std::pair<std::string, GstDevice *>> audioSources_; + +void +addDevice(GstDevice *device) +{ + if (device) { + gchar *name = gst_device_get_display_name(device); + nhlog::ui()->debug("WebRTC: device added: {}", name); + audioSources_.push_back({name, device}); + g_free(name); + } +} + +#if GST_CHECK_VERSION(1, 18, 0) +void +removeDevice(GstDevice *device, bool changed) +{ + if (device) { + if (auto it = std::find_if(audioSources_.begin(), + audioSources_.end(), + [device](const auto &s) { return s.second == device; }); + it != audioSources_.end()) { + nhlog::ui()->debug(std::string("WebRTC: device ") + + (changed ? "changed: " : "removed: ") + "{}", + it->first); + gst_object_unref(device); + audioSources_.erase(it); + } + } +} +#endif gboolean newBusMessage(GstBus *bus G_GNUC_UNUSED, GstMessage *msg, gpointer user_data) { WebRTCSession *session = static_cast<WebRTCSession *>(user_data); switch (GST_MESSAGE_TYPE(msg)) { +#if GST_CHECK_VERSION(1, 18, 0) + case GST_MESSAGE_DEVICE_ADDED: { + GstDevice *device; + gst_message_parse_device_added(msg, &device); + addDevice(device); + break; + } + case GST_MESSAGE_DEVICE_REMOVED: { + GstDevice *device; + gst_message_parse_device_removed(msg, &device); + removeDevice(device, false); + break; + } + case GST_MESSAGE_DEVICE_CHANGED: { + GstDevice *device; + GstDevice *oldDevice; + gst_message_parse_device_changed(msg, &device, &oldDevice); + removeDevice(oldDevice, true); + addDevice(device); + break; + } +#endif case GST_MESSAGE_EOS: nhlog::ui()->error("WebRTC: end of stream"); session->end(); @@ -176,7 +234,7 @@ createAnswer(GstPromise *promise, gpointer webrtc) g_signal_emit_by_name(webrtc, "create-answer", nullptr, promise); } -#if GST_CHECK_VERSION(1, 17, 0) +#if GST_CHECK_VERSION(1, 18, 0) void iceGatheringStateChanged(GstElement *webrtc, GParamSpec *pspec G_GNUC_UNUSED, @@ -223,7 +281,7 @@ addLocalICECandidate(GstElement *webrtc G_GNUC_UNUSED, { nhlog::ui()->debug("WebRTC: local candidate: (m-line:{}):{}", mlineIndex, candidate); -#if GST_CHECK_VERSION(1, 17, 0) +#if GST_CHECK_VERSION(1, 18, 0) localcandidates_.push_back({"audio", (uint16_t)mlineIndex, candidate}); return; #else @@ -233,8 +291,10 @@ addLocalICECandidate(GstElement *webrtc G_GNUC_UNUSED, return; } + localcandidates_.push_back({"audio", (uint16_t)mlineIndex, candidate}); + // GStreamer v1.16: webrtcbin's notify::ice-gathering-state triggers - // GST_WEBRTC_ICE_GATHERING_STATE_COMPLETE too early. Fixed in v1.17. + // GST_WEBRTC_ICE_GATHERING_STATE_COMPLETE too early. Fixed in v1.18. // Use a 100ms timeout in the meantime static guint timerid = 0; if (timerid) @@ -423,8 +483,12 @@ WebRTCSession::acceptICECandidates( for (const auto &c : candidates) { nhlog::ui()->debug( "WebRTC: remote candidate: (m-line:{}):{}", c.sdpMLineIndex, c.candidate); - g_signal_emit_by_name( - webrtc_, "add-ice-candidate", c.sdpMLineIndex, c.candidate.c_str()); + if (!c.candidate.empty()) { + g_signal_emit_by_name(webrtc_, + "add-ice-candidate", + c.sdpMLineIndex, + c.candidate.c_str()); + } } } } @@ -471,7 +535,7 @@ WebRTCSession::startPipeline(int opusPayloadType) gst_element_set_state(pipe_, GST_STATE_READY); g_signal_connect(webrtc_, "pad-added", G_CALLBACK(addDecodeBin), pipe_); -#if GST_CHECK_VERSION(1, 17, 0) +#if GST_CHECK_VERSION(1, 18, 0) // capture ICE gathering completion g_signal_connect( webrtc_, "notify::ice-gathering-state", G_CALLBACK(iceGatheringStateChanged), nullptr); @@ -488,7 +552,7 @@ WebRTCSession::startPipeline(int opusPayloadType) } GstBus *bus = gst_pipeline_get_bus(GST_PIPELINE(pipe_)); - gst_bus_add_watch(bus, newBusMessage, this); + busWatchId_ = gst_bus_add_watch(bus, newBusMessage, this); gst_object_unref(bus); emit stateChanged(State::INITIATED); return true; @@ -497,19 +561,18 @@ WebRTCSession::startPipeline(int opusPayloadType) bool WebRTCSession::createPipeline(int opusPayloadType) { - int nSources = audioSources_ ? g_list_length(audioSources_) : 0; - if (nSources == 0) { + if (audioSources_.empty()) { nhlog::ui()->error("WebRTC: no audio sources"); return false; } - if (audioSourceIndex_ < 0 || audioSourceIndex_ >= nSources) { + if (audioSourceIndex_ < 0 || (size_t)audioSourceIndex_ >= audioSources_.size()) { nhlog::ui()->error("WebRTC: invalid audio source index"); return false; } - GstElement *source = gst_device_create_element( - GST_DEVICE_CAST(g_list_nth_data(audioSources_, audioSourceIndex_)), nullptr); + GstElement *source = + gst_device_create_element(audioSources_[audioSourceIndex_].second, nullptr); GstElement *volume = gst_element_factory_make("volume", "srclevel"); GstElement *convert = gst_element_factory_make("audioconvert", nullptr); GstElement *resample = gst_element_factory_make("audioresample", nullptr); @@ -594,12 +657,40 @@ WebRTCSession::end() gst_element_set_state(pipe_, GST_STATE_NULL); gst_object_unref(pipe_); pipe_ = nullptr; + g_source_remove(busWatchId_); + busWatchId_ = 0; } webrtc_ = nullptr; if (state_ != State::DISCONNECTED) emit stateChanged(State::DISCONNECTED); } +#if GST_CHECK_VERSION(1, 18, 0) +void +WebRTCSession::startDeviceMonitor() +{ + if (!initialised_) + return; + + static GstDeviceMonitor *monitor = nullptr; + if (!monitor) { + monitor = gst_device_monitor_new(); + GstCaps *caps = gst_caps_new_empty_simple("audio/x-raw"); + gst_device_monitor_add_filter(monitor, "Audio/Source", caps); + gst_caps_unref(caps); + + GstBus *bus = gst_device_monitor_get_bus(monitor); + gst_bus_add_watch(bus, newBusMessage, nullptr); + gst_object_unref(bus); + if (!gst_device_monitor_start(monitor)) { + nhlog::ui()->error("WebRTC: failed to start device monitor"); + return; + } + } +} + +#else + void WebRTCSession::refreshDevices() { @@ -613,31 +704,42 @@ WebRTCSession::refreshDevices() gst_device_monitor_add_filter(monitor, "Audio/Source", caps); gst_caps_unref(caps); } - g_list_free_full(audioSources_, g_object_unref); - audioSources_ = gst_device_monitor_get_devices(monitor); + + std::for_each(audioSources_.begin(), audioSources_.end(), [](const auto &s) { + gst_object_unref(s.second); + }); + audioSources_.clear(); + GList *devices = gst_device_monitor_get_devices(monitor); + if (devices) { + audioSources_.reserve(g_list_length(devices)); + for (GList *l = devices; l != nullptr; l = l->next) + addDevice(GST_DEVICE_CAST(l->data)); + g_list_free(devices); + } } +#endif std::vector<std::string> WebRTCSession::getAudioSourceNames(const std::string &defaultDevice) { - if (!initialised_) - return {}; - +#if !GST_CHECK_VERSION(1, 18, 0) refreshDevices(); +#endif + // move default device to top of the list + if (auto it = std::find_if(audioSources_.begin(), + audioSources_.end(), + [&](const auto &s) { return s.first == defaultDevice; }); + it != audioSources_.end()) + std::swap(audioSources_.front(), *it); + std::vector<std::string> ret; - ret.reserve(g_list_length(audioSources_)); - for (GList *l = audioSources_; l != nullptr; l = l->next) { - gchar *name = gst_device_get_display_name(GST_DEVICE_CAST(l->data)); - ret.emplace_back(name); - g_free(name); - if (ret.back() == defaultDevice) { - // move default device to top of the list - std::swap(audioSources_->data, l->data); - std::swap(ret.front(), ret.back()); - } - } + ret.reserve(audioSources_.size()); + std::for_each(audioSources_.cbegin(), audioSources_.cend(), [&](const auto &s) { + ret.push_back(s.first); + }); return ret; } + #else bool @@ -688,6 +790,10 @@ void WebRTCSession::refreshDevices() {} +void +WebRTCSession::startDeviceMonitor() +{} + std::vector<std::string> WebRTCSession::getAudioSourceNames(const std::string &) { diff --git a/src/WebRTCSession.h b/src/WebRTCSession.h index 56d76fa83b0d81d629eb2cf9b5c1a4b2dac3895f..653ec2cf76103a962df3b73388a5e5d7b275ca78 100644 --- a/src/WebRTCSession.h +++ b/src/WebRTCSession.h @@ -7,7 +7,6 @@ #include "mtx/events/voip.hpp" -typedef struct _GList GList; typedef struct _GstElement GstElement; class WebRTCSession : public QObject @@ -64,18 +63,19 @@ private slots: private: WebRTCSession(); - bool initialised_ = false; - State state_ = State::DISCONNECTED; - GstElement *pipe_ = nullptr; - GstElement *webrtc_ = nullptr; + bool initialised_ = false; + State state_ = State::DISCONNECTED; + GstElement *pipe_ = nullptr; + GstElement *webrtc_ = nullptr; + unsigned int busWatchId_ = 0; std::string stunServer_; std::vector<std::string> turnServers_; - GList *audioSources_ = nullptr; int audioSourceIndex_ = -1; bool startPipeline(int opusPayloadType); bool createPipeline(int opusPayloadType); void refreshDevices(); + void startDeviceMonitor(); public: WebRTCSession(WebRTCSession const &) = delete; diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp index af1f7b23d2268c36696bc6ca911846076a3d4ce3..298e0d1873a1d1c8873926304aadc734b7d6e0cf 100644 --- a/src/timeline/EventStore.cpp +++ b/src/timeline/EventStore.cpp @@ -573,7 +573,7 @@ EventStore::decryptEvent(const IdIndex &idx, room_id_, index.sender_key); dummy.content.body = - tr("-- Reply attack! This message index was reused! --").toStdString(); + tr("-- Replay attack! This message index was reused! --").toStdString(); break; case olm::DecryptionErrorCode::UnknownFingerprint: // TODO: don't fail, just show in UI. diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index ddd238b9db220ea831b7df09065498e97f1d8548..af26a543e2b6d506de03606576765db7353941e0 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -565,6 +565,25 @@ TimelineModel::fetchMore(const QModelIndex &) events.fetchMore(); } +void +TimelineModel::syncState(const mtx::responses::State &s) +{ + using namespace mtx::events; + + for (const auto &e : s.events) { + if (std::holds_alternative<StateEvent<state::Avatar>>(e)) + emit roomAvatarUrlChanged(); + else if (std::holds_alternative<StateEvent<state::Name>>(e)) + emit roomNameChanged(); + else if (std::holds_alternative<StateEvent<state::Topic>>(e)) + emit roomTopicChanged(); + else if (std::holds_alternative<StateEvent<state::Member>>(e)) { + emit roomAvatarUrlChanged(); + emit roomNameChanged(); + } + } +} + void TimelineModel::addEvents(const mtx::responses::Timeline &timeline) { @@ -574,6 +593,7 @@ TimelineModel::addEvents(const mtx::responses::Timeline &timeline) events.handleSync(timeline); using namespace mtx::events; + for (auto e : timeline.events) { if (auto encryptedEvent = std::get_if<EncryptedEvent<msg::Encrypted>>(&e)) { MegolmSessionIndex index; @@ -597,6 +617,16 @@ TimelineModel::addEvents(const mtx::responses::Timeline &timeline) emit newCallEvent(event); }, e); + else if (std::holds_alternative<StateEvent<state::Avatar>>(e)) + emit roomAvatarUrlChanged(); + else if (std::holds_alternative<StateEvent<state::Name>>(e)) + emit roomNameChanged(); + else if (std::holds_alternative<StateEvent<state::Topic>>(e)) + emit roomTopicChanged(); + else if (std::holds_alternative<StateEvent<state::Member>>(e)) { + emit roomAvatarUrlChanged(); + emit roomNameChanged(); + } } updateLastMessage(); } @@ -737,12 +767,6 @@ TimelineModel::formatDateSeparator(QDate date) const return date.toString(fmt); } -QString -TimelineModel::escapeEmoji(QString str) const -{ - return utils::replaceEmoji(str); -} - void TimelineModel::viewRawMessage(QString id) const { @@ -1440,7 +1464,7 @@ TimelineModel::formatTypingUsers(const std::vector<QString> &users, QColor bg) QStringList uidWithoutLast; auto formatUser = [this, bg](const QString &user_id) -> QString { - auto uncoloredUsername = escapeEmoji(displayName(user_id)); + auto uncoloredUsername = utils::replaceEmoji(displayName(user_id)); QString prefix = QString("<font color=\"%1\">").arg(manager_->userColor(user_id, bg).name()); @@ -1490,7 +1514,7 @@ TimelineModel::formatJoinRuleEvent(QString id) return ""; QString user = QString::fromStdString(event->sender); - QString name = escapeEmoji(displayName(user)); + QString name = utils::replaceEmoji(displayName(user)); switch (event->content.join_rule) { case mtx::events::state::JoinRule::Public: @@ -1515,7 +1539,7 @@ TimelineModel::formatGuestAccessEvent(QString id) return ""; QString user = QString::fromStdString(event->sender); - QString name = escapeEmoji(displayName(user)); + QString name = utils::replaceEmoji(displayName(user)); switch (event->content.guest_access) { case mtx::events::state::AccessState::CanJoin: @@ -1540,7 +1564,7 @@ TimelineModel::formatHistoryVisibilityEvent(QString id) return ""; QString user = QString::fromStdString(event->sender); - QString name = escapeEmoji(displayName(user)); + QString name = utils::replaceEmoji(displayName(user)); switch (event->content.history_visibility) { case mtx::events::state::Visibility::WorldReadable: @@ -1573,7 +1597,7 @@ TimelineModel::formatPowerLevelEvent(QString id) return ""; QString user = QString::fromStdString(event->sender); - QString name = escapeEmoji(displayName(user)); + QString name = utils::replaceEmoji(displayName(user)); // TODO: power levels rendering is actually a bit complex. work on this later. return tr("%1 has changed the room's permissions.").arg(name); @@ -1602,7 +1626,7 @@ TimelineModel::formatMemberEvent(QString id) } QString user = QString::fromStdString(event->state_key); - QString name = escapeEmoji(displayName(user)); + QString name = utils::replaceEmoji(displayName(user)); QString rendered; // see table https://matrix.org/docs/spec/client_server/latest#m-room-member @@ -1675,3 +1699,37 @@ TimelineModel::formatMemberEvent(QString id) return rendered; } + +QString +TimelineModel::roomName() const +{ + auto info = cache::getRoomInfo({room_id_.toStdString()}); + + if (!info.count(room_id_)) + return ""; + else + return QString::fromStdString(info[room_id_].name); +} + +QString +TimelineModel::roomAvatarUrl() const +{ + auto info = cache::getRoomInfo({room_id_.toStdString()}); + + if (!info.count(room_id_)) + return ""; + else + return QString::fromStdString(info[room_id_].avatar_url); +} + +QString +TimelineModel::roomTopic() const +{ + auto info = cache::getRoomInfo({room_id_.toStdString()}); + + if (!info.count(room_id_)) + return ""; + else + return utils::replaceEmoji(utils::linkifyMessage( + utils::escapeBlacklistedHtml(QString::fromStdString(info[room_id_].topic)))); +} diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h index 61d00df9edf38110792f172842006e204dbff933..3234a20c8160ebb41654df7157263669f3f0c14c 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h @@ -146,6 +146,9 @@ class TimelineModel : public QAbstractListModel Q_PROPERTY(QString reply READ reply WRITE setReply NOTIFY replyChanged RESET resetReply) Q_PROPERTY( bool paginationInProgress READ paginationInProgress NOTIFY paginationInProgressChanged) + Q_PROPERTY(QString roomName READ roomName NOTIFY roomNameChanged) + Q_PROPERTY(QString roomAvatarUrl READ roomAvatarUrl NOTIFY roomAvatarUrlChanged) + Q_PROPERTY(QString roomTopic READ roomTopic NOTIFY roomTopicChanged) public: explicit TimelineModel(TimelineViewManager *manager, @@ -203,7 +206,6 @@ public: Q_INVOKABLE QString formatGuestAccessEvent(QString id); Q_INVOKABLE QString formatPowerLevelEvent(QString id); - Q_INVOKABLE QString escapeEmoji(QString str) const; Q_INVOKABLE void viewRawMessage(QString id) const; Q_INVOKABLE void viewDecryptedRawMessage(QString id) const; Q_INVOKABLE void openUserProfile(QString userid); @@ -226,6 +228,7 @@ public: void updateLastMessage(); void addEvents(const mtx::responses::Timeline &events); + void syncState(const mtx::responses::State &state); template<class T> void sendMessageEvent(const T &content, mtx::events::EventType eventType); RelatedInfo relatedInfo(QString id); @@ -262,6 +265,11 @@ public slots: void setDecryptDescription(bool decrypt) { decryptDescription = decrypt; } void clearTimeline() { events.clearTimeline(); } + QString roomName() const; + QString roomTopic() const; + QString roomAvatarUrl() const; + QString roomId() const { return room_id_; } + private slots: void addPendingMessage(mtx::events::collections::TimelineEvents event); @@ -282,6 +290,10 @@ signals: void addPendingMessageToStore(mtx::events::collections::TimelineEvents event); void updateFlowEventId(std::string event_id); + void roomNameChanged(); + void roomTopicChanged(); + void roomAvatarUrlChanged(); + private: template<typename T> void sendEncryptedMessage(mtx::events::RoomEvent<T> msg, mtx::events::EventType eventType); diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp index 97c119bf754f8ce3267f9f25b0c8d2f9968375ce..03dd47732cd86f64eddb7d5e15e7d7608a8965b7 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp @@ -13,6 +13,7 @@ #include "ColorImageProvider.h" #include "DelegateChooser.h" #include "Logging.h" +#include "MainWindow.h" #include "MatrixClient.h" #include "MxcImageProvider.h" #include "UserSettingsPage.h" @@ -102,7 +103,7 @@ TimelineViewManager::userStatus(QString id) const TimelineViewManager::TimelineViewManager(QSharedPointer<UserSettings> userSettings, CallManager *callManager, - QWidget *parent) + ChatPage *parent) : imgProvider(new MxcImageProvider()) , colorImgProvider(new ColorImageProvider()) , blurhashProvider(new BlurhashProvider()) @@ -189,11 +190,8 @@ TimelineViewManager::TimelineViewManager(QSharedPointer<UserSettings> userSettin view->engine()->addImageProvider("blurhash", blurhashProvider); view->setSource(QUrl("qrc:///qml/TimelineView.qml")); - connect(dynamic_cast<ChatPage *>(parent), - &ChatPage::themeChanged, - this, - &TimelineViewManager::updateColorPalette); - connect(dynamic_cast<ChatPage *>(parent), + connect(parent, &ChatPage::themeChanged, this, &TimelineViewManager::updateColorPalette); + connect(parent, &ChatPage::decryptSidebarChanged, this, &TimelineViewManager::updateEncryptedDescriptions); @@ -295,7 +293,7 @@ TimelineViewManager::TimelineViewManager(QSharedPointer<UserSettings> userSettin } } }); - connect(dynamic_cast<ChatPage *>(parent), &ChatPage::loggedOut, this, [this]() { + connect(parent, &ChatPage::loggedOut, this, [this]() { isInitialSync_ = true; emit initialSyncChanged(true); }); @@ -313,6 +311,7 @@ TimelineViewManager::sync(const mtx::responses::Rooms &rooms) &TimelineModel::newCallEvent, callManager_, &CallManager::syncEvent); + room_model->syncState(room.state); room_model->addEvents(room.timeline); if (!isInitialSync_) disconnect(room_model.data(), @@ -363,6 +362,12 @@ TimelineViewManager::setHistoryView(const QString &room_id) } } +QString +TimelineViewManager::escapeEmoji(QString str) const +{ + return utils::replaceEmoji(str); +} + void TimelineViewManager::openImageOverlay(QString mxcUrl, QString eventId) const { @@ -401,6 +406,28 @@ TimelineViewManager::openLink(QString link) const QDesktopServices::openUrl(link); } +void +TimelineViewManager::openInviteUsersDialog() +{ + MainWindow::instance()->openInviteUsersDialog( + [this](const QStringList &invitees) { emit inviteUsers(invitees); }); +} +void +TimelineViewManager::openMemberListDialog() const +{ + MainWindow::instance()->openMemberListDialog(timeline_->roomId()); +} +void +TimelineViewManager::openLeaveRoomDialog() const +{ + MainWindow::instance()->openLeaveRoomDialog(timeline_->roomId()); +} +void +TimelineViewManager::openRoomSettings() const +{ + MainWindow::instance()->openRoomSettings(timeline_->roomId()); +} + void TimelineViewManager::updateReadReceipts(const QString &room_id, const std::vector<QString> &event_ids) diff --git a/src/timeline/TimelineViewManager.h b/src/timeline/TimelineViewManager.h index 19406872a41a8ac1191eb66a2e25962c18c29859..4779d3cd6599438baa08c04d33aab88c04e31a1a 100644 --- a/src/timeline/TimelineViewManager.h +++ b/src/timeline/TimelineViewManager.h @@ -22,6 +22,7 @@ class BlurhashProvider; class CallManager; class ColorImageProvider; class UserSettings; +class ChatPage; class DeviceVerificationList : public QObject { @@ -45,11 +46,13 @@ class TimelineViewManager : public QObject TimelineModel *timeline MEMBER timeline_ READ activeTimeline NOTIFY activeTimelineChanged) Q_PROPERTY( bool isInitialSync MEMBER isInitialSync_ READ isInitialSync NOTIFY initialSyncChanged) + Q_PROPERTY( + bool isNarrowView MEMBER isNarrowView_ READ isNarrowView NOTIFY narrowViewChanged) public: TimelineViewManager(QSharedPointer<UserSettings> userSettings, CallManager *callManager, - QWidget *parent = nullptr); + ChatPage *parent = nullptr); QWidget *getWidget() const { return container; } void sync(const mtx::responses::Rooms &rooms); @@ -59,14 +62,21 @@ public: Q_INVOKABLE TimelineModel *activeTimeline() const { return timeline_; } Q_INVOKABLE bool isInitialSync() const { return isInitialSync_; } + bool isNarrowView() const { return isNarrowView_; } Q_INVOKABLE void openImageOverlay(QString mxcUrl, QString eventId) const; Q_INVOKABLE QColor userColor(QString id, QColor background); + Q_INVOKABLE QString escapeEmoji(QString str) const; Q_INVOKABLE QString userPresence(QString id) const; Q_INVOKABLE QString userStatus(QString id) const; Q_INVOKABLE void openLink(QString link) const; + Q_INVOKABLE void openInviteUsersDialog(); + Q_INVOKABLE void openMemberListDialog() const; + Q_INVOKABLE void openLeaveRoomDialog() const; + Q_INVOKABLE void openRoomSettings() const; + signals: void clearRoomMessageCount(QString roomid); void updateRoomsLastMessage(QString roomid, const DescInfo &info); @@ -79,6 +89,9 @@ signals: QString userId, QString deviceId, bool isRequest = false); + void inviteUsers(QStringList users); + void showRoomList(); + void narrowViewChanged(); public slots: void updateReadReceipts(const QString &room_id, const std::vector<QString> &event_ids); @@ -128,6 +141,23 @@ public slots: timeline_->clearTimeline(); } + void enableBackButton() + { + if (isNarrowView_) + return; + isNarrowView_ = true; + emit narrowViewChanged(); + } + void disableBackButton() + { + if (!isNarrowView_) + return; + isNarrowView_ = false; + emit narrowViewChanged(); + } + + void backToRooms() { emit showRoomList(); } + private: #ifdef USE_QUICK_VIEW QQuickView *view; @@ -145,6 +175,7 @@ private: CallManager *callManager_ = nullptr; bool isInitialSync_ = true; + bool isNarrowView_ = false; QSharedPointer<UserSettings> settings; QHash<QString, QColor> userColors; diff --git a/third_party/blurhash/blurhash.cpp b/third_party/blurhash/blurhash.cpp index cd0a18a46b23b97d7505a0c9767d495dfab17df9..a4adf89f7acf616e7bf6cc6c08d8bfff2de4e48c 100644 --- a/third_party/blurhash/blurhash.cpp +++ b/third_party/blurhash/blurhash.cpp @@ -260,6 +260,7 @@ decode(std::string_view blurhash, size_t width, size_t height, size_t bytesPerPi Components components{}; std::vector<Color> values; + values.reserve(blurhash.size() / 2); try { components = unpackComponents(decode83(blurhash.substr(0, 1))); @@ -277,7 +278,7 @@ decode(std::string_view blurhash, size_t width, size_t height, size_t bytesPerPi return {}; } - i.image.reserve(height * width * 3); + i.image.reserve(height * width * bytesPerPixel); for (size_t y = 0; y < height; y++) { for (size_t x = 0; x < width; x++) { @@ -344,7 +345,7 @@ encode(unsigned char *image, size_t width, size_t height, int components_x, int } int quantisedMaximumValue = encodeMaxAC(actualMaximumValue); - maximumValue = ((float)quantisedMaximumValue + 1) / 166; + maximumValue = ((float)quantisedMaximumValue + 1) / 166; h += leftPad(encode83(quantisedMaximumValue), 1); } else { maximumValue = 1; @@ -406,7 +407,7 @@ TEST_CASE("AC") { auto h = "00%#MwS|WCWEM{R*bbWBbH"sv; for (size_t i = 0; i < h.size(); i += 2) { - auto s = h.substr(i, 2); + auto s = h.substr(i, 2); const auto maxAC = 0.289157f; CHECK(leftPad(encode83(encodeAC(decodeAC(decode83(s), maxAC), maxAC)), 2) == s); }