mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-25 20:48:52 +03:00
Merge remote-tracking branch 'upstream/master' into webrtc-video
This commit is contained in:
commit
d9ca5309ac
66 changed files with 7987 additions and 2507 deletions
|
@ -340,7 +340,7 @@ if(USE_BUNDLED_MTXCLIENT)
|
|||
FetchContent_Declare(
|
||||
MatrixClient
|
||||
GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
|
||||
GIT_TAG ad5575bc24089dc385e97d9ace026414b618775c
|
||||
GIT_TAG 6432e89a3465e58ed838dd2abdcb0f91bd4f05b0
|
||||
)
|
||||
FetchContent_MakeAvailable(MatrixClient)
|
||||
else()
|
||||
|
|
|
@ -41,6 +41,7 @@ Specifically there is support for:
|
|||
- Basic communities support.
|
||||
- Room switcher (ctrl-K).
|
||||
- Light, Dark & System themes.
|
||||
- Creating separate profiles (command line only, use `--profile=name`).
|
||||
|
||||
## Installation
|
||||
|
||||
|
|
|
@ -146,7 +146,7 @@
|
|||
"name": "mtxclient",
|
||||
"sources": [
|
||||
{
|
||||
"commit": "ad5575bc24089dc385e97d9ace026414b618775c",
|
||||
"commit": "6432e89a3465e58ed838dd2abdcb0f91bd4f05b0",
|
||||
"type": "git",
|
||||
"url": "https://github.com/Nheko-Reborn/mtxclient.git"
|
||||
}
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="cs">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+67"/>
|
||||
<location line="+53"/>
|
||||
<source>Failed to restore OLM account. Please login again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -443,18 +571,18 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -464,7 +592,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -474,41 +602,92 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+19"/>
|
||||
<location line="+29"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-12"/>
|
||||
<location line="-18"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -517,6 +696,24 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -593,10 +790,18 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -656,7 +861,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -697,30 +902,48 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -741,7 +964,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -751,7 +974,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -769,20 +992,19 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -922,12 +1144,12 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -951,17 +1173,17 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -969,63 +1191,74 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1035,25 +1268,20 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<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>
|
||||
|
@ -1111,10 +1339,33 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1134,12 +1385,17 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1277,7 +1533,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1322,7 +1588,7 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1342,22 +1608,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1403,6 +1679,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="de">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Abbrechen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Du bist dem Raum beigetreten.</translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation>Nutzer konnte nicht eingeladen werden: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>Eingeladener Benutzer: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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>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="+415"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation>Raum %1 erzeugt.</translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation>Verbannung von %1 wurde aufgehoben.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation>Medienupload fehlgeschlagen. Bitte versuche es erneut.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation>Cache migration fehlgeschlagen!</translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<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="+67"/>
|
||||
<location line="+53"/>
|
||||
<source>Failed to restore OLM account. Please login again.</source>
|
||||
<translation>Wiederherstellung des OLM Accounts fehlgeschlagen. Bitte logge dich erneut ein.</translation>
|
||||
</message>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation>Bitte melde dich erneut an: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation>Konnte Raum nicht betreten: %1</translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation> (community)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation>Suche</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation>Leute</translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation type="unfinished">Flaggen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation>Verschlüsselt</translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Schließen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -447,18 +575,18 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation>gelöscht</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation>Verschlüsselung aktiviert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation>Raumname wurde gändert auf: %1</translation>
|
||||
</message>
|
||||
|
@ -468,7 +596,7 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<translation>Raumname wurde entfernt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation>Raumthema wurde geändert auf: %1</translation>
|
||||
</message>
|
||||
|
@ -478,41 +606,92 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<translation>Raumthema wurde entfernt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation>%1 hat den Raum erstellt: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+11"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation>%1 hat den Anruf angenommen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation>%1 hat den Anruf beendet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished">Schreibe eine Nachricht…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Abbrechen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished">Akzeptieren</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -521,6 +700,24 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<translation>Unimplementiertes Event: </translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -597,10 +794,18 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<translation>Ungültiger Servername</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Schließen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation>keine Version gespeichert</translation>
|
||||
</message>
|
||||
|
@ -660,7 +865,7 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation>Akzeptieren</translation>
|
||||
</message>
|
||||
|
@ -701,30 +906,48 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation>Fehlgeschlagen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation>Gesendet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation>Empfangen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation>Gelesen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Schließen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation>Versende Datei</translation>
|
||||
</message>
|
||||
|
@ -745,7 +968,7 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<translation>Emoji</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation>Datei auswählen</translation>
|
||||
</message>
|
||||
|
@ -755,7 +978,7 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<translation>Alle Dateien (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -773,20 +996,19 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation>Nachricht zurückziehen fehlgeschlagen: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation>Bild speichern</translation>
|
||||
</message>
|
||||
|
@ -925,12 +1147,12 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<translation>%1 hat das Anklopfen zurückgezogen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Du bist dem Raum beigetreten.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation>Hat das Anklopfen von %1 abgewiesen.</translation>
|
||||
</message>
|
||||
|
@ -954,17 +1176,17 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation>Antworten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation>Optionen</translation>
|
||||
</message>
|
||||
|
@ -972,63 +1194,74 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation>Antworten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation>Lesebestätigungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation>Als gelesen markieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation>Zeige rohen Nachrichteninhalt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation>Zeige rohen, entschlüsselten Nachrichteninhalt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation>Nachricht löschen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation>Speichern unter...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation>Kein Raum geöffnet</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation type="unfinished">Raumoptionen</translation>
|
||||
</message>
|
||||
|
@ -1038,25 +1271,20 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<translation type="unfinished">Benutzer einladen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation type="unfinished">Teilnehmer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation type="unfinished">Raum verlassen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Settings</source>
|
||||
<translation type="unfinished">Einstellungen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+253"/>
|
||||
<source>Close</source>
|
||||
<translation>Schließen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TrayIcon</name>
|
||||
|
@ -1114,10 +1342,33 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Ins Benachrichtigungsfeld minimieren</translation>
|
||||
</message>
|
||||
|
@ -1137,12 +1388,17 @@ Beispiel: https://mein.server:8787</translation>
|
|||
<translation>Runde Profilbilder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1280,7 +1536,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation>Skalierungsfaktor</translation>
|
||||
</message>
|
||||
|
@ -1325,7 +1591,7 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>Gerätefingerabdruck</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation>Sitzungsschlüssel</translation>
|
||||
</message>
|
||||
|
@ -1345,22 +1611,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>VERSCHLÜSSELUNG</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation>ALLGEMEINES</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation>OBERFLÄCHE</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation>Emojischriftart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation>Öffne Sessions Datei</translation>
|
||||
</message>
|
||||
|
@ -1406,6 +1682,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>Datei zum Speichern der zu exportierenden Sitzungsschlüssel</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Abbrechen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="el">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Άκυρο</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+67"/>
|
||||
<location line="+53"/>
|
||||
<source>Failed to restore OLM account. Please login again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation type="unfinished">Σημαίες</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -443,18 +571,18 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -464,7 +592,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -474,41 +602,92 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+11"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished">Γράψε ένα μήνυμα...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Άκυρο</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished">Αποδοχή</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -517,6 +696,24 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -593,10 +790,18 @@ Example: https://server.my:8787</source>
|
|||
<translation>Λανθασμένο όνομα διακομιστή</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -656,7 +861,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation>Αποδοχή</translation>
|
||||
</message>
|
||||
|
@ -697,30 +902,48 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -741,7 +964,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation>Διάλεξε ένα αρχείο</translation>
|
||||
</message>
|
||||
|
@ -751,7 +974,7 @@ Example: https://server.my:8787</source>
|
|||
<translation>Όλα τα αρχεία (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -769,20 +992,19 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished">Αποθήκευση Εικόνας</translation>
|
||||
</message>
|
||||
|
@ -921,12 +1143,12 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -950,17 +1172,17 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -968,63 +1190,74 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1034,25 +1267,20 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished">Προσκάλεσε χρήστες</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation type="unfinished">Μέλη</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation type="unfinished">Βγές</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<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>
|
||||
|
@ -1110,10 +1338,33 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Ελαχιστοποίηση</translation>
|
||||
</message>
|
||||
|
@ -1133,12 +1384,17 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1276,7 +1532,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1321,7 +1587,7 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1341,22 +1607,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation>ΓΕΝΙΚΑ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1402,6 +1678,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Άκυρο</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="en">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation>Initiating…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation>Calling…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation>Connecting…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation>Unmute Mic</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation>Mute Mic</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation>Awaiting Confirmation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation>Waiting for other side to complete verification.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Cancel</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>You joined this room.</translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation>Failed to invite user: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>Invited user: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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="+415"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation>Room %1 created.</translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation>Unbanned user: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation>Failed to upload media. Please try again.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation>Cache migration failed!</translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<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="+67"/>
|
||||
<location line="+53"/>
|
||||
<source>Failed to restore OLM account. Please login again.</source>
|
||||
<translation>Failed to restore OLM account. Please login again.</translation>
|
||||
</message>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation>Please try to login again: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation>Failed to join room: %1</translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation> (community)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation>Verification Code</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation>They do not match!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation>They match!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation>Search</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation>People</translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation>Flags</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation>Verification Code</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation>They do not match!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation>They match!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation>Encrypted</translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation>-- Message by unverified device! --</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation>Verification failed</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation>Other client does not support our verification protocol.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation>Key mismatch detected!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation>Device verification timed out.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation>Other party canceled the verification.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation>Close</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -447,18 +575,18 @@ Example: https://server.my:8787</translation>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation>redacted</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation>Encryption enabled</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation>room name changed to: %1</translation>
|
||||
</message>
|
||||
|
@ -468,7 +596,7 @@ Example: https://server.my:8787</translation>
|
|||
<translation>removed room name</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation>topic changed to: %1</translation>
|
||||
</message>
|
||||
|
@ -478,41 +606,92 @@ Example: https://server.my:8787</translation>
|
|||
<translation>removed topic</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation>%1 created and configured room: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation>%1 placed a voice call.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation>%1 placed a video call.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation>%1 placed a call.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+19"/>
|
||||
<location line="+29"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation>Negotiating call…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-12"/>
|
||||
<location line="-18"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation>%1 answered the call.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation>%1 ended the call.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation>Write a message…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation>Send Device Verification Request</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation>Received Device Verification Request</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation>The device was requested to be verified.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Cancel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation>Deny</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation>Start verification</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation>Accept</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -521,6 +700,24 @@ Example: https://server.my:8787</translation>
|
|||
<translation>unimplemented event: </translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation>profile</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation>profile name</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -597,10 +794,18 @@ Example: https://server.my:8787</translation>
|
|||
<translation>Invalid server name</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation>Close</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation>no version stored</translation>
|
||||
</message>
|
||||
|
@ -660,7 +865,7 @@ Example: https://server.my:8787</translation>
|
|||
<translation>Tag:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation>Accept</translation>
|
||||
</message>
|
||||
|
@ -701,30 +906,48 @@ Example: https://server.my:8787</translation>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation>Failed</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation>Sent</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation>Received</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation>Read</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation>Successful Verification</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation>Verification successful! Both sides verified their devices!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation>Close</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation>Send a file</translation>
|
||||
</message>
|
||||
|
@ -745,7 +968,7 @@ Example: https://server.my:8787</translation>
|
|||
<translation>Emoji</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation>Select a file</translation>
|
||||
</message>
|
||||
|
@ -755,7 +978,7 @@ Example: https://server.my:8787</translation>
|
|||
<translation>All Files (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation>Place a call</translation>
|
||||
</message>
|
||||
|
@ -773,20 +996,19 @@ Example: https://server.my:8787</translation>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation>Message redaction failed: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation>Failed to encrypt event, sending aborted!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation>Save image</translation>
|
||||
</message>
|
||||
|
@ -925,12 +1147,12 @@ Example: https://server.my:8787</translation>
|
|||
<translation>%1 redacted their knock.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>You joined this room.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation>Rejected the knock from %1.</translation>
|
||||
</message>
|
||||
|
@ -954,17 +1176,17 @@ Example: https://server.my:8787</translation>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation>React</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation>Reply</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation>Options</translation>
|
||||
</message>
|
||||
|
@ -972,63 +1194,74 @@ Example: https://server.my:8787</translation>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation>React</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation>Reply</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation>Read receipts</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation>Mark as read</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation>View raw message</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation>View decrypted raw message</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation>Redact message</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation>Save as</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation>No room open</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation>No shared room with this user found. Create an encrypted room with this user and try again.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation>Back to room list</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation>No room selected</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation>Room options</translation>
|
||||
</message>
|
||||
|
@ -1038,25 +1271,20 @@ Example: https://server.my:8787</translation>
|
|||
<translation>Invite users</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation>Members</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation>Leave room</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Settings</source>
|
||||
<translation>Settings</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+253"/>
|
||||
<source>Close</source>
|
||||
<translation>Close</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TrayIcon</name>
|
||||
|
@ -1114,10 +1342,33 @@ Example: https://server.my:8787</translation>
|
|||
<translation>Offline</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation>Verify</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation>Ban the user</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation>Start a private chat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation>Kick the user</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Minimize to tray</translation>
|
||||
</message>
|
||||
|
@ -1137,12 +1388,17 @@ Example: https://server.my:8787</translation>
|
|||
<translation>Circular Avatars</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation>profile: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation>CALLS</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation>Keep the application running in the background after closing the client window.</translation>
|
||||
</message>
|
||||
|
@ -1288,7 +1544,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>Make font size larger if messages with only a few emojis are displayed.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation>Mobile mode</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation>Will prevent text selection in the timeline to make scrolling easier.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation>Scale factor</translation>
|
||||
</message>
|
||||
|
@ -1333,7 +1599,7 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>Device Fingerprint</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation>Session Keys</translation>
|
||||
</message>
|
||||
|
@ -1353,22 +1619,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>ENCRYPTION</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation>GENERAL</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation>INTERFACE</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation>Emoji Font Family</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation>Share keys with trusted users</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation>Automatically replies to key requests from other users, if they are verified.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation>Open Sessions File</translation>
|
||||
</message>
|
||||
|
@ -1414,6 +1690,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>File to save the exported session keys</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation>Waiting for other party…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation>Waiting for other side to accept the verification request…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation>Waiting for other side to continue the verification request…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation>Waiting for other side to complete the verification request…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Cancel</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="eo">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Vi aliĝis ĉi tiun ĉambron.</translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translatorcomment>I believe that the -at ending is correct here.</translatorcomment>
|
||||
<translation>Ĉambro %1 farit.</translation>
|
||||
|
@ -109,12 +155,12 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -129,7 +175,7 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+67"/>
|
||||
<location line="+53"/>
|
||||
<source>Failed to restore OLM account. Please login again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -145,12 +191,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -210,6 +256,29 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -236,13 +305,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation>Trovu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation>Homoj</translation>
|
||||
</message>
|
||||
|
@ -282,10 +351,33 @@
|
|||
<translation>Flagoj</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -298,25 +390,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -332,6 +426,40 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -448,18 +576,18 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation>Nomo da ĉambro ŝanĝiĝis al: %1</translation>
|
||||
</message>
|
||||
|
@ -469,7 +597,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -479,41 +607,92 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+11"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished">Skribu mesaĝon...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -522,6 +701,24 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -570,7 +767,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<message>
|
||||
<location line="+17"/>
|
||||
<source>REGISTER</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">REGISTRU</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+55"/>
|
||||
|
@ -598,10 +795,18 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -662,7 +867,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -704,31 +909,49 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation>Estas malsukcesa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation>Estas sendita</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation>Estas ricevita</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translatorcomment>Could this simply be "lega"?</translatorcomment>
|
||||
<translation>Estas lega</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation>Sendu dosieron</translation>
|
||||
</message>
|
||||
|
@ -749,7 +972,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -759,7 +982,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<translation>Ĉiuj dosieroj (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -777,20 +1000,19 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -931,12 +1153,12 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Vi aliĝis ĉi tiun ĉambron.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -960,17 +1182,17 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation>Reagu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation>Respondu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation>Ebloj</translation>
|
||||
</message>
|
||||
|
@ -978,63 +1200,74 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation>Reagu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation>Respondu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1044,24 +1277,19 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation>Membroj</translation>
|
||||
<translation type="unfinished">Membroj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation>Forlasu la ĉambron</translation>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Settings</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+253"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation type="unfinished">Agordoj</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -1120,10 +1348,33 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1143,12 +1394,17 @@ Ekzemplo: https://servisto.mia:8787</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1286,7 +1542,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1331,7 +1597,7 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1351,22 +1617,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1412,6 +1688,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="et">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Sa liitusid selle jututoaga.</translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation>Kutse saatmine kasutajale ei õnnestunud: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>Kutsutud kasutaja: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation>%1 jututuba on loodud.</translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation>Suhtluskeeld eemaldatud: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation>Meediafailide üleslaadimine ei õnnestunud. Palun proovi uuesti.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation>Puhvri versiooniuuendus ebaõnnestus!</translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<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"/>
|
||||
<location line="+53"/>
|
||||
<source>Failed to restore OLM account. Please login again.</source>
|
||||
<translation>OLM konto taastamine ei õnnestunud. Palun logi uuesti sisse.</translation>
|
||||
</message>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation>Palun proovi uuesti sisse logida: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation>Jututoaga liitumine ei õnnestunud: %1</translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation> (kogukond)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation>Otsi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation>Inimesed</translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation>Lipud</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation>Krüptitud</translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation>-- Sõnum verifitseerimata seadmest! --</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation>Sulge</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -447,18 +575,18 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation>muudetud</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation>Krüptimine on kasutusel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation>jututoa uus nimi on: %1</translation>
|
||||
</message>
|
||||
|
@ -468,7 +596,7 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<translation>eemaldas jututoa nime</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation>jututoa uus teema on: %1</translation>
|
||||
</message>
|
||||
|
@ -478,41 +606,92 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<translation>teema on eemaldatud</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation>%1 lõi ja seadistas jututoa: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation>%1 helistas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation>%1 alustas videokõnet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation>%1 helistas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+19"/>
|
||||
<location line="+29"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation>Ühendan kõnet…</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-12"/>
|
||||
<location line="-18"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation>%1 vastas kõnele.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation>%1 lõpetas kõne.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished">Kirjuta sõnum…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation>Nõustu</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -521,6 +700,24 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<translation>implementeerimata sündmus: </translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -597,10 +794,18 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<translation>Vigane koduserveri nimi</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Sulge</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation>salvestatud versiooni ei leidu</translation>
|
||||
</message>
|
||||
|
@ -660,7 +865,7 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<translation>Silt:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation>Nõustu</translation>
|
||||
</message>
|
||||
|
@ -701,30 +906,48 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation>Ebaõnnestus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation>Saadetud</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation>Vastuvõetud</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation>Loetud</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation>Sulge</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation>Saada fail</translation>
|
||||
</message>
|
||||
|
@ -745,7 +968,7 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<translation>Emoji</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation>Vali fail</translation>
|
||||
</message>
|
||||
|
@ -755,7 +978,7 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<translation>Kõik failid (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation>Helista</translation>
|
||||
</message>
|
||||
|
@ -773,20 +996,19 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<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="+130"/>
|
||||
<location line="+8"/>
|
||||
<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"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation>Salvesta pilt</translation>
|
||||
</message>
|
||||
|
@ -925,12 +1147,12 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<translation>%1 muutis oma koputust jututoa uksele.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Sa liitusid jututoaga.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation>Lükkas tagasi %1 koputuse jututoa uksele.</translation>
|
||||
</message>
|
||||
|
@ -954,17 +1176,17 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation>Reageeri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation>Vasta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation>Valikud</translation>
|
||||
</message>
|
||||
|
@ -972,90 +1194,96 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation>Reageeri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation>Vasta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation>Lugemisteatised</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation>Märgi loetuks</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation>Näita sõnumi lähtekoodi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation>Näita sõnumi dekrüptitud lähtekoodi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation>Muuda sõnumit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation>Salvesta kui</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation>Ühtegi jututuba pole avatud</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation>Tagasi jututubade loendisse</translation>
|
||||
<translation type="unfinished">Tagasi jututubade loendisse</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation>Jututuba on valimata</translation>
|
||||
<translation type="unfinished">Jututuba on valimata</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation>Jututoa valikud</translation>
|
||||
<translation type="unfinished">Jututoa valikud</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Invite users</source>
|
||||
<translation>Kutsu kasutajaid</translation>
|
||||
<translation type="unfinished">Kutsu kasutajaid</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation>Liikmed</translation>
|
||||
<translation type="unfinished">Liikmed</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation>Lahku jututoast</translation>
|
||||
<translation type="unfinished">Lahku jututoast</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Settings</source>
|
||||
<translation>Seadistused</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+253"/>
|
||||
<source>Close</source>
|
||||
<translation>Sulge</translation>
|
||||
<translation type="unfinished">Seadistused</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -1114,10 +1342,33 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<translation>Pole võrgus</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Vähenda tegumiribale</translation>
|
||||
</message>
|
||||
|
@ -1137,12 +1388,17 @@ Näiteks: https://server.minu:8787</translation>
|
|||
<translation>Ümmargused tunnuspildid</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation>KÕNED</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<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>
|
||||
|
@ -1288,7 +1544,17 @@ See tavaliselt tähendab, et rakenduse ikoon tegumiribal annab mingit sorti anim
|
|||
<translation>Tee sõnumi font suuremaks, kui sõnumis on vaid mõned emojid.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation>Mastaabitegur</translation>
|
||||
</message>
|
||||
|
@ -1333,7 +1599,7 @@ See tavaliselt tähendab, et rakenduse ikoon tegumiribal annab mingit sorti anim
|
|||
<translation>Seadme sõrmejälg</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation>Sessioonivõtmed</translation>
|
||||
</message>
|
||||
|
@ -1353,22 +1619,32 @@ See tavaliselt tähendab, et rakenduse ikoon tegumiribal annab mingit sorti anim
|
|||
<translation>KRÜPTIMINE</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation>ÜLDISED SEADISTUSED</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation>LIIDES</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation>Fondiperekond emojide jaoks</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation>Ava sessioonide fail</translation>
|
||||
</message>
|
||||
|
@ -1414,6 +1690,34 @@ See tavaliselt tähendab, et rakenduse ikoon tegumiribal annab mingit sorti anim
|
|||
<translation>Fail, kuhu salvestad eksporditavad sessiooni krüptovõtmed</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Tühista</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="fi">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Peruuta</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+67"/>
|
||||
<location line="+53"/>
|
||||
<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>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation>Ole hyvä ja yritä kirjautua sisään uudelleen: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation> (community)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation type="unfinished">Liput</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Sulje</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -443,18 +571,18 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -464,7 +592,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -474,41 +602,92 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+11"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished">Kirjoita viesti…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Peruuta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished">Hyväksy</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -517,6 +696,24 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -593,10 +790,18 @@ Example: https://server.my:8787</source>
|
|||
<translation>Epäkelpo palvelimen nimi</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Sulje</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation>ei tallennettua versiota</translation>
|
||||
</message>
|
||||
|
@ -656,7 +861,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation>Hyväksy</translation>
|
||||
</message>
|
||||
|
@ -697,30 +902,48 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Sulje</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation>Lähetä tiedosto</translation>
|
||||
</message>
|
||||
|
@ -741,7 +964,7 @@ Example: https://server.my:8787</source>
|
|||
<translation>Emoji</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation>Valitse tiedosto</translation>
|
||||
</message>
|
||||
|
@ -751,7 +974,7 @@ Example: https://server.my:8787</source>
|
|||
<translation>Kaikki tiedostot (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -769,20 +992,19 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished">Viestin poisto epäonnistui: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished">Tallenna kuva</translation>
|
||||
</message>
|
||||
|
@ -921,12 +1143,12 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -950,17 +1172,17 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -968,63 +1190,74 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation type="unfinished">Lukukuittaukset</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation type="unfinished">Huonevaihtoehdot</translation>
|
||||
</message>
|
||||
|
@ -1034,25 +1267,20 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished">Kutsu käyttäjiä</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation type="unfinished">Jäsenet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation type="unfinished">Poistu huoneesta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Settings</source>
|
||||
<translation type="unfinished">Asetukset</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+253"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Sulje</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TrayIcon</name>
|
||||
|
@ -1110,10 +1338,33 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Pienennä ilmoitusalueelle</translation>
|
||||
</message>
|
||||
|
@ -1133,12 +1384,17 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1276,7 +1532,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation>Mittakerroin</translation>
|
||||
</message>
|
||||
|
@ -1321,7 +1587,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="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation>Istunnon avaimet</translation>
|
||||
</message>
|
||||
|
@ -1341,22 +1607,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>SALAUS</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation>YLEISET ASETUKSET</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation>Avaa Istuntoavaintiedosto</translation>
|
||||
</message>
|
||||
|
@ -1402,6 +1678,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>Tiedosto, johon viedyt istuntoavaimet tallennetaan</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Peruuta</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="it">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Annulla</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Sei entrato in questa stanza.</translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation>Impossibile invitare l'utente: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>Invitato utente: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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="+415"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation>Stanza %1 creata.</translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation>Rimosso il ban dall'utente: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation>Impossibile inviare il file multimediale. Per favore riprova.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation>Migrazione della cache fallita!</translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<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="+67"/>
|
||||
<location line="+53"/>
|
||||
<source>Failed to restore OLM account. Please login again.</source>
|
||||
<translation>Impossibile ripristinare l'account OLM. Per favore accedi nuovamente.</translation>
|
||||
</message>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation>Per favore prova ad accedere nuovamente: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation>Impossibile accedere alla stanza: %1</translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation> (comunità)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation type="unfinished">Bandiere</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation>Criptato</translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Chiudi</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -447,18 +575,18 @@ Esempio: https://server.mio:8787</translation>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation>oscurato</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation>Crittografia abilitata</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation>nome della stanza cambiato in: %1</translation>
|
||||
</message>
|
||||
|
@ -468,7 +596,7 @@ Esempio: https://server.mio:8787</translation>
|
|||
<translation>nome della stanza rimosso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation>argomento cambiato in: %1</translation>
|
||||
</message>
|
||||
|
@ -478,41 +606,92 @@ Esempio: https://server.mio:8787</translation>
|
|||
<translation>argomento rimosso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation>%1 creato e configurata stanza: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+11"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished">Scrivi un messaggio…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Annulla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished">Accetta</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -521,6 +700,24 @@ Esempio: https://server.mio:8787</translation>
|
|||
<translation> event non implementato:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -597,10 +794,18 @@ Esempio: https://server.mio:8787</translation>
|
|||
<translation>Nome del server non valido</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Chiudi</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation>nessuna versione memorizzata</translation>
|
||||
</message>
|
||||
|
@ -660,7 +865,7 @@ Esempio: https://server.mio:8787</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation>Accetta</translation>
|
||||
</message>
|
||||
|
@ -701,30 +906,48 @@ Esempio: https://server.mio:8787</translation>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation>Fallito</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation>Inviato</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation>Ricevuto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation>Letto</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Chiudi</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation>Invia un file</translation>
|
||||
</message>
|
||||
|
@ -745,7 +968,7 @@ Esempio: https://server.mio:8787</translation>
|
|||
<translation>Emoji</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation>Seleziona un file</translation>
|
||||
</message>
|
||||
|
@ -755,7 +978,7 @@ Esempio: https://server.mio:8787</translation>
|
|||
<translation>Tutti i file (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -773,20 +996,19 @@ Esempio: https://server.mio:8787</translation>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation>Oscuramento del messaggio fallito: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation>Salva immagine</translation>
|
||||
</message>
|
||||
|
@ -925,12 +1147,12 @@ Esempio: https://server.mio:8787</translation>
|
|||
<translation>%1 ha oscurato la sua bussata.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation>Sei entrato in questa stanza.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation>Rifiutata la bussata di %1.</translation>
|
||||
</message>
|
||||
|
@ -954,17 +1176,17 @@ Esempio: https://server.mio:8787</translation>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation>Rispondi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation>Opzioni</translation>
|
||||
</message>
|
||||
|
@ -972,63 +1194,74 @@ Esempio: https://server.mio:8787</translation>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation>Risposta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation>Leggi le ricevute</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation>Segna come letto</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation>Mostra il messaggio grezzo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation>Mostra il messaggio grezzo decriptato</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation>Oscura messaggio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation>Salva come</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation>Nessuna stanza aperta</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation type="unfinished">Opzioni della stanza</translation>
|
||||
</message>
|
||||
|
@ -1038,25 +1271,20 @@ Esempio: https://server.mio:8787</translation>
|
|||
<translation type="unfinished">Invita utenti</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation type="unfinished">Membri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation type="unfinished">Lascia la stanza</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Settings</source>
|
||||
<translation type="unfinished">Impostazioni</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+253"/>
|
||||
<source>Close</source>
|
||||
<translation>Chiudi</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TrayIcon</name>
|
||||
|
@ -1114,10 +1342,33 @@ Esempio: https://server.mio:8787</translation>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Minimizza nella tray</translation>
|
||||
</message>
|
||||
|
@ -1137,12 +1388,17 @@ Esempio: https://server.mio:8787</translation>
|
|||
<translation>Avatar Circolari</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1280,7 +1536,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation>Fattore di scala</translation>
|
||||
</message>
|
||||
|
@ -1325,7 +1591,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="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation>Chiavi di Sessione</translation>
|
||||
</message>
|
||||
|
@ -1345,22 +1611,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>CRITTOGRAFIA</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation>GENERALE</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation>INTERFACCIA</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation>Famiglia dei caratteri delle Emoji</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation>Apri File delle Sessioni</translation>
|
||||
</message>
|
||||
|
@ -1406,6 +1682,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>File ove salvare le chiavi di sessione esportate</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Annulla</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="ja_JP">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">キャンセル</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation>ユーザーを招待できませんでした: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation>招待されたユーザー: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation>永久追放を解除されたユーザー: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation>メディアをアップロードできませんでした。やり直して下さい。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+67"/>
|
||||
<location line="+53"/>
|
||||
<source>Failed to restore OLM account. Please login again.</source>
|
||||
<translation>OLMアカウントを復元できませんでした。もう一度ログインして下さい。</translation>
|
||||
</message>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation>もう一度ログインしてみて下さい: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation>部屋に参加できませんでした: %1</translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation> (コミュニティー)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation type="unfinished">旗</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation>暗号化されています</translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">閉じる</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -443,18 +571,18 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation>編集済み</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation>暗号化が有効です</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation>部屋名が変更されました: %1</translation>
|
||||
</message>
|
||||
|
@ -464,7 +592,7 @@ Example: https://server.my:8787</source>
|
|||
<translation>部屋名が削除されました</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation>話題が変更されました: %1</translation>
|
||||
</message>
|
||||
|
@ -474,41 +602,92 @@ Example: https://server.my:8787</source>
|
|||
<translation>話題が削除されました</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+11"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished">メッセージを書く...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">キャンセル</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished">容認</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -517,6 +696,24 @@ Example: https://server.my:8787</source>
|
|||
<translation>未実装のイベント: </translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -593,10 +790,18 @@ Example: https://server.my:8787</source>
|
|||
<translation>無効なサーバー名です</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">閉じる</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation>バージョンが保存されていません</translation>
|
||||
</message>
|
||||
|
@ -656,7 +861,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation>容認</translation>
|
||||
</message>
|
||||
|
@ -697,30 +902,48 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation>失敗</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation>送信済み</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation>受信済み</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation>既読</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">閉じる</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation>ファイルを送信</translation>
|
||||
</message>
|
||||
|
@ -741,7 +964,7 @@ Example: https://server.my:8787</source>
|
|||
<translation>絵文字</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation>ファイルを選択</translation>
|
||||
</message>
|
||||
|
@ -751,7 +974,7 @@ Example: https://server.my:8787</source>
|
|||
<translation>全てのファイル (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -769,20 +992,19 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation>メッセージを編集できませんでした: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation>画像を保存</translation>
|
||||
</message>
|
||||
|
@ -920,12 +1142,12 @@ Example: https://server.my:8787</source>
|
|||
<translation>%1がノックを編集しました。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation>%1からのノックを拒否しました。</translation>
|
||||
</message>
|
||||
|
@ -949,17 +1171,17 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation>返信</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation>オプション</translation>
|
||||
</message>
|
||||
|
@ -967,63 +1189,74 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished">返信</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation>開封確認</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation>既読にする</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation>ソースを見る</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation>メッセージを編集</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation>名前を付けて保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation>部屋が開いていません</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation type="unfinished">部屋のオプション</translation>
|
||||
</message>
|
||||
|
@ -1033,25 +1266,20 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished">ユーザーを招待</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation type="unfinished">メンバー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation type="unfinished">部屋を出る</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Settings</source>
|
||||
<translation type="unfinished">設定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+253"/>
|
||||
<source>Close</source>
|
||||
<translation>閉じる</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TrayIcon</name>
|
||||
|
@ -1109,10 +1337,33 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>トレイへ最小化</translation>
|
||||
</message>
|
||||
|
@ -1132,12 +1383,17 @@ Example: https://server.my:8787</source>
|
|||
<translation>円形アバター</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1275,7 +1531,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation>尺度係数</translation>
|
||||
</message>
|
||||
|
@ -1320,7 +1586,7 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>デバイスの指紋</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation>セッション鍵</translation>
|
||||
</message>
|
||||
|
@ -1340,22 +1606,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>暗号化</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation>全般</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation>セッションファイルを開く</translation>
|
||||
</message>
|
||||
|
@ -1401,6 +1677,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>エクスポートされたセッション鍵を保存するファイル</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">キャンセル</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="nl_NL">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Annuleren</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+67"/>
|
||||
<location line="+53"/>
|
||||
<source>Failed to restore OLM account. Please login again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation type="unfinished">Vlaggen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -443,18 +571,18 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -464,7 +592,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -474,41 +602,92 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+11"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished">Typ een bericht...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Annuleren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished">Accepteren</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -517,6 +696,24 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -593,10 +790,18 @@ Example: https://server.my:8787</source>
|
|||
<translation>Ongeldige servernaam</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -656,7 +861,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation>Accepteren</translation>
|
||||
</message>
|
||||
|
@ -697,30 +902,48 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -741,7 +964,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation>Kies een bestand</translation>
|
||||
</message>
|
||||
|
@ -751,7 +974,7 @@ Example: https://server.my:8787</source>
|
|||
<translation>Alle bestanden (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -769,20 +992,19 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished">Afbeelding opslaan</translation>
|
||||
</message>
|
||||
|
@ -921,12 +1143,12 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -950,17 +1172,17 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -968,63 +1190,74 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation type="unfinished">Leesbevestigingen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1034,25 +1267,20 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished">Gebruikers uitnodigen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation type="unfinished">Leden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation type="unfinished">Kamer verlaten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Settings</source>
|
||||
<translation type="unfinished">Instellingen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+253"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TrayIcon</name>
|
||||
|
@ -1110,10 +1338,33 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Minimaliseren naar systeemvak</translation>
|
||||
</message>
|
||||
|
@ -1133,12 +1384,17 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1276,7 +1532,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1321,7 +1587,7 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1341,22 +1607,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation>ALGEMEEN</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1402,6 +1678,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Annuleren</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="pl">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Anuluj</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+67"/>
|
||||
<location line="+53"/>
|
||||
<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>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation>Spróbuj zalogować się ponownie: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation type="unfinished">Flagi</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -443,18 +571,18 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -464,7 +592,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -474,41 +602,92 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+11"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished">Napisz wiadomość…</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Anuluj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished">Akceptuj</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -517,6 +696,24 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -593,10 +790,18 @@ Example: https://server.my:8787</source>
|
|||
<translation>Nieprawidłowa nazwa serwera</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -656,7 +861,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation>Akceptuj</translation>
|
||||
</message>
|
||||
|
@ -697,30 +902,48 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation>Wyślij plik</translation>
|
||||
</message>
|
||||
|
@ -741,7 +964,7 @@ Example: https://server.my:8787</source>
|
|||
<translation>Emoji</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation>Wybierz plik</translation>
|
||||
</message>
|
||||
|
@ -751,7 +974,7 @@ Example: https://server.my:8787</source>
|
|||
<translation>Wszystkie pliki (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -769,20 +992,19 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished">Redagowanie wiadomości nie powiodło się: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished">Zapisz obraz</translation>
|
||||
</message>
|
||||
|
@ -922,12 +1144,12 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -951,17 +1173,17 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -969,63 +1191,74 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation type="unfinished">Potwierdzenia przeczytania</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation type="unfinished">Ustawienia pokoju</translation>
|
||||
</message>
|
||||
|
@ -1035,25 +1268,20 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished">Zaproś użytkowników</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation type="unfinished">Członkowie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation type="unfinished">Opuść pokój</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Settings</source>
|
||||
<translation type="unfinished">Ustawienia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+253"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TrayIcon</name>
|
||||
|
@ -1111,10 +1339,33 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Zminimalizuj do paska zadań</translation>
|
||||
</message>
|
||||
|
@ -1134,12 +1385,17 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1277,7 +1533,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1322,7 +1588,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="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1342,22 +1608,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>SZYFROWANIE</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation>OGÓLNE</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1403,6 +1679,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Anuluj</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="pt_PT">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+67"/>
|
||||
<location line="+53"/>
|
||||
<source>Failed to restore OLM account. Please login again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -443,18 +571,18 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -464,7 +592,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -474,41 +602,92 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+19"/>
|
||||
<location line="+29"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-12"/>
|
||||
<location line="-18"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -517,6 +696,24 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -593,10 +790,18 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -656,7 +861,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -697,30 +902,48 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -741,7 +964,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -751,7 +974,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -769,20 +992,19 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -921,12 +1143,12 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -950,17 +1172,17 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -968,63 +1190,74 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1034,25 +1267,20 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<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>
|
||||
|
@ -1110,10 +1338,33 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1133,12 +1384,17 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1276,7 +1532,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1321,7 +1587,7 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1341,22 +1607,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1402,6 +1678,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="ro">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+67"/>
|
||||
<location line="+53"/>
|
||||
<source>Failed to restore OLM account. Please login again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -443,18 +571,18 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -464,7 +592,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -474,41 +602,92 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+11"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -517,6 +696,24 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -593,10 +790,18 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -656,7 +861,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -697,30 +902,48 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -741,7 +964,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -751,7 +974,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -769,20 +992,19 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -922,12 +1144,12 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -951,17 +1173,17 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -969,63 +1191,74 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1035,25 +1268,20 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<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>
|
||||
|
@ -1111,10 +1339,33 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1134,12 +1385,17 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1277,7 +1533,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1322,7 +1588,7 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1342,22 +1608,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1403,6 +1679,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="ru">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+67"/>
|
||||
<location line="+53"/>
|
||||
<source>Failed to restore OLM account. Please login again.</source>
|
||||
<translation>Не удалось восстановить учетную запись OLM. Пожалуйста, войдите снова.</translation>
|
||||
</message>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation>Повторите попытку входа: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation> (сообщество)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Закрыть</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -443,18 +571,18 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -464,7 +592,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -474,41 +602,92 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+11"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished">Написать сообщение...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished">Принять</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -517,6 +696,24 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -593,10 +790,18 @@ Example: https://server.my:8787</source>
|
|||
<translation>Неверное имя сервера</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Закрыть</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -656,7 +861,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation>Принять</translation>
|
||||
</message>
|
||||
|
@ -697,30 +902,48 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished">Закрыть</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation>Отправить файл</translation>
|
||||
</message>
|
||||
|
@ -741,7 +964,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation>Выберите файл</translation>
|
||||
</message>
|
||||
|
@ -751,7 +974,7 @@ Example: https://server.my:8787</source>
|
|||
<translation>Все файлы (*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -769,20 +992,19 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished">Ошибка редактирования сообщения: %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished">Сохранить изображение</translation>
|
||||
</message>
|
||||
|
@ -922,12 +1144,12 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -951,17 +1173,17 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -969,63 +1191,74 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation type="unfinished">Подтверждать прочтение</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation type="unfinished">Настройки комнаты</translation>
|
||||
</message>
|
||||
|
@ -1035,25 +1268,20 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished">Пригласить пользователей</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation type="unfinished">Участники</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation type="unfinished">Покинуть комнату</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<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>
|
||||
|
@ -1111,10 +1339,33 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>Сворачивать в системную панель</translation>
|
||||
</message>
|
||||
|
@ -1134,12 +1385,17 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1277,7 +1533,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation>Масштаб</translation>
|
||||
</message>
|
||||
|
@ -1322,7 +1588,7 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>Отпечаток устройства</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation>Ключи сеанса</translation>
|
||||
</message>
|
||||
|
@ -1342,22 +1608,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>ШИФРОВАНИЕ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation>ГЛАВНОЕ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation>Открыть файл сеансов</translation>
|
||||
</message>
|
||||
|
@ -1404,6 +1680,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>Файл для сохранения экспортированных ключей сеанса</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="si">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+67"/>
|
||||
<location line="+53"/>
|
||||
<source>Failed to restore OLM account. Please login again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -443,18 +571,18 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -464,7 +592,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -474,41 +602,92 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+11"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -517,6 +696,24 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -593,10 +790,18 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -656,7 +861,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -697,30 +902,48 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -741,7 +964,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -751,7 +974,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -769,20 +992,19 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -921,12 +1143,12 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -950,17 +1172,17 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -968,63 +1190,74 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1034,25 +1267,20 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<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>
|
||||
|
@ -1110,10 +1338,33 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1133,12 +1384,17 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1276,7 +1532,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1321,7 +1587,7 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1341,22 +1607,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1402,6 +1678,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -1,10 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="zh_CN">
|
||||
<context>
|
||||
<name>ActiveCallBar</name>
|
||||
<message>
|
||||
<location filename="../qml/ActiveCallBar.qml" line="+49"/>
|
||||
<source>Initiating...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Calling...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>Connecting...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+48"/>
|
||||
<source>Unmute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Mute Mic</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AwaitingVerificationConfirmation</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+7"/>
|
||||
<source>Awaiting Confirmation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Waiting for other side to complete verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">取消</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Cache</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1658"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1843"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -12,23 +58,23 @@
|
|||
<context>
|
||||
<name>ChatPage</name>
|
||||
<message>
|
||||
<location filename="../../src/ChatPage.cpp" line="+218"/>
|
||||
<location filename="../../src/ChatPage.cpp" line="+217"/>
|
||||
<source>Failed to invite user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+947"/>
|
||||
<location line="+931"/>
|
||||
<source>Invited user: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-458"/>
|
||||
<location line="-444"/>
|
||||
<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"/>
|
||||
<location line="+401"/>
|
||||
<source>Room %1 created.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -108,12 +154,12 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-874"/>
|
||||
<location line="-858"/>
|
||||
<source>Failed to upload media. Please try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+334"/>
|
||||
<location line="+332"/>
|
||||
<source>Cache migration failed!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -128,7 +174,7 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+67"/>
|
||||
<location line="+53"/>
|
||||
<source>Failed to restore OLM account. Please login again.</source>
|
||||
<translation>恢复 OLM 账户失败。请重新登录。</translation>
|
||||
</message>
|
||||
|
@ -144,12 +190,12 @@
|
|||
</message>
|
||||
<message>
|
||||
<location line="+99"/>
|
||||
<location line="+251"/>
|
||||
<location line="+257"/>
|
||||
<source>Please try to login again: %1</source>
|
||||
<translation>请尝试再次登录:%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-219"/>
|
||||
<location line="-225"/>
|
||||
<source>Failed to join room: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -209,6 +255,29 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DigitVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/DigitVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditModal</name>
|
||||
<message>
|
||||
|
@ -235,13 +304,13 @@
|
|||
<context>
|
||||
<name>EmojiPicker</name>
|
||||
<message>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+117"/>
|
||||
<location line="+139"/>
|
||||
<location filename="../qml/emoji/EmojiPicker.qml" line="+113"/>
|
||||
<location line="+181"/>
|
||||
<source>Search</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-42"/>
|
||||
<location line="-66"/>
|
||||
<source>People</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -281,10 +350,33 @@
|
|||
<translation type="unfinished">Flags</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EmojiVerification</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/EmojiVerification.qml" line="+7"/>
|
||||
<source>Verification Code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press 'They do not match!' to abort verification!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+376"/>
|
||||
<source>They do not match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>They match!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EncryptionIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+36"/>
|
||||
<location filename="../qml/EncryptionIndicator.qml" line="+19"/>
|
||||
<source>Encrypted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -297,25 +389,27 @@
|
|||
<context>
|
||||
<name>EventStore</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+418"/>
|
||||
<location filename="../../src/timeline/EventStore.cpp" line="+519"/>
|
||||
<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"/>
|
||||
<location line="+32"/>
|
||||
<location line="+62"/>
|
||||
<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"/>
|
||||
<location line="-48"/>
|
||||
<location line="+61"/>
|
||||
<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"/>
|
||||
<location line="-51"/>
|
||||
<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>
|
||||
|
@ -331,6 +425,40 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Failed</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Failed.qml" line="+7"/>
|
||||
<source>Verification failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Other client does not support our verification protocol.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Key mismatch detected!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="+4"/>
|
||||
<source>Device verification timed out.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-2"/>
|
||||
<source>Other party canceled the verification.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>InviteeItem</name>
|
||||
<message>
|
||||
|
@ -443,18 +571,18 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>MessageDelegate</name>
|
||||
<message>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+66"/>
|
||||
<location line="+6"/>
|
||||
<location filename="../qml/delegates/MessageDelegate.qml" line="+105"/>
|
||||
<location line="+9"/>
|
||||
<source>redacted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Encryption enabled</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>room name changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -464,7 +592,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>topic changed to: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -474,41 +602,92 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 created and configured room: %2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+12"/>
|
||||
<source>%1 placed a voice call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a video call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>%1 placed a call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<location line="+11"/>
|
||||
<source>%1 answered the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>%1 ended the call.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<source>Negotiating call...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MessageInput</name>
|
||||
<message>
|
||||
<location filename="../qml/MessageInput.qml" line="+47"/>
|
||||
<source>Write a message...</source>
|
||||
<translation type="unfinished">写一条消息...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>NewVerificationRequest</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+7"/>
|
||||
<source>Send Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Recieved Device Verification Request</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>To ensure that no malicious user can eavesdrop on your encrypted communications, you can verify this device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>The device was requested to be verified</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">取消</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Deny</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<source>Start verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>Accept</source>
|
||||
<translation type="unfinished">接受</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Placeholder</name>
|
||||
<message>
|
||||
|
@ -517,6 +696,24 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QCoreApplication</name>
|
||||
<message>
|
||||
<location filename="../../src/main.cpp" line="+172"/>
|
||||
<source>Create a unique profile, which allows you to log into several accounts at the same time and start multiple instances of nheko.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>profile</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<source>profile name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickSwitcher</name>
|
||||
<message>
|
||||
|
@ -593,10 +790,18 @@ Example: https://server.my:8787</source>
|
|||
<translation>无效的服务器名</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ReplyPopup</name>
|
||||
<message>
|
||||
<location filename="../qml/ReplyPopup.qml" line="+43"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>RoomInfo</name>
|
||||
<message>
|
||||
<location filename="../../src/Cache.cpp" line="+1443"/>
|
||||
<location filename="../../src/Cache.cpp" line="+1780"/>
|
||||
<source>no version stored</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -656,7 +861,7 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+173"/>
|
||||
<location line="+169"/>
|
||||
<source>Accept</source>
|
||||
<translation>接受</translation>
|
||||
</message>
|
||||
|
@ -697,30 +902,48 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>StatusIndicator</name>
|
||||
<message>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+14"/>
|
||||
<location filename="../qml/StatusIndicator.qml" line="+17"/>
|
||||
<source>Failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Sent</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Received</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<location line="+2"/>
|
||||
<source>Read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Success</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Success.qml" line="+6"/>
|
||||
<source>Successful Verification</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Verification successful! Both sides verified their devices!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<source>Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextInputWidget</name>
|
||||
<message>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+574"/>
|
||||
<location filename="../../src/TextInputWidget.cpp" line="+577"/>
|
||||
<source>Send a file</source>
|
||||
<translation>发送一个文件</translation>
|
||||
</message>
|
||||
|
@ -741,7 +964,7 @@ Example: https://server.my:8787</source>
|
|||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+94"/>
|
||||
<location line="+96"/>
|
||||
<source>Select a file</source>
|
||||
<translation>选择一个文件</translation>
|
||||
</message>
|
||||
|
@ -751,7 +974,7 @@ Example: https://server.my:8787</source>
|
|||
<translation>所有文件(*)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+64"/>
|
||||
<location line="+63"/>
|
||||
<source>Place a call</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -769,20 +992,19 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineModel</name>
|
||||
<message>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+805"/>
|
||||
<location filename="../../src/timeline/TimelineModel.cpp" line="+853"/>
|
||||
<source>Message redaction failed: %1</source>
|
||||
<translation type="unfinished">删除消息失败:%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+114"/>
|
||||
<location line="+17"/>
|
||||
<location line="+101"/>
|
||||
<location line="+130"/>
|
||||
<location line="+8"/>
|
||||
<location line="+5"/>
|
||||
<source>Failed to encrypt event, sending aborted!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+195"/>
|
||||
<location line="+156"/>
|
||||
<source>Save image</source>
|
||||
<translation type="unfinished">保存图像</translation>
|
||||
</message>
|
||||
|
@ -920,12 +1142,12 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-943"/>
|
||||
<location line="-810"/>
|
||||
<source>You joined this room.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+945"/>
|
||||
<location line="+812"/>
|
||||
<source>Rejected the knock from %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -949,17 +1171,17 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineRow</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineRow.qml" line="+94"/>
|
||||
<location filename="../qml/TimelineRow.qml" line="+95"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+15"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+14"/>
|
||||
<source>Options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -967,63 +1189,74 @@ Example: https://server.my:8787</source>
|
|||
<context>
|
||||
<name>TimelineView</name>
|
||||
<message>
|
||||
<location filename="../qml/TimelineView.qml" line="+61"/>
|
||||
<location filename="../qml/TimelineView.qml" line="+75"/>
|
||||
<source>React</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Reply</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Read receipts</source>
|
||||
<translation type="unfinished">阅读回执</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Mark as read</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+4"/>
|
||||
<source>View raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>View decrypted raw message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Redact message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+7"/>
|
||||
<source>Save as</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
<location line="+43"/>
|
||||
<source>No room open</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TimelineViewManager</name>
|
||||
<message>
|
||||
<location line="+53"/>
|
||||
<location filename="../../src/timeline/TimelineViewManager.cpp" line="+410"/>
|
||||
<source>No share room with this user found. Create an encrypted room with this user and try again.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TopBar</name>
|
||||
<message>
|
||||
<location filename="../qml/TopBar.qml" line="+41"/>
|
||||
<source>Back to room list</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<location line="+12"/>
|
||||
<location line="+15"/>
|
||||
<source>No room selected</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+28"/>
|
||||
<location line="+27"/>
|
||||
<source>Room options</source>
|
||||
<translation type="unfinished">聊天室选项</translation>
|
||||
</message>
|
||||
|
@ -1033,25 +1266,20 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished">邀请用户</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Members</source>
|
||||
<translation type="unfinished">成员</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<source>Leave room</source>
|
||||
<translation type="unfinished">离开聊天室</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<location line="+5"/>
|
||||
<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>
|
||||
|
@ -1109,10 +1337,33 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserProfile</name>
|
||||
<message>
|
||||
<location filename="../qml/UserProfile.qml" line="+60"/>
|
||||
<source>Verify</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Ban the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Start a private chat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Kick the user</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UserSettingsPage</name>
|
||||
<message>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+566"/>
|
||||
<location filename="../../src/UserSettingsPage.cpp" line="+595"/>
|
||||
<source>Minimize to tray</source>
|
||||
<translation>最小化至托盘</translation>
|
||||
</message>
|
||||
|
@ -1132,12 +1383,17 @@ Example: https://server.my:8787</source>
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-63"/>
|
||||
<location line="-149"/>
|
||||
<source>profile: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+87"/>
|
||||
<source>CALLS</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<location line="+57"/>
|
||||
<source>Keep the application running in the background after closing the client window.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1275,7 +1531,17 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+4"/>
|
||||
<source>Mobile mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Will prevent text selection in the timeline to make scrolling easier.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Scale factor</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -1320,7 +1586,7 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>设备指纹</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-120"/>
|
||||
<location line="-123"/>
|
||||
<source>Session Keys</source>
|
||||
<translation>会话密钥</translation>
|
||||
</message>
|
||||
|
@ -1340,22 +1606,32 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>加密</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-78"/>
|
||||
<location line="-75"/>
|
||||
<source>GENERAL</source>
|
||||
<translation>通用</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+30"/>
|
||||
<location line="+32"/>
|
||||
<source>INTERFACE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+172"/>
|
||||
<location line="+170"/>
|
||||
<source>Emoji Font Family</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+191"/>
|
||||
<location line="+18"/>
|
||||
<source>Share keys with trusted users</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Automatically replies to key requests from other users, if they are verified.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+185"/>
|
||||
<source>Open Sessions File</source>
|
||||
<translation>打开会话文件</translation>
|
||||
</message>
|
||||
|
@ -1401,6 +1677,34 @@ This usually causes the application icon in the task bar to animate in some fash
|
|||
<translation>保存导出的会话密钥的文件</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Waiting</name>
|
||||
<message>
|
||||
<location filename="../qml/device-verification/Waiting.qml" line="+7"/>
|
||||
<source>Waiting for other party</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Waiting for other side to accept the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to continue the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Waiting for other side to complete the verification request.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+15"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">取消</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomePage</name>
|
||||
<message>
|
||||
|
|
|
@ -8,7 +8,7 @@ Rectangle {
|
|||
|
||||
visible: TimelineManager.callState != WebRTCState.DISCONNECTED
|
||||
color: "#2ECC71"
|
||||
implicitHeight: rowLayout.height + 8
|
||||
implicitHeight: visible ? rowLayout.height + 8 : 0
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
|
|
|
@ -13,7 +13,7 @@ Rectangle {
|
|||
width: 48
|
||||
height: 48
|
||||
radius: Settings.avatarCircles ? height / 2 : 3
|
||||
color: colors.base
|
||||
color: colors.alternateBase
|
||||
|
||||
Label {
|
||||
anchors.fill: parent
|
||||
|
|
|
@ -6,8 +6,7 @@ TextEdit {
|
|||
textFormat: TextEdit.RichText
|
||||
readOnly: true
|
||||
wrapMode: Text.Wrap
|
||||
selectByMouse: true
|
||||
activeFocusOnPress: false
|
||||
selectByMouse: !Settings.mobileMode
|
||||
color: colors.text
|
||||
onLinkActivated: {
|
||||
if (/^https:\/\/matrix.to\/#\/(@.*)$/.test(link)) {
|
||||
|
@ -29,7 +28,6 @@ TextEdit {
|
|||
id: ma
|
||||
|
||||
anchors.fill: parent
|
||||
propagateComposedEvents: true
|
||||
acceptedButtons: Qt.NoButton
|
||||
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||
}
|
||||
|
|
90
resources/qml/MessageInput.qml
Normal file
90
resources/qml/MessageInput.qml
Normal file
|
@ -0,0 +1,90 @@
|
|||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Layouts 1.2
|
||||
import QtQuick.Window 2.2
|
||||
|
||||
Rectangle {
|
||||
color: colors.window
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: textInput.height
|
||||
Layout.minimumHeight: 40
|
||||
|
||||
RowLayout {
|
||||
id: inputBar
|
||||
|
||||
anchors.fill: parent
|
||||
spacing: 16
|
||||
|
||||
ImageButton {
|
||||
Layout.alignment: Qt.AlignBottom
|
||||
hoverEnabled: true
|
||||
width: 22
|
||||
height: 22
|
||||
image: ":/icons/icons/ui/place-call.png"
|
||||
Layout.topMargin: 8
|
||||
Layout.bottomMargin: 8
|
||||
Layout.leftMargin: 16
|
||||
}
|
||||
|
||||
ImageButton {
|
||||
Layout.alignment: Qt.AlignBottom
|
||||
hoverEnabled: true
|
||||
width: 22
|
||||
height: 22
|
||||
image: ":/icons/icons/ui/paper-clip-outline.png"
|
||||
Layout.topMargin: 8
|
||||
Layout.bottomMargin: 8
|
||||
}
|
||||
|
||||
ScrollView {
|
||||
id: textInput
|
||||
|
||||
Layout.alignment: Qt.AlignBottom
|
||||
Layout.maximumHeight: Window.height / 4
|
||||
Layout.fillWidth: true
|
||||
|
||||
TextArea {
|
||||
placeholderText: qsTr("Write a message...")
|
||||
placeholderTextColor: colors.buttonText
|
||||
color: colors.text
|
||||
wrapMode: TextEdit.Wrap
|
||||
|
||||
MouseArea {
|
||||
// workaround for wrong cursor shape on some platforms
|
||||
anchors.fill: parent
|
||||
acceptedButtons: Qt.NoButton
|
||||
cursorShape: Qt.IBeamCursor
|
||||
}
|
||||
|
||||
background: Rectangle {
|
||||
color: colors.window
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ImageButton {
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignBottom
|
||||
hoverEnabled: true
|
||||
width: 22
|
||||
height: 22
|
||||
image: ":/icons/icons/ui/smile.png"
|
||||
Layout.topMargin: 8
|
||||
Layout.bottomMargin: 8
|
||||
}
|
||||
|
||||
ImageButton {
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignBottom
|
||||
hoverEnabled: true
|
||||
width: 22
|
||||
height: 22
|
||||
image: ":/icons/icons/ui/cursor.png"
|
||||
Layout.topMargin: 8
|
||||
Layout.bottomMargin: 8
|
||||
Layout.rightMargin: 16
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
202
resources/qml/MessageView.qml
Normal file
202
resources/qml/MessageView.qml
Normal file
|
@ -0,0 +1,202 @@
|
|||
import "./delegates"
|
||||
import QtGraphicalEffects 1.0
|
||||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Layouts 1.2
|
||||
import QtQuick.Window 2.2
|
||||
import im.nheko 1.0
|
||||
|
||||
ListView {
|
||||
id: chat
|
||||
|
||||
property int delegateMaxWidth: (Settings.timelineMaxWidth > 100 && (parent.width - Settings.timelineMaxWidth) > scrollbar.width * 2) ? Settings.timelineMaxWidth : (parent.width - scrollbar.width * 2)
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
cacheBuffer: 400
|
||||
model: TimelineManager.timeline
|
||||
boundsBehavior: Flickable.StopAtBounds
|
||||
pixelAligned: true
|
||||
spacing: 4
|
||||
verticalLayoutDirection: ListView.BottomToTop
|
||||
onCountChanged: {
|
||||
if (atYEnd)
|
||||
model.currentIndex = 0;
|
||||
|
||||
} // Mark last event as read, since we are at the bottom
|
||||
|
||||
ScrollHelper {
|
||||
flickable: parent
|
||||
anchors.fill: parent
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: StandardKey.MoveToPreviousPage
|
||||
onActivated: {
|
||||
chat.contentY = chat.contentY - chat.height / 2;
|
||||
chat.returnToBounds();
|
||||
}
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: StandardKey.MoveToNextPage
|
||||
onActivated: {
|
||||
chat.contentY = chat.contentY + chat.height / 2;
|
||||
chat.returnToBounds();
|
||||
}
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: StandardKey.Cancel
|
||||
onActivated: chat.model.reply = undefined
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Alt+Up"
|
||||
onActivated: chat.model.reply = chat.model.indexToId(chat.model.reply ? chat.model.idToIndex(chat.model.reply) + 1 : 0)
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Alt+Down"
|
||||
onActivated: {
|
||||
var idx = chat.model.reply ? chat.model.idToIndex(chat.model.reply) - 1 : -1;
|
||||
chat.model.reply = idx >= 0 ? chat.model.indexToId(idx) : undefined;
|
||||
}
|
||||
}
|
||||
|
||||
section {
|
||||
property: "section"
|
||||
}
|
||||
|
||||
Component {
|
||||
id: sectionHeader
|
||||
|
||||
Column {
|
||||
property var modelData
|
||||
property string section
|
||||
property string nextSection
|
||||
|
||||
topPadding: 4
|
||||
bottomPadding: 4
|
||||
spacing: 8
|
||||
visible: !!modelData
|
||||
width: parent.width
|
||||
height: (section.includes(" ") ? dateBubble.height + 8 + userName.height : userName.height) + 8
|
||||
|
||||
Label {
|
||||
id: dateBubble
|
||||
|
||||
anchors.horizontalCenter: parent ? parent.horizontalCenter : undefined
|
||||
visible: section.includes(" ")
|
||||
text: chat.model.formatDateSeparator(modelData.timestamp)
|
||||
color: colors.text
|
||||
height: fontMetrics.height * 1.4
|
||||
width: contentWidth * 1.2
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
||||
background: Rectangle {
|
||||
radius: parent.height / 2
|
||||
color: colors.window
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Row {
|
||||
height: userName.height
|
||||
spacing: 8
|
||||
|
||||
Avatar {
|
||||
width: avatarSize
|
||||
height: avatarSize
|
||||
url: chat.model.avatarUrl(modelData.userId).replace("mxc://", "image://MxcImage/")
|
||||
displayName: modelData.userName
|
||||
userid: modelData.userId
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: chat.model.openUserProfile(modelData.userId)
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
propagateComposedEvents: true
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Label {
|
||||
id: userName
|
||||
|
||||
text: TimelineManager.escapeEmoji(modelData.userName)
|
||||
color: TimelineManager.userColor(modelData.userId, colors.window)
|
||||
textFormat: Text.RichText
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
onClicked: chat.model.openUserProfile(modelData.userId)
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
propagateComposedEvents: true
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ScrollBar.vertical: ScrollBar {
|
||||
id: scrollbar
|
||||
}
|
||||
|
||||
delegate: Item {
|
||||
id: wrapper
|
||||
|
||||
// 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
|
||||
property Item section
|
||||
|
||||
anchors.horizontalCenter: parent ? parent.horizontalCenter : undefined
|
||||
width: chat.delegateMaxWidth
|
||||
height: section ? section.height + timelinerow.height : timelinerow.height
|
||||
onSectionBoundaryChanged: {
|
||||
if (sectionBoundary) {
|
||||
var properties = {
|
||||
"modelData": model.dump,
|
||||
"section": ListView.section,
|
||||
"nextSection": ListView.nextSection
|
||||
};
|
||||
section = sectionHeader.createObject(wrapper, properties);
|
||||
} else {
|
||||
section.destroy();
|
||||
section = null;
|
||||
}
|
||||
}
|
||||
|
||||
TimelineRow {
|
||||
id: timelinerow
|
||||
|
||||
y: section ? section.y + section.height : 0
|
||||
}
|
||||
|
||||
Connections {
|
||||
function onMovementEnded() {
|
||||
if (y + height + 2 * chat.spacing > chat.contentY + chat.height && y < chat.contentY + chat.height)
|
||||
chat.model.currentIndex = index;
|
||||
|
||||
}
|
||||
|
||||
target: chat
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
footer: BusyIndicator {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
running: chat.model && chat.model.paginationInProgress
|
||||
height: 50
|
||||
width: 50
|
||||
z: 3
|
||||
}
|
||||
|
||||
}
|
|
@ -83,7 +83,7 @@ Flow {
|
|||
implicitWidth: reaction.implicitWidth
|
||||
implicitHeight: reaction.implicitHeight
|
||||
border.color: (reaction.hovered || modelData.selfReactedEvent !== '') ? colors.highlight : colors.text
|
||||
color: modelData.selfReactedEvent !== '' ? Qt.hsla(highlightHue, highlightSat, highlightLight, 0.2) : colors.base
|
||||
color: modelData.selfReactedEvent !== '' ? Qt.hsla(highlightHue, highlightSat, highlightLight, 0.2) : colors.window
|
||||
border.width: 1
|
||||
radius: reaction.height / 2
|
||||
}
|
||||
|
|
47
resources/qml/ReplyPopup.qml
Normal file
47
resources/qml/ReplyPopup.qml
Normal file
|
@ -0,0 +1,47 @@
|
|||
import "./delegates/"
|
||||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Layouts 1.2
|
||||
import im.nheko 1.0
|
||||
|
||||
Rectangle {
|
||||
id: replyPopup
|
||||
|
||||
property var room: TimelineManager.timeline
|
||||
|
||||
Layout.fillWidth: true
|
||||
visible: room && room.reply
|
||||
// Height of child, plus margins, plus border
|
||||
implicitHeight: replyPreview.height + 10
|
||||
color: colors.window
|
||||
z: 3
|
||||
|
||||
Reply {
|
||||
id: replyPreview
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 2 * 22 + 3 * 16
|
||||
anchors.right: closeReplyButton.left
|
||||
anchors.rightMargin: 2 * 22 + 3 * 16
|
||||
anchors.bottom: parent.bottom
|
||||
modelData: room ? room.getDump(room.reply, room.id) : {
|
||||
}
|
||||
userColor: TimelineManager.userColor(modelData.userId, colors.window)
|
||||
}
|
||||
|
||||
ImageButton {
|
||||
id: closeReplyButton
|
||||
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 15
|
||||
anchors.top: replyPreview.top
|
||||
hoverEnabled: true
|
||||
width: 16
|
||||
height: 16
|
||||
image: ":/icons/icons/ui/remove-symbol.png"
|
||||
ToolTip.visible: closeReplyButton.hovered
|
||||
ToolTip.text: qsTr("Close")
|
||||
onClicked: room.reply = undefined
|
||||
}
|
||||
|
||||
}
|
|
@ -48,7 +48,7 @@ Item {
|
|||
Reply {
|
||||
visible: model.replyTo
|
||||
modelData: chat.model.getDump(model.replyTo, model.id)
|
||||
userColor: TimelineManager.userColor(modelData.userId, colors.window)
|
||||
userColor: TimelineManager.userColor(modelData.userId, colors.base)
|
||||
}
|
||||
|
||||
// actual message content
|
||||
|
|
|
@ -43,6 +43,14 @@ Page {
|
|||
|
||||
}
|
||||
|
||||
Component {
|
||||
id: userProfileComponent
|
||||
|
||||
UserProfile {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Menu {
|
||||
id: messageContextMenu
|
||||
|
||||
|
@ -69,12 +77,12 @@ Page {
|
|||
|
||||
MenuItem {
|
||||
text: qsTr("Reply")
|
||||
onClicked: chat.model.replyAction(messageContextMenu.eventId)
|
||||
onClicked: TimelineManager.timeline.replyAction(messageContextMenu.eventId)
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
text: qsTr("Read receipts")
|
||||
onTriggered: chat.model.readReceiptsAction(messageContextMenu.eventId)
|
||||
onTriggered: TimelineManager.timeline.readReceiptsAction(messageContextMenu.eventId)
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
|
@ -83,19 +91,19 @@ Page {
|
|||
|
||||
MenuItem {
|
||||
text: qsTr("View raw message")
|
||||
onTriggered: chat.model.viewRawMessage(messageContextMenu.eventId)
|
||||
onTriggered: TimelineManager.timeline.viewRawMessage(messageContextMenu.eventId)
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
visible: messageContextMenu.isEncrypted
|
||||
height: visible ? implicitHeight : 0
|
||||
text: qsTr("View decrypted raw message")
|
||||
onTriggered: chat.model.viewDecryptedRawMessage(messageContextMenu.eventId)
|
||||
onTriggered: TimelineManager.timeline.viewDecryptedRawMessage(messageContextMenu.eventId)
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
text: qsTr("Redact message")
|
||||
onTriggered: chat.model.redactEvent(messageContextMenu.eventId)
|
||||
onTriggered: TimelineManager.timeline.redactEvent(messageContextMenu.eventId)
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
|
@ -159,425 +167,52 @@ Page {
|
|||
}
|
||||
|
||||
ColumnLayout {
|
||||
visible: TimelineManager.timeline != null
|
||||
anchors.fill: parent
|
||||
spacing: 0
|
||||
|
||||
TopBar {
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: topBar
|
||||
|
||||
Layout.fillWidth: true
|
||||
implicitHeight: topLayout.height + 16
|
||||
height: 1
|
||||
z: 3
|
||||
color: colors.mid
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
color: colors.base
|
||||
|
||||
MouseArea {
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
onClicked: TimelineManager.openRoomSettings()
|
||||
}
|
||||
spacing: 0
|
||||
|
||||
GridLayout {
|
||||
//Layout.margins: 8
|
||||
|
||||
id: topLayout
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.margins: 8
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
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
|
||||
color: colors.text
|
||||
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()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
StackLayout {
|
||||
id: stackLayout
|
||||
currentIndex: 0
|
||||
|
||||
Connections {
|
||||
target: TimelineManager
|
||||
function onActiveTimelineChanged() {
|
||||
stackLayout.currentIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
ListView {
|
||||
id: chat
|
||||
|
||||
property int delegateMaxWidth: (Settings.timelineMaxWidth > 100 && (parent.width - Settings.timelineMaxWidth) > scrollbar.width * 2) ? Settings.timelineMaxWidth : (parent.width - scrollbar.width * 2)
|
||||
|
||||
visible: TimelineManager.timeline != null
|
||||
cacheBuffer: 400
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
model: TimelineManager.timeline
|
||||
boundsBehavior: Flickable.StopAtBounds
|
||||
pixelAligned: true
|
||||
spacing: 4
|
||||
verticalLayoutDirection: ListView.BottomToTop
|
||||
onCountChanged: {
|
||||
if (atYEnd)
|
||||
model.currentIndex = 0;
|
||||
|
||||
} // Mark last event as read, since we are at the bottom
|
||||
|
||||
ScrollHelper {
|
||||
flickable: parent
|
||||
anchors.fill: parent
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: StandardKey.MoveToPreviousPage
|
||||
onActivated: {
|
||||
chat.contentY = chat.contentY - chat.height / 2;
|
||||
chat.returnToBounds();
|
||||
}
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: StandardKey.MoveToNextPage
|
||||
onActivated: {
|
||||
chat.contentY = chat.contentY + chat.height / 2;
|
||||
chat.returnToBounds();
|
||||
}
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: StandardKey.Cancel
|
||||
onActivated: chat.model.reply = undefined
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Alt+Up"
|
||||
onActivated: chat.model.reply = chat.model.indexToId(chat.model.reply ? chat.model.idToIndex(chat.model.reply) + 1 : 0)
|
||||
}
|
||||
|
||||
Shortcut {
|
||||
sequence: "Alt+Down"
|
||||
onActivated: {
|
||||
var idx = chat.model.reply ? chat.model.idToIndex(chat.model.reply) - 1 : -1;
|
||||
chat.model.reply = idx >= 0 ? chat.model.indexToId(idx) : undefined;
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: userProfileComponent
|
||||
|
||||
UserProfile {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
section {
|
||||
property: "section"
|
||||
}
|
||||
|
||||
Component {
|
||||
id: sectionHeader
|
||||
|
||||
Column {
|
||||
property var modelData
|
||||
property string section
|
||||
property string nextSection
|
||||
|
||||
topPadding: 4
|
||||
bottomPadding: 4
|
||||
spacing: 8
|
||||
visible: !!modelData
|
||||
width: parent.width
|
||||
height: (section.includes(" ") ? dateBubble.height + 8 + userName.height : userName.height) + 8
|
||||
|
||||
Label {
|
||||
id: dateBubble
|
||||
|
||||
anchors.horizontalCenter: parent ? parent.horizontalCenter : undefined
|
||||
visible: section.includes(" ")
|
||||
text: chat.model.formatDateSeparator(modelData.timestamp)
|
||||
color: colors.text
|
||||
height: fontMetrics.height * 1.4
|
||||
width: contentWidth * 1.2
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
||||
background: Rectangle {
|
||||
radius: parent.height / 2
|
||||
color: colors.base
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Row {
|
||||
height: userName.height
|
||||
spacing: 8
|
||||
|
||||
Avatar {
|
||||
width: avatarSize
|
||||
height: avatarSize
|
||||
url: chat.model.avatarUrl(modelData.userId).replace("mxc://", "image://MxcImage/")
|
||||
displayName: modelData.userName
|
||||
userid: modelData.userId
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: chat.model.openUserProfile(modelData.userId)
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
propagateComposedEvents: true
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Label {
|
||||
id: userName
|
||||
|
||||
text: TimelineManager.escapeEmoji(modelData.userName)
|
||||
color: TimelineManager.userColor(modelData.userId, colors.window)
|
||||
textFormat: Text.RichText
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
onClicked: chat.model.openUserProfile(modelData.userId)
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
propagateComposedEvents: true
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ScrollBar.vertical: ScrollBar {
|
||||
id: scrollbar
|
||||
}
|
||||
|
||||
delegate: Item {
|
||||
id: wrapper
|
||||
|
||||
// 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
|
||||
property Item section
|
||||
|
||||
anchors.horizontalCenter: parent ? parent.horizontalCenter : undefined
|
||||
width: chat.delegateMaxWidth
|
||||
height: section ? section.height + timelinerow.height : timelinerow.height
|
||||
onSectionBoundaryChanged: {
|
||||
if (sectionBoundary) {
|
||||
var properties = {
|
||||
"modelData": model.dump,
|
||||
"section": ListView.section,
|
||||
"nextSection": ListView.nextSection
|
||||
};
|
||||
section = sectionHeader.createObject(wrapper, properties);
|
||||
} else {
|
||||
section.destroy();
|
||||
section = null;
|
||||
}
|
||||
}
|
||||
|
||||
TimelineRow {
|
||||
id: timelinerow
|
||||
|
||||
y: section ? section.y + section.height : 0
|
||||
}
|
||||
StackLayout {
|
||||
id: stackLayout
|
||||
currentIndex: 0
|
||||
|
||||
Connections {
|
||||
function onMovementEnded() {
|
||||
if (y + height + 2 * chat.spacing > chat.contentY + chat.height && y < chat.contentY + chat.height)
|
||||
chat.model.currentIndex = index;
|
||||
|
||||
target: TimelineManager
|
||||
function onActiveTimelineChanged() {
|
||||
stackLayout.currentIndex = 0;
|
||||
}
|
||||
|
||||
target: chat
|
||||
}
|
||||
|
||||
MessageView {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
|
||||
Loader {
|
||||
source: TimelineManager.onVideoCall ? "VideoCall.qml" : ""
|
||||
onLoaded: TimelineManager.setVideoCallItem()
|
||||
}
|
||||
}
|
||||
|
||||
footer: BusyIndicator {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
running: chat.model && chat.model.paginationInProgress
|
||||
height: 50
|
||||
width: 50
|
||||
z: 3
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: videoCallLoader
|
||||
source: TimelineManager.onVideoCall ? "VideoCall.qml" : ""
|
||||
onLoaded: TimelineManager.setVideoCallItem()
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
id: chatFooter
|
||||
|
||||
implicitHeight: Math.max(fontMetrics.height * 1.2, footerContent.height)
|
||||
Layout.fillWidth: true
|
||||
z: 3
|
||||
|
||||
Column {
|
||||
id: footerContent
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
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 {
|
||||
id: replyPopup
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
visible: chat.model && chat.model.reply
|
||||
// Height of child, plus margins, plus border
|
||||
height: replyPreview.height + 10
|
||||
color: colors.base
|
||||
|
||||
Reply {
|
||||
id: replyPreview
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 10
|
||||
anchors.right: closeReplyButton.left
|
||||
anchors.rightMargin: 20
|
||||
anchors.bottom: parent.bottom
|
||||
modelData: chat.model ? chat.model.getDump(chat.model.reply, chat.model.id) : {
|
||||
}
|
||||
userColor: TimelineManager.userColor(modelData.userId, colors.window)
|
||||
}
|
||||
|
||||
ImageButton {
|
||||
id: closeReplyButton
|
||||
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 15
|
||||
anchors.top: replyPreview.top
|
||||
hoverEnabled: true
|
||||
width: 16
|
||||
height: 16
|
||||
image: ":/icons/icons/ui/remove-symbol.png"
|
||||
ToolTip.visible: closeReplyButton.hovered
|
||||
ToolTip.text: qsTr("Close")
|
||||
onClicked: chat.model.reply = undefined
|
||||
}
|
||||
|
||||
TypingIndicator {
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -589,6 +224,19 @@ Page {
|
|||
z: 3
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
z: 3
|
||||
height: 1
|
||||
color: colors.mid
|
||||
}
|
||||
|
||||
ReplyPopup {
|
||||
}
|
||||
|
||||
//MessageInput {
|
||||
//}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
127
resources/qml/TopBar.qml
Normal file
127
resources/qml/TopBar.qml
Normal file
|
@ -0,0 +1,127 @@
|
|||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Layouts 1.2
|
||||
import im.nheko 1.0
|
||||
|
||||
Rectangle {
|
||||
id: topBar
|
||||
|
||||
property var room: TimelineManager.timeline
|
||||
|
||||
Layout.fillWidth: true
|
||||
implicitHeight: topLayout.height + 16
|
||||
z: 3
|
||||
color: colors.window
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: TimelineManager.openRoomSettings()
|
||||
}
|
||||
|
||||
GridLayout {
|
||||
//Layout.margins: 8
|
||||
|
||||
id: topLayout
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.margins: 8
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
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: room ? room.roomAvatarUrl.replace("mxc://", "image://MxcImage/") : ""
|
||||
displayName: room ? room.roomName : qsTr("No room selected")
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: TimelineManager.openRoomSettings()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
Layout.column: 2
|
||||
Layout.row: 0
|
||||
color: colors.text
|
||||
font.pointSize: fontMetrics.font.pointSize * 1.1
|
||||
text: room ? room.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: room ? room.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()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
35
resources/qml/TypingIndicator.qml
Normal file
35
resources/qml/TypingIndicator.qml
Normal file
|
@ -0,0 +1,35 @@
|
|||
import QtQuick 2.9
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Layouts 1.2
|
||||
import im.nheko 1.0
|
||||
|
||||
Item {
|
||||
property var room: TimelineManager.timeline
|
||||
|
||||
implicitHeight: Math.max(fontMetrics.height * 1.2, typingDisplay.height)
|
||||
Layout.fillWidth: true
|
||||
|
||||
Rectangle {
|
||||
id: typingRect
|
||||
|
||||
visible: (room && room.typingUsers.length > 0)
|
||||
color: colors.base
|
||||
anchors.fill: parent
|
||||
z: 3
|
||||
|
||||
Label {
|
||||
id: typingDisplay
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: 10
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: 10
|
||||
anchors.bottom: parent.bottom
|
||||
color: colors.text
|
||||
text: room ? room.formatTypingUsers(room.typingUsers, colors.base) : ""
|
||||
textFormat: Text.RichText
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -65,7 +65,7 @@ Item {
|
|||
}
|
||||
|
||||
Rectangle {
|
||||
color: colors.dark
|
||||
color: colors.alternateBase
|
||||
z: -1
|
||||
radius: 10
|
||||
height: row.height + 24
|
||||
|
|
|
@ -31,11 +31,44 @@ Item {
|
|||
fillMode: Image.PreserveAspectFit
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
|
||||
enabled: model.data.type == MtxEvent.ImageMessage && img.status == Image.Ready
|
||||
hoverEnabled: true
|
||||
anchors.fill: parent
|
||||
onClicked: TimelineManager.openImageOverlay(model.data.url, model.data.id)
|
||||
}
|
||||
|
||||
Item {
|
||||
id: overlay
|
||||
|
||||
anchors.fill: parent
|
||||
visible: mouseArea.containsMouse
|
||||
|
||||
Rectangle {
|
||||
id: container
|
||||
|
||||
width: parent.width
|
||||
implicitHeight: imgcaption.implicitHeight
|
||||
anchors.bottom: overlay.bottom
|
||||
color: colors.window
|
||||
opacity: 0.75
|
||||
}
|
||||
|
||||
Text {
|
||||
id: imgcaption
|
||||
|
||||
anchors.fill: container
|
||||
elide: Text.ElideMiddle
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
// See this MSC: https://github.com/matrix-org/matrix-doc/pull/2530
|
||||
text: model.data.filename ? model.data.filename : model.data.body
|
||||
color: colors.text
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,5 +2,5 @@ TextMessage {
|
|||
font.italic: true
|
||||
color: colors.buttonText
|
||||
height: isReply ? Math.min(chat.height / 8, implicitHeight) : undefined
|
||||
clip: true
|
||||
clip: isReply
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ Label {
|
|||
|
||||
background: Rectangle {
|
||||
radius: parent.height / 2
|
||||
color: colors.dark
|
||||
color: colors.alternateBase
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ Rectangle {
|
|||
id: bg
|
||||
|
||||
radius: 10
|
||||
color: colors.dark
|
||||
color: colors.alternateBase
|
||||
height: Math.round(content.height + 24)
|
||||
width: parent ? parent.width : undefined
|
||||
|
||||
|
|
|
@ -7,6 +7,6 @@ MatrixText {
|
|||
text: "<style type=\"text/css\">a { color:" + colors.link + ";}</style>" + formatted.replace("<pre>", "<pre style='white-space: pre-wrap'>")
|
||||
width: parent ? parent.width : undefined
|
||||
height: isReply ? Math.round(Math.min(timelineRoot.height / 8, implicitHeight)) : undefined
|
||||
clip: true
|
||||
clip: isReply
|
||||
font.pointSize: (Settings.enlargeEmojiOnlyMessages && model.data.isOnlyEmoji > 0 && model.data.isOnlyEmoji < 4) ? Settings.fontSize * 3 : Settings.fontSize
|
||||
}
|
||||
|
|
|
@ -59,6 +59,7 @@ Popup {
|
|||
cellHeight: 52
|
||||
boundsBehavior: Flickable.StopAtBounds
|
||||
clip: true
|
||||
currentIndex: -1 // prevent sorting from stealing focus
|
||||
|
||||
// Individual emoji
|
||||
delegate: AbstractButton {
|
||||
|
@ -160,7 +161,7 @@ Popup {
|
|||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 1
|
||||
color: emojiPopup.colors.dark
|
||||
color: emojiPopup.colors.alternateBase
|
||||
}
|
||||
|
||||
// Category picker row
|
||||
|
@ -280,7 +281,7 @@ Popup {
|
|||
Layout.preferredWidth: 1
|
||||
implicitWidth: 1
|
||||
height: parent.height
|
||||
color: emojiPopup.colors.dark
|
||||
color: emojiPopup.colors.alternateBase
|
||||
}
|
||||
|
||||
// Search Button is special
|
||||
|
|
|
@ -122,6 +122,11 @@
|
|||
<file>qtquickcontrols2.conf</file>
|
||||
|
||||
<file>qml/TimelineView.qml</file>
|
||||
<file>qml/TopBar.qml</file>
|
||||
<file>qml/MessageView.qml</file>
|
||||
<file>qml/MessageInput.qml</file>
|
||||
<file>qml/TypingIndicator.qml</file>
|
||||
<file>qml/ReplyPopup.qml</file>
|
||||
<file>qml/ActiveCallBar.qml</file>
|
||||
<file>qml/Avatar.qml</file>
|
||||
<file>qml/ImageButton.qml</file>
|
||||
|
|
|
@ -205,9 +205,7 @@ TextField {
|
|||
qproperty-labelColor: #caccd1;
|
||||
}
|
||||
|
||||
SideBarActions,
|
||||
TopRoomBar
|
||||
{
|
||||
SideBarActions {
|
||||
border: none;
|
||||
border-top: 1px solid #202228;
|
||||
background-color: #2d3139;
|
||||
|
@ -215,7 +213,6 @@ TopRoomBar
|
|||
|
||||
TextInputWidget {
|
||||
border: none;
|
||||
border-top: 1px solid #2d3139;
|
||||
}
|
||||
|
||||
TextInputWidget,
|
||||
|
|
|
@ -233,7 +233,6 @@ QLineEdit {
|
|||
|
||||
TextInputWidget {
|
||||
border: none;
|
||||
border-top: 1px solid #dcdcdc;
|
||||
}
|
||||
|
||||
SideBarActions {
|
||||
|
@ -241,11 +240,6 @@ SideBarActions {
|
|||
border-top: 1px solid #dcdcdc;
|
||||
}
|
||||
|
||||
TopRoomBar {
|
||||
border: none;
|
||||
border-bottom: 1px solid #dcdcdc;
|
||||
}
|
||||
|
||||
Toggle {
|
||||
qproperty-activeColor: #38a3d8;
|
||||
qproperty-disabledColor: gray;
|
||||
|
|
|
@ -28,11 +28,9 @@ UserMentionsWidget > TimelineItem {
|
|||
SideBarActions,
|
||||
TextInputWidget {
|
||||
border: none;
|
||||
border-top: 1px solid palette(mid);
|
||||
}
|
||||
|
||||
UserInfoWidget,
|
||||
TopRoomBar {
|
||||
UserInfoWidget {
|
||||
border: none;
|
||||
border-bottom: 1px solid palette(mid);
|
||||
}
|
||||
|
|
275
src/Cache.cpp
275
src/Cache.cpp
|
@ -40,7 +40,7 @@
|
|||
|
||||
//! Should be changed when a breaking change occurs in the cache format.
|
||||
//! This will reset client's data.
|
||||
static const std::string CURRENT_CACHE_FORMAT_VERSION("2020.07.05");
|
||||
static const std::string CURRENT_CACHE_FORMAT_VERSION("2020.10.20");
|
||||
static const std::string SECRET("secret");
|
||||
|
||||
static lmdb::val NEXT_BATCH_KEY("next_batch");
|
||||
|
@ -437,7 +437,9 @@ Cache::getOutboundMegolmSession(const std::string &room_id)
|
|||
//
|
||||
|
||||
void
|
||||
Cache::saveOlmSession(const std::string &curve25519, mtx::crypto::OlmSessionPtr session)
|
||||
Cache::saveOlmSession(const std::string &curve25519,
|
||||
mtx::crypto::OlmSessionPtr session,
|
||||
uint64_t timestamp)
|
||||
{
|
||||
using namespace mtx::crypto;
|
||||
|
||||
|
@ -447,7 +449,11 @@ Cache::saveOlmSession(const std::string &curve25519, mtx::crypto::OlmSessionPtr
|
|||
const auto pickled = pickle<SessionObject>(session.get(), SECRET);
|
||||
const auto session_id = mtx::crypto::session_id(session.get());
|
||||
|
||||
lmdb::dbi_put(txn, db, lmdb::val(session_id), lmdb::val(pickled));
|
||||
StoredOlmSession stored_session;
|
||||
stored_session.pickled_session = pickled;
|
||||
stored_session.last_message_ts = timestamp;
|
||||
|
||||
lmdb::dbi_put(txn, db, lmdb::val(session_id), lmdb::val(json(stored_session).dump()));
|
||||
|
||||
txn.commit();
|
||||
}
|
||||
|
@ -466,13 +472,44 @@ Cache::getOlmSession(const std::string &curve25519, const std::string &session_i
|
|||
txn.commit();
|
||||
|
||||
if (found) {
|
||||
auto data = std::string(pickled.data(), pickled.size());
|
||||
return unpickle<SessionObject>(data, SECRET);
|
||||
std::string_view raw(pickled.data(), pickled.size());
|
||||
auto data = json::parse(raw).get<StoredOlmSession>();
|
||||
return unpickle<SessionObject>(data.pickled_session, SECRET);
|
||||
}
|
||||
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
std::optional<mtx::crypto::OlmSessionPtr>
|
||||
Cache::getLatestOlmSession(const std::string &curve25519)
|
||||
{
|
||||
using namespace mtx::crypto;
|
||||
|
||||
auto txn = lmdb::txn::begin(env_);
|
||||
auto db = getOlmSessionsDb(txn, curve25519);
|
||||
|
||||
std::string session_id, pickled_session;
|
||||
std::vector<std::string> res;
|
||||
|
||||
std::optional<StoredOlmSession> currentNewest;
|
||||
|
||||
auto cursor = lmdb::cursor::open(txn, db);
|
||||
while (cursor.get(session_id, pickled_session, MDB_NEXT)) {
|
||||
auto data =
|
||||
json::parse(std::string_view(pickled_session.data(), pickled_session.size()))
|
||||
.get<StoredOlmSession>();
|
||||
if (!currentNewest || currentNewest->last_message_ts < data.last_message_ts)
|
||||
currentNewest = data;
|
||||
}
|
||||
cursor.close();
|
||||
|
||||
txn.commit();
|
||||
|
||||
return currentNewest
|
||||
? std::optional(unpickle<SessionObject>(currentNewest->pickled_session, SECRET))
|
||||
: std::nullopt;
|
||||
}
|
||||
|
||||
std::vector<std::string>
|
||||
Cache::getOlmSessions(const std::string &curve25519)
|
||||
{
|
||||
|
@ -828,6 +865,80 @@ Cache::runMigrations()
|
|||
nhlog::db()->info("Successfully deleted pending receipts database.");
|
||||
return true;
|
||||
}},
|
||||
{"2020.10.20",
|
||||
[this]() {
|
||||
try {
|
||||
using namespace mtx::crypto;
|
||||
|
||||
auto txn = lmdb::txn::begin(env_);
|
||||
|
||||
auto mainDb = lmdb::dbi::open(txn, nullptr);
|
||||
|
||||
std::string dbName, ignored;
|
||||
auto olmDbCursor = lmdb::cursor::open(txn, mainDb);
|
||||
while (olmDbCursor.get(dbName, ignored, MDB_NEXT)) {
|
||||
// skip every db but olm session dbs
|
||||
nhlog::db()->debug("Db {}", dbName);
|
||||
if (dbName.find("olm_sessions/") != 0)
|
||||
continue;
|
||||
|
||||
nhlog::db()->debug("Migrating {}", dbName);
|
||||
|
||||
auto olmDb = lmdb::dbi::open(txn, dbName.c_str());
|
||||
|
||||
std::string session_id, session_value;
|
||||
|
||||
std::vector<std::pair<std::string, StoredOlmSession>> sessions;
|
||||
|
||||
auto cursor = lmdb::cursor::open(txn, olmDb);
|
||||
while (cursor.get(session_id, session_value, MDB_NEXT)) {
|
||||
nhlog::db()->debug("session_id {}, session_value {}",
|
||||
session_id,
|
||||
session_value);
|
||||
StoredOlmSession session;
|
||||
bool invalid = false;
|
||||
for (auto c : session_value)
|
||||
if (!isprint(c)) {
|
||||
invalid = true;
|
||||
break;
|
||||
}
|
||||
if (invalid)
|
||||
continue;
|
||||
|
||||
nhlog::db()->debug("Not skipped");
|
||||
|
||||
session.pickled_session = session_value;
|
||||
sessions.emplace_back(session_id, session);
|
||||
}
|
||||
cursor.close();
|
||||
|
||||
olmDb.drop(txn, true);
|
||||
|
||||
auto newDbName = dbName;
|
||||
newDbName.erase(0, sizeof("olm_sessions") - 1);
|
||||
newDbName = "olm_sessions.v2" + newDbName;
|
||||
|
||||
auto newDb = lmdb::dbi::open(txn, newDbName.c_str(), MDB_CREATE);
|
||||
|
||||
for (const auto &[key, value] : sessions) {
|
||||
nhlog::db()->debug("{}\n{}", key, json(value).dump());
|
||||
lmdb::dbi_put(txn,
|
||||
newDb,
|
||||
lmdb::val(key),
|
||||
lmdb::val(json(value).dump()));
|
||||
}
|
||||
}
|
||||
olmDbCursor.close();
|
||||
|
||||
txn.commit();
|
||||
} catch (const lmdb::error &) {
|
||||
nhlog::db()->critical("Failed to migrate olm sessions,");
|
||||
return false;
|
||||
}
|
||||
|
||||
nhlog::db()->info("Successfully migrated olm sessions.");
|
||||
return true;
|
||||
}},
|
||||
};
|
||||
|
||||
nhlog::db()->info("Running migrations, this may take a while!");
|
||||
|
@ -1638,7 +1749,7 @@ Cache::getTimelineIndex(const std::string &room_id, std::string_view event_id)
|
|||
|
||||
lmdb::dbi orderDb{0};
|
||||
try {
|
||||
orderDb = getOrderToMessageDb(txn, room_id);
|
||||
orderDb = getMessageToOrderDb(txn, room_id);
|
||||
} catch (lmdb::runtime_error &e) {
|
||||
nhlog::db()->error("Can't open db for room '{}', probably doesn't exist yet. ({})",
|
||||
room_id,
|
||||
|
@ -2169,34 +2280,22 @@ Cache::joinedRooms()
|
|||
return room_ids;
|
||||
}
|
||||
|
||||
void
|
||||
Cache::populateMembers()
|
||||
std::optional<MemberInfo>
|
||||
Cache::getMember(const std::string &room_id, const std::string &user_id)
|
||||
{
|
||||
auto rooms = joinedRooms();
|
||||
nhlog::db()->info("loading {} rooms", rooms.size());
|
||||
try {
|
||||
auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY);
|
||||
|
||||
auto txn = lmdb::txn::begin(env_);
|
||||
auto membersdb = getMembersDb(txn, room_id);
|
||||
|
||||
for (const auto &room : rooms) {
|
||||
const auto roomid = QString::fromStdString(room);
|
||||
|
||||
auto membersdb = getMembersDb(txn, room);
|
||||
auto cursor = lmdb::cursor::open(txn, membersdb);
|
||||
|
||||
std::string user_id, info;
|
||||
while (cursor.get(user_id, info, MDB_NEXT)) {
|
||||
MemberInfo m = json::parse(info);
|
||||
|
||||
const auto userid = QString::fromStdString(user_id);
|
||||
|
||||
insertDisplayName(roomid, userid, QString::fromStdString(m.name));
|
||||
insertAvatarUrl(roomid, userid, QString::fromStdString(m.avatar_url));
|
||||
lmdb::val info;
|
||||
if (lmdb::dbi_get(txn, membersdb, lmdb::val(user_id), info)) {
|
||||
MemberInfo m = json::parse(std::string_view(info.data(), info.size()));
|
||||
return m;
|
||||
}
|
||||
|
||||
cursor.close();
|
||||
} catch (...) {
|
||||
}
|
||||
|
||||
txn.commit();
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
std::vector<RoomSearchResult>
|
||||
|
@ -2613,8 +2712,19 @@ Cache::saveOldMessages(const std::string &room_id, const mtx::responses::Message
|
|||
}
|
||||
}
|
||||
|
||||
if (res.chunk.empty())
|
||||
if (res.chunk.empty()) {
|
||||
if (lmdb::dbi_get(txn, orderDb, lmdb::val(&index, sizeof(index)), val)) {
|
||||
auto orderEntry = json::parse(std::string_view(val.data(), val.size()));
|
||||
orderEntry["prev_batch"] = res.end;
|
||||
lmdb::dbi_put(txn,
|
||||
orderDb,
|
||||
lmdb::val(&index, sizeof(index)),
|
||||
lmdb::val(orderEntry.dump()));
|
||||
nhlog::db()->debug("saving '{}'", orderEntry.dump());
|
||||
txn.commit();
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
std::string event_id_val;
|
||||
for (const auto &e : res.chunk) {
|
||||
|
@ -3034,15 +3144,12 @@ Cache::roomMembers(const std::string &room_id)
|
|||
return members;
|
||||
}
|
||||
|
||||
QHash<QString, QString> Cache::DisplayNames;
|
||||
QHash<QString, QString> Cache::AvatarUrls;
|
||||
|
||||
QString
|
||||
Cache::displayName(const QString &room_id, const QString &user_id)
|
||||
{
|
||||
auto fmt = QString("%1 %2").arg(room_id).arg(user_id);
|
||||
if (DisplayNames.contains(fmt))
|
||||
return DisplayNames[fmt];
|
||||
if (auto info = getMember(room_id.toStdString(), user_id.toStdString());
|
||||
info && !info->name.empty())
|
||||
return QString::fromStdString(info->name);
|
||||
|
||||
return user_id;
|
||||
}
|
||||
|
@ -3050,9 +3157,8 @@ Cache::displayName(const QString &room_id, const QString &user_id)
|
|||
std::string
|
||||
Cache::displayName(const std::string &room_id, const std::string &user_id)
|
||||
{
|
||||
auto fmt = QString::fromStdString(room_id + " " + user_id);
|
||||
if (DisplayNames.contains(fmt))
|
||||
return DisplayNames[fmt].toStdString();
|
||||
if (auto info = getMember(room_id, user_id); info && !info->name.empty())
|
||||
return info->name;
|
||||
|
||||
return user_id;
|
||||
}
|
||||
|
@ -3060,41 +3166,11 @@ Cache::displayName(const std::string &room_id, const std::string &user_id)
|
|||
QString
|
||||
Cache::avatarUrl(const QString &room_id, const QString &user_id)
|
||||
{
|
||||
auto fmt = QString("%1 %2").arg(room_id).arg(user_id);
|
||||
if (AvatarUrls.contains(fmt))
|
||||
return AvatarUrls[fmt];
|
||||
if (auto info = getMember(room_id.toStdString(), user_id.toStdString());
|
||||
info && !info->avatar_url.empty())
|
||||
return QString::fromStdString(info->avatar_url);
|
||||
|
||||
return QString();
|
||||
}
|
||||
|
||||
void
|
||||
Cache::insertDisplayName(const QString &room_id,
|
||||
const QString &user_id,
|
||||
const QString &display_name)
|
||||
{
|
||||
auto fmt = QString("%1 %2").arg(room_id).arg(user_id);
|
||||
DisplayNames.insert(fmt, display_name);
|
||||
}
|
||||
|
||||
void
|
||||
Cache::removeDisplayName(const QString &room_id, const QString &user_id)
|
||||
{
|
||||
auto fmt = QString("%1 %2").arg(room_id).arg(user_id);
|
||||
DisplayNames.remove(fmt);
|
||||
}
|
||||
|
||||
void
|
||||
Cache::insertAvatarUrl(const QString &room_id, const QString &user_id, const QString &avatar_url)
|
||||
{
|
||||
auto fmt = QString("%1 %2").arg(room_id).arg(user_id);
|
||||
AvatarUrls.insert(fmt, avatar_url);
|
||||
}
|
||||
|
||||
void
|
||||
Cache::removeAvatarUrl(const QString &room_id, const QString &user_id)
|
||||
{
|
||||
auto fmt = QString("%1 %2").arg(room_id).arg(user_id);
|
||||
AvatarUrls.remove(fmt);
|
||||
return "";
|
||||
}
|
||||
|
||||
mtx::presence::PresenceState
|
||||
|
@ -3629,6 +3705,19 @@ from_json(const nlohmann::json &obj, MegolmSessionIndex &msg)
|
|||
msg.sender_key = obj.at("sender_key");
|
||||
}
|
||||
|
||||
void
|
||||
to_json(nlohmann::json &obj, const StoredOlmSession &msg)
|
||||
{
|
||||
obj["ts"] = msg.last_message_ts;
|
||||
obj["s"] = msg.pickled_session;
|
||||
}
|
||||
void
|
||||
from_json(const nlohmann::json &obj, StoredOlmSession &msg)
|
||||
{
|
||||
msg.last_message_ts = obj.at("ts").get<uint64_t>();
|
||||
msg.pickled_session = obj.at("s").get<std::string>();
|
||||
}
|
||||
|
||||
namespace cache {
|
||||
void
|
||||
init(const QString &user_id)
|
||||
|
@ -3669,28 +3758,6 @@ avatarUrl(const QString &room_id, const QString &user_id)
|
|||
return instance_->avatarUrl(room_id, user_id);
|
||||
}
|
||||
|
||||
void
|
||||
removeDisplayName(const QString &room_id, const QString &user_id)
|
||||
{
|
||||
instance_->removeDisplayName(room_id, user_id);
|
||||
}
|
||||
void
|
||||
removeAvatarUrl(const QString &room_id, const QString &user_id)
|
||||
{
|
||||
instance_->removeAvatarUrl(room_id, user_id);
|
||||
}
|
||||
|
||||
void
|
||||
insertDisplayName(const QString &room_id, const QString &user_id, const QString &display_name)
|
||||
{
|
||||
instance_->insertDisplayName(room_id, user_id, display_name);
|
||||
}
|
||||
void
|
||||
insertAvatarUrl(const QString &room_id, const QString &user_id, const QString &avatar_url)
|
||||
{
|
||||
instance_->insertAvatarUrl(room_id, user_id, avatar_url);
|
||||
}
|
||||
|
||||
mtx::presence::PresenceState
|
||||
presenceState(const std::string &user_id)
|
||||
{
|
||||
|
@ -3702,13 +3769,6 @@ statusMessage(const std::string &user_id)
|
|||
return instance_->statusMessage(user_id);
|
||||
}
|
||||
|
||||
//! Load saved data for the display names & avatars.
|
||||
void
|
||||
populateMembers()
|
||||
{
|
||||
instance_->populateMembers();
|
||||
}
|
||||
|
||||
// user cache stores user keys
|
||||
std::optional<UserKeyCache>
|
||||
userKeys(const std::string &user_id)
|
||||
|
@ -4114,9 +4174,11 @@ inboundMegolmSessionExists(const MegolmSessionIndex &index)
|
|||
// Olm Sessions
|
||||
//
|
||||
void
|
||||
saveOlmSession(const std::string &curve25519, mtx::crypto::OlmSessionPtr session)
|
||||
saveOlmSession(const std::string &curve25519,
|
||||
mtx::crypto::OlmSessionPtr session,
|
||||
uint64_t timestamp)
|
||||
{
|
||||
instance_->saveOlmSession(curve25519, std::move(session));
|
||||
instance_->saveOlmSession(curve25519, std::move(session), timestamp);
|
||||
}
|
||||
std::vector<std::string>
|
||||
getOlmSessions(const std::string &curve25519)
|
||||
|
@ -4128,6 +4190,11 @@ getOlmSession(const std::string &curve25519, const std::string &session_id)
|
|||
{
|
||||
return instance_->getOlmSession(curve25519, session_id);
|
||||
}
|
||||
std::optional<mtx::crypto::OlmSessionPtr>
|
||||
getLatestOlmSession(const std::string &curve25519)
|
||||
{
|
||||
return instance_->getLatestOlmSession(curve25519);
|
||||
}
|
||||
|
||||
void
|
||||
saveOlmAccount(const std::string &pickled)
|
||||
|
|
19
src/Cache.h
19
src/Cache.h
|
@ -44,16 +44,6 @@ displayName(const QString &room_id, const QString &user_id);
|
|||
QString
|
||||
avatarUrl(const QString &room_id, const QString &user_id);
|
||||
|
||||
void
|
||||
removeDisplayName(const QString &room_id, const QString &user_id);
|
||||
void
|
||||
removeAvatarUrl(const QString &room_id, const QString &user_id);
|
||||
|
||||
void
|
||||
insertDisplayName(const QString &room_id, const QString &user_id, const QString &display_name);
|
||||
void
|
||||
insertAvatarUrl(const QString &room_id, const QString &user_id, const QString &avatar_url);
|
||||
|
||||
// presence
|
||||
mtx::presence::PresenceState
|
||||
presenceState(const std::string &user_id);
|
||||
|
@ -74,9 +64,6 @@ markDeviceVerified(const std::string &user_id, const std::string &device);
|
|||
void
|
||||
markDeviceUnverified(const std::string &user_id, const std::string &device);
|
||||
|
||||
//! Load saved data for the display names & avatars.
|
||||
void
|
||||
populateMembers();
|
||||
std::vector<std::string>
|
||||
joinedRooms();
|
||||
|
||||
|
@ -292,11 +279,15 @@ inboundMegolmSessionExists(const MegolmSessionIndex &index);
|
|||
// Olm Sessions
|
||||
//
|
||||
void
|
||||
saveOlmSession(const std::string &curve25519, mtx::crypto::OlmSessionPtr session);
|
||||
saveOlmSession(const std::string &curve25519,
|
||||
mtx::crypto::OlmSessionPtr session,
|
||||
uint64_t timestamp);
|
||||
std::vector<std::string>
|
||||
getOlmSessions(const std::string &curve25519);
|
||||
std::optional<mtx::crypto::OlmSessionPtr>
|
||||
getOlmSession(const std::string &curve25519, const std::string &session_id);
|
||||
std::optional<mtx::crypto::OlmSessionPtr>
|
||||
getLatestOlmSession(const std::string &curve25519);
|
||||
|
||||
void
|
||||
saveOlmAccount(const std::string &pickled);
|
||||
|
|
|
@ -66,6 +66,16 @@ struct OlmSessionStorage
|
|||
std::mutex group_inbound_mtx;
|
||||
};
|
||||
|
||||
struct StoredOlmSession
|
||||
{
|
||||
std::uint64_t last_message_ts = 0;
|
||||
std::string pickled_session;
|
||||
};
|
||||
void
|
||||
to_json(nlohmann::json &obj, const StoredOlmSession &msg);
|
||||
void
|
||||
from_json(const nlohmann::json &obj, StoredOlmSession &msg);
|
||||
|
||||
//! Verification status of a single user
|
||||
struct VerificationStatus
|
||||
{
|
||||
|
|
|
@ -46,9 +46,9 @@ class Cache : public QObject
|
|||
public:
|
||||
Cache(const QString &userId, QObject *parent = nullptr);
|
||||
|
||||
static std::string displayName(const std::string &room_id, const std::string &user_id);
|
||||
static QString displayName(const QString &room_id, const QString &user_id);
|
||||
static QString avatarUrl(const QString &room_id, const QString &user_id);
|
||||
std::string displayName(const std::string &room_id, const std::string &user_id);
|
||||
QString displayName(const QString &room_id, const QString &user_id);
|
||||
QString avatarUrl(const QString &room_id, const QString &user_id);
|
||||
|
||||
// presence
|
||||
mtx::presence::PresenceState presenceState(const std::string &user_id);
|
||||
|
@ -71,18 +71,6 @@ public:
|
|||
void markDeviceVerified(const std::string &user_id, const std::string &device);
|
||||
void markDeviceUnverified(const std::string &user_id, const std::string &device);
|
||||
|
||||
static void removeDisplayName(const QString &room_id, const QString &user_id);
|
||||
static void removeAvatarUrl(const QString &room_id, const QString &user_id);
|
||||
|
||||
static void insertDisplayName(const QString &room_id,
|
||||
const QString &user_id,
|
||||
const QString &display_name);
|
||||
static void insertAvatarUrl(const QString &room_id,
|
||||
const QString &user_id,
|
||||
const QString &avatar_url);
|
||||
|
||||
//! Load saved data for the display names & avatars.
|
||||
void populateMembers();
|
||||
std::vector<std::string> joinedRooms();
|
||||
|
||||
QMap<QString, RoomInfo> roomInfo(bool withInvites = true);
|
||||
|
@ -266,10 +254,14 @@ public:
|
|||
//
|
||||
// Olm Sessions
|
||||
//
|
||||
void saveOlmSession(const std::string &curve25519, mtx::crypto::OlmSessionPtr session);
|
||||
void saveOlmSession(const std::string &curve25519,
|
||||
mtx::crypto::OlmSessionPtr session,
|
||||
uint64_t timestamp);
|
||||
std::vector<std::string> getOlmSessions(const std::string &curve25519);
|
||||
std::optional<mtx::crypto::OlmSessionPtr> getOlmSession(const std::string &curve25519,
|
||||
const std::string &session_id);
|
||||
std::optional<mtx::crypto::OlmSessionPtr> getLatestOlmSession(
|
||||
const std::string &curve25519);
|
||||
|
||||
void saveOlmAccount(const std::string &pickled);
|
||||
std::string restoreOlmAccount();
|
||||
|
@ -304,6 +296,8 @@ private:
|
|||
QString getInviteRoomTopic(lmdb::txn &txn, lmdb::dbi &statesdb);
|
||||
QString getInviteRoomAvatarUrl(lmdb::txn &txn, lmdb::dbi &statesdb, lmdb::dbi &membersdb);
|
||||
|
||||
std::optional<MemberInfo> getMember(const std::string &room_id, const std::string &user_id);
|
||||
|
||||
std::string getLastEventId(lmdb::txn &txn, const std::string &room_id);
|
||||
DescInfo getLastMessageInfo(lmdb::txn &txn, const std::string &room_id);
|
||||
void saveTimelineMessages(lmdb::txn &txn,
|
||||
|
@ -360,25 +354,12 @@ private:
|
|||
lmdb::val(e->state_key),
|
||||
lmdb::val(json(tmp).dump()));
|
||||
|
||||
insertDisplayName(QString::fromStdString(room_id),
|
||||
QString::fromStdString(e->state_key),
|
||||
QString::fromStdString(display_name));
|
||||
|
||||
insertAvatarUrl(QString::fromStdString(room_id),
|
||||
QString::fromStdString(e->state_key),
|
||||
QString::fromStdString(e->content.avatar_url));
|
||||
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
lmdb::dbi_del(
|
||||
txn, membersdb, lmdb::val(e->state_key), lmdb::val(""));
|
||||
|
||||
removeDisplayName(QString::fromStdString(room_id),
|
||||
QString::fromStdString(e->state_key));
|
||||
removeAvatarUrl(QString::fromStdString(room_id),
|
||||
QString::fromStdString(e->state_key));
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -565,7 +546,7 @@ private:
|
|||
lmdb::dbi getOlmSessionsDb(lmdb::txn &txn, const std::string &curve25519_key)
|
||||
{
|
||||
return lmdb::dbi::open(
|
||||
txn, std::string("olm_sessions/" + curve25519_key).c_str(), MDB_CREATE);
|
||||
txn, std::string("olm_sessions.v2/" + curve25519_key).c_str(), MDB_CREATE);
|
||||
}
|
||||
|
||||
QString getDisplayName(const mtx::events::StateEvent<mtx::events::state::Member> &event)
|
||||
|
@ -598,9 +579,6 @@ private:
|
|||
QString localUserId_;
|
||||
QString cacheDirectory_;
|
||||
|
||||
static QHash<QString, QString> DisplayNames;
|
||||
static QHash<QString, QString> AvatarUrls;
|
||||
|
||||
OlmSessionStorage session_storage;
|
||||
VerificationStorage verification_storage;
|
||||
};
|
||||
|
|
|
@ -73,6 +73,8 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
|
|||
{
|
||||
setObjectName("chatPage");
|
||||
|
||||
instance_ = this;
|
||||
|
||||
qRegisterMetaType<std::optional<mtx::crypto::EncryptedFile>>();
|
||||
qRegisterMetaType<std::optional<RelatedInfo>>();
|
||||
qRegisterMetaType<mtx::presence::PresenceState>();
|
||||
|
@ -124,7 +126,7 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
|
|||
contentLayout_->setSpacing(0);
|
||||
contentLayout_->setMargin(0);
|
||||
|
||||
view_manager_ = new TimelineViewManager(userSettings_, &callManager_, this);
|
||||
view_manager_ = new TimelineViewManager(&callManager_, this);
|
||||
|
||||
contentLayout_->addWidget(view_manager_->getWidget());
|
||||
|
||||
|
@ -270,7 +272,7 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
|
|||
connect(room_list_,
|
||||
SIGNAL(totalUnreadMessageCountUpdated(int)),
|
||||
this,
|
||||
SLOT(showUnreadMessageNotification(int)));
|
||||
SIGNAL(unreadMessages(int)));
|
||||
|
||||
connect(text_input_,
|
||||
&TextInputWidget::sendTextMessage,
|
||||
|
@ -593,8 +595,6 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
|
|||
connectCallMessage<mtx::events::msg::CallCandidates>();
|
||||
connectCallMessage<mtx::events::msg::CallAnswer>();
|
||||
connectCallMessage<mtx::events::msg::CallHangUp>();
|
||||
|
||||
instance_ = this;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -629,7 +629,7 @@ ChatPage::resetUI()
|
|||
user_info_widget_->reset();
|
||||
view_manager_->clearAll();
|
||||
|
||||
showUnreadMessageNotification(0);
|
||||
emit unreadMessages(0);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -754,18 +754,6 @@ ChatPage::bootstrap(QString userid, QString homeserver, QString token)
|
|||
tryInitialSync();
|
||||
}
|
||||
|
||||
void
|
||||
ChatPage::showUnreadMessageNotification(int count)
|
||||
{
|
||||
emit unreadMessages(count);
|
||||
|
||||
// TODO: Make the default title a const.
|
||||
if (count == 0)
|
||||
emit changeWindowTitle("nheko");
|
||||
else
|
||||
emit changeWindowTitle(QString("nheko (%1)").arg(count));
|
||||
}
|
||||
|
||||
void
|
||||
ChatPage::loadStateFromCache()
|
||||
{
|
||||
|
@ -777,8 +765,6 @@ ChatPage::loadStateFromCache()
|
|||
cache::restoreSessions();
|
||||
olm::client()->load(cache::restoreOlmAccount(), STORAGE_SECRET_KEY);
|
||||
|
||||
cache::populateMembers();
|
||||
|
||||
emit initializeEmptyViews(cache::roomMessages());
|
||||
emit initializeRoomList(cache::roomInfo());
|
||||
emit initializeMentions(cache::getTimelineMentions());
|
||||
|
@ -1252,6 +1238,12 @@ ChatPage::unbanUser(QString userid, QString reason)
|
|||
reason.trimmed().toStdString());
|
||||
}
|
||||
|
||||
void
|
||||
ChatPage::receivedSessionKey(const std::string &room_id, const std::string &session_id)
|
||||
{
|
||||
view_manager_->receivedSessionKey(room_id, session_id);
|
||||
}
|
||||
|
||||
void
|
||||
ChatPage::sendTypingNotifications()
|
||||
{
|
||||
|
|
|
@ -107,6 +107,8 @@ public slots:
|
|||
void banUser(QString userid, QString reason);
|
||||
void unbanUser(QString userid, QString reason);
|
||||
|
||||
void receivedSessionKey(const std::string &room_id, const std::string &session_id);
|
||||
|
||||
signals:
|
||||
void connectionLost();
|
||||
void connectionRestored();
|
||||
|
@ -128,7 +130,7 @@ signals:
|
|||
|
||||
void contentLoaded();
|
||||
void closing();
|
||||
void changeWindowTitle(const QString &msg);
|
||||
void changeWindowTitle(const int);
|
||||
void unreadMessages(int count);
|
||||
void showNotification(const QString &msg);
|
||||
void showLoginPage(const QString &msg);
|
||||
|
@ -186,7 +188,6 @@ signals:
|
|||
void receivedDeviceVerificationDone(const mtx::events::msg::KeyVerificationDone &message);
|
||||
|
||||
private slots:
|
||||
void showUnreadMessageNotification(int count);
|
||||
void logout();
|
||||
void removeRoom(const QString &room_id);
|
||||
void dropToLoginPage(const QString &msg);
|
||||
|
|
|
@ -53,10 +53,11 @@
|
|||
|
||||
MainWindow *MainWindow::instance_ = nullptr;
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent)
|
||||
MainWindow::MainWindow(const QString profile, QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
, profile_{profile}
|
||||
{
|
||||
setWindowTitle("nheko");
|
||||
setWindowTitle(0);
|
||||
setObjectName("MainWindow");
|
||||
|
||||
modal_ = new OverlayModal(this);
|
||||
|
@ -103,8 +104,7 @@ MainWindow::MainWindow(QWidget *parent)
|
|||
connect(chat_page_, &ChatPage::closing, this, &MainWindow::showWelcomePage);
|
||||
connect(
|
||||
chat_page_, &ChatPage::showOverlayProgressBar, this, &MainWindow::showOverlayProgressBar);
|
||||
connect(
|
||||
chat_page_, SIGNAL(changeWindowTitle(QString)), this, SLOT(setWindowTitle(QString)));
|
||||
connect(chat_page_, &ChatPage::unreadMessages, this, &MainWindow::setWindowTitle);
|
||||
connect(chat_page_, SIGNAL(unreadMessages(int)), trayIcon_, SLOT(setUnreadCount(int)));
|
||||
connect(chat_page_, &ChatPage::showLoginPage, this, [this](const QString &msg) {
|
||||
login_page_->loginError(msg);
|
||||
|
@ -178,6 +178,18 @@ MainWindow::MainWindow(QWidget *parent)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
MainWindow::setWindowTitle(int notificationCount)
|
||||
{
|
||||
QString name = "nheko";
|
||||
if (!profile_.isEmpty())
|
||||
name += " | " + profile_;
|
||||
if (notificationCount > 0) {
|
||||
name.append(QString{" (%1)"}.arg(notificationCount));
|
||||
}
|
||||
QMainWindow::setWindowTitle(name);
|
||||
}
|
||||
|
||||
void
|
||||
MainWindow::showEvent(QShowEvent *event)
|
||||
{
|
||||
|
|
|
@ -62,7 +62,7 @@ class MainWindow : public QMainWindow
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit MainWindow(QWidget *parent = nullptr);
|
||||
explicit MainWindow(const QString name, QWidget *parent = nullptr);
|
||||
|
||||
static MainWindow *instance() { return instance_; };
|
||||
void saveCurrentWindowSize();
|
||||
|
@ -113,6 +113,8 @@ private slots:
|
|||
void showOverlayProgressBar();
|
||||
void removeOverlayProgressBar();
|
||||
|
||||
virtual void setWindowTitle(int notificationCount);
|
||||
|
||||
private:
|
||||
bool loadJdenticonPlugin();
|
||||
|
||||
|
@ -147,4 +149,6 @@ private:
|
|||
LoadingIndicator *spinner_ = nullptr;
|
||||
|
||||
JdenticonInterface *jdenticonInteface_ = nullptr;
|
||||
|
||||
QString profile_;
|
||||
};
|
||||
|
|
521
src/Olm.cpp
521
src/Olm.cpp
|
@ -1,14 +1,15 @@
|
|||
#include "Olm.h"
|
||||
|
||||
#include <QObject>
|
||||
#include <variant>
|
||||
|
||||
#include "Olm.h"
|
||||
|
||||
#include "Cache.h"
|
||||
#include "Cache_p.h"
|
||||
#include "ChatPage.h"
|
||||
#include "DeviceVerificationFlow.h"
|
||||
#include "Logging.h"
|
||||
#include "MatrixClient.h"
|
||||
#include "UserSettingsPage.h"
|
||||
#include "Utils.h"
|
||||
|
||||
static const std::string STORAGE_SECRET_KEY("secret");
|
||||
|
@ -46,7 +47,7 @@ handle_to_device_messages(const std::vector<mtx::events::collections::DeviceEven
|
|||
|
||||
if (msg_type == to_string(mtx::events::EventType::RoomEncrypted)) {
|
||||
try {
|
||||
OlmMessage olm_msg = j_msg;
|
||||
olm::OlmMessage olm_msg = j_msg;
|
||||
handle_olm_message(std::move(olm_msg));
|
||||
} catch (const nlohmann::json::exception &e) {
|
||||
nhlog::crypto()->warn(
|
||||
|
@ -55,10 +56,6 @@ handle_to_device_messages(const std::vector<mtx::events::collections::DeviceEven
|
|||
nhlog::crypto()->warn("validation error for olm message: {} {}",
|
||||
e.what(),
|
||||
j_msg.dump(2));
|
||||
|
||||
nhlog::crypto()->warn("validation error for olm message: {} {}",
|
||||
e.what(),
|
||||
j_msg.dump(2));
|
||||
}
|
||||
|
||||
} else if (msg_type == to_string(mtx::events::EventType::RoomKeyRequest)) {
|
||||
|
@ -249,7 +246,10 @@ handle_pre_key_olm_message(const std::string &sender,
|
|||
nhlog::crypto()->debug("decrypted message: \n {}", plaintext.dump(2));
|
||||
|
||||
try {
|
||||
cache::saveOlmSession(sender_key, std::move(inbound_session));
|
||||
nhlog::crypto()->debug("New olm session: {}",
|
||||
mtx::crypto::session_id(inbound_session.get()));
|
||||
cache::saveOlmSession(
|
||||
sender_key, std::move(inbound_session), QDateTime::currentMSecsSinceEpoch());
|
||||
} catch (const lmdb::error &e) {
|
||||
nhlog::db()->warn(
|
||||
"failed to save inbound olm session from {}: {}", sender, e.what());
|
||||
|
@ -317,7 +317,10 @@ try_olm_decryption(const std::string &sender_key, const mtx::events::msg::OlmCip
|
|||
|
||||
try {
|
||||
text = olm::client()->decrypt_message(session->get(), msg.type, msg.body);
|
||||
cache::saveOlmSession(id, std::move(session.value()));
|
||||
nhlog::crypto()->debug("Updated olm session: {}",
|
||||
mtx::crypto::session_id(session->get()));
|
||||
cache::saveOlmSession(
|
||||
id, std::move(session.value()), QDateTime::currentMSecsSinceEpoch());
|
||||
} catch (const mtx::crypto::olm_exception &e) {
|
||||
nhlog::crypto()->debug("failed to decrypt olm message ({}, {}) with {}: {}",
|
||||
msg.type,
|
||||
|
@ -366,6 +369,8 @@ create_inbound_megolm_session(const mtx::events::DeviceEvent<mtx::events::msg::R
|
|||
|
||||
nhlog::crypto()->info(
|
||||
"established inbound megolm session ({}, {})", roomKey.content.room_id, roomKey.sender);
|
||||
|
||||
ChatPage::instance()->receivedSessionKey(index.room_id, index.session_id);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -389,9 +394,10 @@ import_inbound_megolm_session(
|
|||
return;
|
||||
}
|
||||
|
||||
// TODO(Nico): Reload messages encrypted with this key.
|
||||
nhlog::crypto()->info(
|
||||
"established inbound megolm session ({}, {})", roomKey.content.room_id, roomKey.sender);
|
||||
|
||||
ChatPage::instance()->receivedSessionKey(index.room_id, index.session_id);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -402,48 +408,24 @@ mark_keys_as_published()
|
|||
}
|
||||
|
||||
void
|
||||
request_keys(const std::string &room_id, const std::string &event_id)
|
||||
{
|
||||
nhlog::crypto()->info("requesting keys for event {} at {}", event_id, room_id);
|
||||
|
||||
http::client()->get_event(
|
||||
room_id,
|
||||
event_id,
|
||||
[event_id, room_id](const mtx::events::collections::TimelineEvents &res,
|
||||
mtx::http::RequestErr err) {
|
||||
using namespace mtx::events;
|
||||
|
||||
if (err) {
|
||||
nhlog::net()->warn(
|
||||
"failed to retrieve event {} from {}", event_id, room_id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!std::holds_alternative<EncryptedEvent<msg::Encrypted>>(res)) {
|
||||
nhlog::net()->info(
|
||||
"retrieved event is not encrypted: {} from {}", event_id, room_id);
|
||||
return;
|
||||
}
|
||||
|
||||
olm::send_key_request_for(room_id, std::get<EncryptedEvent<msg::Encrypted>>(res));
|
||||
});
|
||||
}
|
||||
|
||||
void
|
||||
send_key_request_for(const std::string &room_id,
|
||||
const mtx::events::EncryptedEvent<mtx::events::msg::Encrypted> &e)
|
||||
send_key_request_for(mtx::events::EncryptedEvent<mtx::events::msg::Encrypted> e,
|
||||
const std::string &request_id,
|
||||
bool cancel)
|
||||
{
|
||||
using namespace mtx::events;
|
||||
|
||||
nhlog::crypto()->debug("sending key request: {}", json(e).dump(2));
|
||||
nhlog::crypto()->debug("sending key request: sender_key {}, session_id {}",
|
||||
e.content.sender_key,
|
||||
e.content.session_id);
|
||||
|
||||
mtx::events::msg::KeyRequest request;
|
||||
request.action = mtx::events::msg::RequestAction::Request;
|
||||
request.action = !cancel ? mtx::events::msg::RequestAction::Request
|
||||
: mtx::events::msg::RequestAction::Cancellation;
|
||||
request.algorithm = MEGOLM_ALGO;
|
||||
request.room_id = room_id;
|
||||
request.room_id = e.room_id;
|
||||
request.sender_key = e.content.sender_key;
|
||||
request.session_id = e.content.session_id;
|
||||
request.request_id = "key_request." + http::client()->generate_txn_id();
|
||||
request.request_id = request_id;
|
||||
request.requesting_device_id = http::client()->device_id();
|
||||
|
||||
nhlog::crypto()->debug("m.room_key_request: {}", json(request).dump(2));
|
||||
|
@ -493,19 +475,18 @@ handle_key_request_message(const mtx::events::DeviceEvent<mtx::events::msg::KeyR
|
|||
nhlog::crypto()->warn("requested session not found in room: {}",
|
||||
req.content.room_id);
|
||||
|
||||
nhlog::crypto()->warn("requested session not found in room: {}",
|
||||
req.content.room_id);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Check that the requested session_id and the one we have saved match.
|
||||
const auto session = cache::getOutboundMegolmSession(req.content.room_id);
|
||||
if (req.content.session_id != session.data.session_id) {
|
||||
nhlog::crypto()->warn("session id of retrieved session doesn't match the request: "
|
||||
"requested({}), ours({})",
|
||||
req.content.session_id,
|
||||
session.data.session_id);
|
||||
MegolmSessionIndex index{};
|
||||
index.room_id = req.content.room_id;
|
||||
index.session_id = req.content.session_id;
|
||||
index.sender_key = olm::client()->identity_keys().curve25519;
|
||||
|
||||
const auto session = cache::getInboundMegolmSession(index);
|
||||
if (!session) {
|
||||
nhlog::crypto()->warn("No session with id {} in db", req.content.session_id);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -517,168 +498,56 @@ handle_key_request_message(const mtx::events::DeviceEvent<mtx::events::msg::KeyR
|
|||
return;
|
||||
}
|
||||
|
||||
if (!utils::respondsToKeyRequests(req.content.room_id)) {
|
||||
// check if device is verified
|
||||
auto verificationStatus = cache::verificationStatus(req.sender);
|
||||
bool verifiedDevice = false;
|
||||
if (verificationStatus &&
|
||||
ChatPage::instance()->userSettings()->shareKeysWithTrustedUsers()) {
|
||||
for (const auto &dev : verificationStatus->verified_devices) {
|
||||
if (dev == req.content.requesting_device_id) {
|
||||
verifiedDevice = true;
|
||||
nhlog::crypto()->debug("Verified device: {}", dev);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!utils::respondsToKeyRequests(req.content.room_id) && !verifiedDevice) {
|
||||
nhlog::crypto()->debug("ignoring all key requests for room {}",
|
||||
req.content.room_id);
|
||||
return;
|
||||
}
|
||||
|
||||
auto session_key = mtx::crypto::export_session(session);
|
||||
//
|
||||
// Prepare the m.room_key event.
|
||||
//
|
||||
auto payload = json{{"algorithm", "m.megolm.v1.aes-sha2"},
|
||||
{"room_id", req.content.room_id},
|
||||
{"session_id", req.content.session_id},
|
||||
{"session_key", session.data.session_key}};
|
||||
mtx::events::msg::ForwardedRoomKey forward_key{};
|
||||
forward_key.algorithm = MEGOLM_ALGO;
|
||||
forward_key.room_id = index.room_id;
|
||||
forward_key.session_id = index.session_id;
|
||||
forward_key.session_key = session_key;
|
||||
forward_key.sender_key = index.sender_key;
|
||||
|
||||
send_megolm_key_to_device(req.sender, req.content.requesting_device_id, payload);
|
||||
// TODO(Nico): Figure out if this is correct
|
||||
forward_key.sender_claimed_ed25519_key = olm::client()->identity_keys().ed25519;
|
||||
forward_key.forwarding_curve25519_key_chain = {};
|
||||
|
||||
send_megolm_key_to_device(req.sender, req.content.requesting_device_id, forward_key);
|
||||
}
|
||||
|
||||
void
|
||||
send_megolm_key_to_device(const std::string &user_id,
|
||||
const std::string &device_id,
|
||||
const json &payload)
|
||||
const mtx::events::msg::ForwardedRoomKey &payload)
|
||||
{
|
||||
mtx::requests::QueryKeys req;
|
||||
req.device_keys[user_id] = {device_id};
|
||||
mtx::events::DeviceEvent<mtx::events::msg::ForwardedRoomKey> room_key;
|
||||
room_key.content = payload;
|
||||
room_key.type = mtx::events::EventType::ForwardedRoomKey;
|
||||
|
||||
http::client()->query_keys(
|
||||
req,
|
||||
[payload, user_id, device_id](const mtx::responses::QueryKeys &res,
|
||||
mtx::http::RequestErr err) {
|
||||
if (err) {
|
||||
nhlog::net()->warn("failed to query device keys: {} {}",
|
||||
err->matrix_error.error,
|
||||
static_cast<int>(err->status_code));
|
||||
return;
|
||||
}
|
||||
|
||||
nhlog::net()->warn("retrieved device keys from {}, {}", user_id, device_id);
|
||||
|
||||
if (res.device_keys.empty()) {
|
||||
nhlog::net()->warn("no devices retrieved {}", user_id);
|
||||
return;
|
||||
}
|
||||
|
||||
auto device = res.device_keys.begin()->second;
|
||||
if (device.empty()) {
|
||||
nhlog::net()->warn("no keys retrieved from user, device {}", user_id);
|
||||
return;
|
||||
}
|
||||
|
||||
const auto device_keys = device.begin()->second.keys;
|
||||
const auto curveKey = "curve25519:" + device_id;
|
||||
const auto edKey = "ed25519:" + device_id;
|
||||
|
||||
if ((device_keys.find(curveKey) == device_keys.end()) ||
|
||||
(device_keys.find(edKey) == device_keys.end())) {
|
||||
nhlog::net()->debug("ignoring malformed keys for device {}", device_id);
|
||||
return;
|
||||
}
|
||||
|
||||
DevicePublicKeys pks;
|
||||
pks.ed25519 = device_keys.at(edKey);
|
||||
pks.curve25519 = device_keys.at(curveKey);
|
||||
|
||||
try {
|
||||
if (!mtx::crypto::verify_identity_signature(json(device.begin()->second),
|
||||
DeviceId(device_id),
|
||||
UserId(user_id))) {
|
||||
nhlog::crypto()->warn("failed to verify identity keys: {}",
|
||||
json(device).dump(2));
|
||||
return;
|
||||
}
|
||||
} catch (const json::exception &e) {
|
||||
nhlog::crypto()->warn("failed to parse device key json: {}", e.what());
|
||||
return;
|
||||
} catch (const mtx::crypto::olm_exception &e) {
|
||||
nhlog::crypto()->warn("failed to verify device key json: {}", e.what());
|
||||
return;
|
||||
}
|
||||
|
||||
auto room_key = olm::client()
|
||||
->create_room_key_event(UserId(user_id), pks.ed25519, payload)
|
||||
.dump();
|
||||
|
||||
mtx::requests::ClaimKeys claim_keys;
|
||||
claim_keys.one_time_keys[user_id][device_id] = mtx::crypto::SIGNED_CURVE25519;
|
||||
|
||||
http::client()->claim_keys(
|
||||
claim_keys,
|
||||
[room_key, user_id, device_id, pks](const mtx::responses::ClaimKeys &res,
|
||||
mtx::http::RequestErr err) {
|
||||
if (err) {
|
||||
nhlog::net()->warn("claim keys error: {} {} {}",
|
||||
err->matrix_error.error,
|
||||
err->parse_error,
|
||||
static_cast<int>(err->status_code));
|
||||
return;
|
||||
}
|
||||
|
||||
nhlog::net()->info("claimed keys for {}", user_id);
|
||||
|
||||
if (res.one_time_keys.size() == 0) {
|
||||
nhlog::net()->info("no one-time keys found for user_id: {}",
|
||||
user_id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (res.one_time_keys.find(user_id) == res.one_time_keys.end()) {
|
||||
nhlog::net()->info("no one-time keys found for user_id: {}",
|
||||
user_id);
|
||||
return;
|
||||
}
|
||||
|
||||
auto retrieved_devices = res.one_time_keys.at(user_id);
|
||||
if (retrieved_devices.empty()) {
|
||||
nhlog::net()->info("claiming keys for {}: no retrieved devices",
|
||||
device_id);
|
||||
return;
|
||||
}
|
||||
|
||||
json body;
|
||||
body["messages"][user_id] = json::object();
|
||||
|
||||
auto device = retrieved_devices.begin()->second;
|
||||
nhlog::net()->debug("{} : \n {}", device_id, device.dump(2));
|
||||
|
||||
json device_msg;
|
||||
|
||||
try {
|
||||
auto olm_session = olm::client()->create_outbound_session(
|
||||
pks.curve25519, device.begin()->at("key"));
|
||||
|
||||
device_msg = olm::client()->create_olm_encrypted_content(
|
||||
olm_session.get(), room_key, pks.curve25519);
|
||||
|
||||
cache::saveOlmSession(pks.curve25519, std::move(olm_session));
|
||||
} catch (const json::exception &e) {
|
||||
nhlog::crypto()->warn("creating outbound session: {}",
|
||||
e.what());
|
||||
return;
|
||||
} catch (const mtx::crypto::olm_exception &e) {
|
||||
nhlog::crypto()->warn("creating outbound session: {}",
|
||||
e.what());
|
||||
return;
|
||||
}
|
||||
|
||||
body["messages"][user_id][device_id] = device_msg;
|
||||
|
||||
nhlog::net()->info(
|
||||
"sending m.room_key event to {}:{}", user_id, device_id);
|
||||
http::client()->send_to_device(
|
||||
"m.room.encrypted", body, [user_id](mtx::http::RequestErr err) {
|
||||
if (err) {
|
||||
nhlog::net()->warn("failed to send "
|
||||
"send_to_device "
|
||||
"message: {}",
|
||||
err->matrix_error.error);
|
||||
}
|
||||
|
||||
nhlog::net()->info("m.room_key send to {}", user_id);
|
||||
});
|
||||
});
|
||||
});
|
||||
std::map<std::string, std::vector<std::string>> targets;
|
||||
targets[user_id] = {device_id};
|
||||
send_encrypted_to_device_messages(targets, room_key);
|
||||
}
|
||||
|
||||
DecryptionResult
|
||||
|
@ -727,4 +596,258 @@ decryptEvent(const MegolmSessionIndex &index,
|
|||
|
||||
return {std::nullopt, std::nullopt, std::move(te.data)};
|
||||
}
|
||||
|
||||
//! Send encrypted to device messages, targets is a map from userid to device ids or {} for all
|
||||
//! devices
|
||||
void
|
||||
send_encrypted_to_device_messages(const std::map<std::string, std::vector<std::string>> targets,
|
||||
const mtx::events::collections::DeviceEvents &event,
|
||||
bool force_new_session)
|
||||
{
|
||||
nlohmann::json ev_json = std::visit([](const auto &e) { return json(e); }, event);
|
||||
|
||||
std::map<std::string, std::vector<std::string>> keysToQuery;
|
||||
mtx::requests::ClaimKeys claims;
|
||||
std::map<mtx::identifiers::User, std::map<std::string, mtx::events::msg::OlmEncrypted>>
|
||||
messages;
|
||||
std::map<std::string, std::map<std::string, DevicePublicKeys>> pks;
|
||||
|
||||
for (const auto &[user, devices] : targets) {
|
||||
auto deviceKeys = cache::client()->userKeys(user);
|
||||
|
||||
// no keys for user, query them
|
||||
if (!deviceKeys) {
|
||||
keysToQuery[user] = devices;
|
||||
continue;
|
||||
}
|
||||
|
||||
auto deviceTargets = devices;
|
||||
if (devices.empty()) {
|
||||
deviceTargets.clear();
|
||||
for (const auto &[device, keys] : deviceKeys->device_keys) {
|
||||
(void)keys;
|
||||
deviceTargets.push_back(device);
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &device : deviceTargets) {
|
||||
if (!deviceKeys->device_keys.count(device)) {
|
||||
keysToQuery[user] = {};
|
||||
break;
|
||||
}
|
||||
|
||||
auto d = deviceKeys->device_keys.at(device);
|
||||
|
||||
auto session =
|
||||
cache::getLatestOlmSession(d.keys.at("curve25519:" + device));
|
||||
if (!session || force_new_session) {
|
||||
claims.one_time_keys[user][device] = mtx::crypto::SIGNED_CURVE25519;
|
||||
pks[user][device].ed25519 = d.keys.at("ed25519:" + device);
|
||||
pks[user][device].curve25519 = d.keys.at("curve25519:" + device);
|
||||
continue;
|
||||
}
|
||||
|
||||
messages[mtx::identifiers::parse<mtx::identifiers::User>(user)][device] =
|
||||
olm::client()
|
||||
->create_olm_encrypted_content(session->get(),
|
||||
ev_json,
|
||||
UserId(user),
|
||||
d.keys.at("ed25519:" + device),
|
||||
d.keys.at("curve25519:" + device))
|
||||
.get<mtx::events::msg::OlmEncrypted>();
|
||||
|
||||
try {
|
||||
nhlog::crypto()->debug("Updated olm session: {}",
|
||||
mtx::crypto::session_id(session->get()));
|
||||
cache::saveOlmSession(d.keys.at("curve25519:" + device),
|
||||
std::move(*session),
|
||||
QDateTime::currentMSecsSinceEpoch());
|
||||
} catch (const lmdb::error &e) {
|
||||
nhlog::db()->critical("failed to save outbound olm session: {}",
|
||||
e.what());
|
||||
} catch (const mtx::crypto::olm_exception &e) {
|
||||
nhlog::crypto()->critical(
|
||||
"failed to pickle outbound olm session: {}", e.what());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!messages.empty())
|
||||
http::client()->send_to_device<mtx::events::msg::OlmEncrypted>(
|
||||
http::client()->generate_txn_id(), messages, [](mtx::http::RequestErr err) {
|
||||
if (err) {
|
||||
nhlog::net()->warn("failed to send "
|
||||
"send_to_device "
|
||||
"message: {}",
|
||||
err->matrix_error.error);
|
||||
}
|
||||
});
|
||||
|
||||
auto BindPks = [ev_json](decltype(pks) pks_temp) {
|
||||
return [pks = pks_temp, ev_json](const mtx::responses::ClaimKeys &res,
|
||||
mtx::http::RequestErr) {
|
||||
std::map<mtx::identifiers::User,
|
||||
std::map<std::string, mtx::events::msg::OlmEncrypted>>
|
||||
messages;
|
||||
for (const auto &[user_id, retrieved_devices] : res.one_time_keys) {
|
||||
nhlog::net()->debug("claimed keys for {}", user_id);
|
||||
if (retrieved_devices.size() == 0) {
|
||||
nhlog::net()->debug(
|
||||
"no one-time keys found for user_id: {}", user_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
for (const auto &rd : retrieved_devices) {
|
||||
const auto device_id = rd.first;
|
||||
|
||||
nhlog::net()->debug(
|
||||
"{} : \n {}", device_id, rd.second.dump(2));
|
||||
|
||||
if (rd.second.empty() ||
|
||||
!rd.second.begin()->contains("key")) {
|
||||
nhlog::net()->warn(
|
||||
"Skipping device {} as it has no key.",
|
||||
device_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
// TODO: Verify signatures
|
||||
auto otk = rd.second.begin()->at("key");
|
||||
|
||||
auto id_key = pks.at(user_id).at(device_id).curve25519;
|
||||
auto session =
|
||||
olm::client()->create_outbound_session(id_key, otk);
|
||||
|
||||
messages[mtx::identifiers::parse<mtx::identifiers::User>(
|
||||
user_id)][device_id] =
|
||||
olm::client()
|
||||
->create_olm_encrypted_content(
|
||||
session.get(),
|
||||
ev_json,
|
||||
UserId(user_id),
|
||||
pks.at(user_id).at(device_id).ed25519,
|
||||
id_key)
|
||||
.get<mtx::events::msg::OlmEncrypted>();
|
||||
|
||||
try {
|
||||
nhlog::crypto()->debug(
|
||||
"Updated olm session: {}",
|
||||
mtx::crypto::session_id(session.get()));
|
||||
cache::saveOlmSession(
|
||||
id_key,
|
||||
std::move(session),
|
||||
QDateTime::currentMSecsSinceEpoch());
|
||||
} catch (const lmdb::error &e) {
|
||||
nhlog::db()->critical(
|
||||
"failed to save outbound olm session: {}",
|
||||
e.what());
|
||||
} catch (const mtx::crypto::olm_exception &e) {
|
||||
nhlog::crypto()->critical(
|
||||
"failed to pickle outbound olm session: {}",
|
||||
e.what());
|
||||
}
|
||||
}
|
||||
nhlog::net()->info("send_to_device: {}", user_id);
|
||||
}
|
||||
|
||||
if (!messages.empty())
|
||||
http::client()->send_to_device<mtx::events::msg::OlmEncrypted>(
|
||||
http::client()->generate_txn_id(),
|
||||
messages,
|
||||
[](mtx::http::RequestErr err) {
|
||||
if (err) {
|
||||
nhlog::net()->warn("failed to send "
|
||||
"send_to_device "
|
||||
"message: {}",
|
||||
err->matrix_error.error);
|
||||
}
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
http::client()->claim_keys(claims, BindPks(pks));
|
||||
|
||||
if (!keysToQuery.empty()) {
|
||||
mtx::requests::QueryKeys req;
|
||||
req.device_keys = keysToQuery;
|
||||
http::client()->query_keys(
|
||||
req,
|
||||
[ev_json, BindPks](const mtx::responses::QueryKeys &res,
|
||||
mtx::http::RequestErr err) {
|
||||
if (err) {
|
||||
nhlog::net()->warn("failed to query device keys: {} {}",
|
||||
err->matrix_error.error,
|
||||
static_cast<int>(err->status_code));
|
||||
return;
|
||||
}
|
||||
|
||||
nhlog::net()->info("queried keys");
|
||||
|
||||
cache::client()->updateUserKeys(cache::nextBatchToken(), res);
|
||||
|
||||
mtx::requests::ClaimKeys claim_keys;
|
||||
|
||||
std::map<std::string, std::map<std::string, DevicePublicKeys>> deviceKeys;
|
||||
|
||||
for (const auto &user : res.device_keys) {
|
||||
for (const auto &dev : user.second) {
|
||||
const auto user_id = ::UserId(dev.second.user_id);
|
||||
const auto device_id = DeviceId(dev.second.device_id);
|
||||
|
||||
if (user_id.get() ==
|
||||
http::client()->user_id().to_string() &&
|
||||
device_id.get() == http::client()->device_id())
|
||||
continue;
|
||||
|
||||
const auto device_keys = dev.second.keys;
|
||||
const auto curveKey = "curve25519:" + device_id.get();
|
||||
const auto edKey = "ed25519:" + device_id.get();
|
||||
|
||||
if ((device_keys.find(curveKey) == device_keys.end()) ||
|
||||
(device_keys.find(edKey) == device_keys.end())) {
|
||||
nhlog::net()->debug(
|
||||
"ignoring malformed keys for device {}",
|
||||
device_id.get());
|
||||
continue;
|
||||
}
|
||||
|
||||
DevicePublicKeys pks;
|
||||
pks.ed25519 = device_keys.at(edKey);
|
||||
pks.curve25519 = device_keys.at(curveKey);
|
||||
|
||||
try {
|
||||
if (!mtx::crypto::verify_identity_signature(
|
||||
dev.second, device_id, user_id)) {
|
||||
nhlog::crypto()->warn(
|
||||
"failed to verify identity keys: {}",
|
||||
json(dev.second).dump(2));
|
||||
continue;
|
||||
}
|
||||
} catch (const json::exception &e) {
|
||||
nhlog::crypto()->warn(
|
||||
"failed to parse device key json: {}",
|
||||
e.what());
|
||||
continue;
|
||||
} catch (const mtx::crypto::olm_exception &e) {
|
||||
nhlog::crypto()->warn(
|
||||
"failed to verify device key json: {}",
|
||||
e.what());
|
||||
continue;
|
||||
}
|
||||
|
||||
deviceKeys[user_id].emplace(device_id, pks);
|
||||
claim_keys.one_time_keys[user.first][device_id] =
|
||||
mtx::crypto::SIGNED_CURVE25519;
|
||||
|
||||
nhlog::net()->info("{}", device_id.get());
|
||||
nhlog::net()->info(" curve25519 {}", pks.curve25519);
|
||||
nhlog::net()->info(" ed25519 {}", pks.ed25519);
|
||||
}
|
||||
}
|
||||
|
||||
http::client()->claim_keys(claim_keys, BindPks(deviceKeys));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace olm
|
||||
|
|
17
src/Olm.h
17
src/Olm.h
|
@ -96,11 +96,9 @@ mark_keys_as_published();
|
|||
|
||||
//! Request the encryption keys from sender's device for the given event.
|
||||
void
|
||||
request_keys(const std::string &room_id, const std::string &event_id);
|
||||
|
||||
void
|
||||
send_key_request_for(const std::string &room_id,
|
||||
const mtx::events::EncryptedEvent<mtx::events::msg::Encrypted> &);
|
||||
send_key_request_for(mtx::events::EncryptedEvent<mtx::events::msg::Encrypted> e,
|
||||
const std::string &request_id,
|
||||
bool cancel = false);
|
||||
|
||||
void
|
||||
handle_key_request_message(const mtx::events::DeviceEvent<mtx::events::msg::KeyRequest> &);
|
||||
|
@ -108,6 +106,13 @@ handle_key_request_message(const mtx::events::DeviceEvent<mtx::events::msg::KeyR
|
|||
void
|
||||
send_megolm_key_to_device(const std::string &user_id,
|
||||
const std::string &device_id,
|
||||
const json &payload);
|
||||
const mtx::events::msg::ForwardedRoomKey &payload);
|
||||
|
||||
//! Send encrypted to device messages, targets is a map from userid to device ids or {} for all
|
||||
//! devices
|
||||
void
|
||||
send_encrypted_to_device_messages(const std::map<std::string, std::vector<std::string>> targets,
|
||||
const mtx::events::collections::DeviceEvents &event,
|
||||
bool force_new_session = false);
|
||||
|
||||
} // namespace olm
|
||||
|
|
|
@ -203,10 +203,7 @@ RoomInfoListItem::init(QWidget *parent)
|
|||
});
|
||||
}
|
||||
|
||||
RoomInfoListItem::RoomInfoListItem(QString room_id,
|
||||
const RoomInfo &info,
|
||||
QSharedPointer<UserSettings> userSettings,
|
||||
QWidget *parent)
|
||||
RoomInfoListItem::RoomInfoListItem(QString room_id, const RoomInfo &info, QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, roomType_{info.is_invite ? RoomType::Invited : RoomType::Joined}
|
||||
, roomId_(std::move(room_id))
|
||||
|
@ -214,7 +211,6 @@ RoomInfoListItem::RoomInfoListItem(QString room_id,
|
|||
, isPressed_(false)
|
||||
, unreadMsgCount_(0)
|
||||
, unreadHighlightedMsgCount_(0)
|
||||
, settings(userSettings)
|
||||
{
|
||||
init(parent);
|
||||
}
|
||||
|
@ -451,7 +447,7 @@ RoomInfoListItem::calculateImportance() const
|
|||
// returns ImportanceDisabled or Invite
|
||||
if (isInvite()) {
|
||||
return Invite;
|
||||
} else if (!settings->sortByImportance()) {
|
||||
} else if (!ChatPage::instance()->userSettings()->sortByImportance()) {
|
||||
return ImportanceDisabled;
|
||||
} else if (unreadHighlightedMsgCount_) {
|
||||
return NewMentions;
|
||||
|
|
|
@ -64,10 +64,7 @@ class RoomInfoListItem : public QWidget
|
|||
Q_PROPERTY(QColor btnTextColor READ btnTextColor WRITE setBtnTextColor)
|
||||
|
||||
public:
|
||||
RoomInfoListItem(QString room_id,
|
||||
const RoomInfo &info,
|
||||
QSharedPointer<UserSettings> userSettings,
|
||||
QWidget *parent = nullptr);
|
||||
RoomInfoListItem(QString room_id, const RoomInfo &info, QWidget *parent = nullptr);
|
||||
|
||||
void updateUnreadMessageCount(int count, int highlightedCount);
|
||||
void clearUnreadMessageCount() { updateUnreadMessageCount(0, 0); };
|
||||
|
@ -220,6 +217,4 @@ private:
|
|||
|
||||
QColor bubbleBgColor_;
|
||||
QColor bubbleFgColor_;
|
||||
|
||||
QSharedPointer<UserSettings> settings;
|
||||
};
|
||||
|
|
|
@ -35,7 +35,6 @@
|
|||
|
||||
RoomList::RoomList(QSharedPointer<UserSettings> userSettings, QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, settings(userSettings)
|
||||
{
|
||||
topLayout_ = new QVBoxLayout(this);
|
||||
topLayout_->setSpacing(0);
|
||||
|
@ -76,7 +75,7 @@ RoomList::RoomList(QSharedPointer<UserSettings> userSettings, QWidget *parent)
|
|||
void
|
||||
RoomList::addRoom(const QString &room_id, const RoomInfo &info)
|
||||
{
|
||||
auto room_item = new RoomInfoListItem(room_id, info, settings, scrollArea_);
|
||||
auto room_item = new RoomInfoListItem(room_id, info, scrollArea_);
|
||||
room_item->setRoomName(QString::fromStdString(std::move(info.name)));
|
||||
|
||||
connect(room_item, &RoomInfoListItem::clicked, this, &RoomList::highlightSelectedRoom);
|
||||
|
@ -84,7 +83,7 @@ RoomList::addRoom(const QString &room_id, const RoomInfo &info)
|
|||
MainWindow::instance()->openLeaveRoomDialog(room_id);
|
||||
});
|
||||
|
||||
QSharedPointer<RoomInfoListItem> roomWidget(room_item);
|
||||
QSharedPointer<RoomInfoListItem> roomWidget(room_item, &QObject::deleteLater);
|
||||
rooms_.emplace(room_id, roomWidget);
|
||||
rooms_sort_cache_.push_back(roomWidget);
|
||||
|
||||
|
@ -164,11 +163,6 @@ RoomList::initialize(const QMap<QString, RoomInfo> &info)
|
|||
|
||||
// prevent flickering and save time sorting over and over again
|
||||
setUpdatesEnabled(false);
|
||||
disconnect(settings.data(),
|
||||
&UserSettings::roomSortingChanged,
|
||||
this,
|
||||
&RoomList::sortRoomsByLastMessage);
|
||||
|
||||
for (auto it = info.begin(); it != info.end(); it++) {
|
||||
if (it.value().is_invite)
|
||||
addInvitedRoom(it.key(), it.value());
|
||||
|
@ -179,10 +173,6 @@ RoomList::initialize(const QMap<QString, RoomInfo> &info)
|
|||
for (auto it = info.begin(); it != info.end(); it++)
|
||||
updateRoomDescription(it.key(), it.value().msgInfo);
|
||||
|
||||
connect(settings.data(),
|
||||
&UserSettings::roomSortingChanged,
|
||||
this,
|
||||
&RoomList::sortRoomsByLastMessage);
|
||||
setUpdatesEnabled(true);
|
||||
|
||||
if (rooms_.empty())
|
||||
|
@ -505,7 +495,7 @@ RoomList::updateRoom(const QString &room_id, const RoomInfo &info)
|
|||
void
|
||||
RoomList::addInvitedRoom(const QString &room_id, const RoomInfo &info)
|
||||
{
|
||||
auto room_item = new RoomInfoListItem(room_id, info, settings, scrollArea_);
|
||||
auto room_item = new RoomInfoListItem(room_id, info, scrollArea_);
|
||||
|
||||
connect(room_item, &RoomInfoListItem::acceptInvite, this, &RoomList::acceptInvite);
|
||||
connect(room_item, &RoomInfoListItem::declineInvite, this, &RoomList::declineInvite);
|
||||
|
|
|
@ -104,5 +104,4 @@ private:
|
|||
QString selectedRoom_;
|
||||
|
||||
bool isSortPending_ = false;
|
||||
QSharedPointer<UserSettings> settings;
|
||||
};
|
||||
|
|
|
@ -165,6 +165,9 @@ FilteredTextEdit::keyPressEvent(QKeyEvent *event)
|
|||
MacHelper::showEmojiWindow();
|
||||
#endif
|
||||
|
||||
if (event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_U)
|
||||
QTextEdit::setText("");
|
||||
|
||||
if (!isModifier) {
|
||||
if (!typingTimer_->isActive())
|
||||
emit startedTyping();
|
||||
|
|
|
@ -17,7 +17,9 @@
|
|||
|
||||
#include <QApplication>
|
||||
#include <QComboBox>
|
||||
#include <QCoreApplication>
|
||||
#include <QFileDialog>
|
||||
#include <QFontComboBox>
|
||||
#include <QFormLayout>
|
||||
#include <QInputDialog>
|
||||
#include <QLabel>
|
||||
|
@ -73,8 +75,11 @@ UserSettings::load()
|
|||
font_ = settings.value("user/font_family", "default").toString();
|
||||
avatarCircles_ = settings.value("user/avatar_circles", true).toBool();
|
||||
decryptSidebar_ = settings.value("user/decrypt_sidebar", true).toBool();
|
||||
emojiFont_ = settings.value("user/emoji_font_family", "default").toString();
|
||||
baseFontSize_ = settings.value("user/font_size", QFont().pointSizeF()).toDouble();
|
||||
shareKeysWithTrustedUsers_ =
|
||||
settings.value("user/share_keys_with_trusted_users", true).toBool();
|
||||
mobileMode_ = settings.value("user/mobile_mode", false).toBool();
|
||||
emojiFont_ = settings.value("user/emoji_font_family", "default").toString();
|
||||
baseFontSize_ = settings.value("user/font_size", QFont().pointSizeF()).toDouble();
|
||||
presence_ =
|
||||
settings.value("user/presence", QVariant::fromValue(Presence::AutomaticPresence))
|
||||
.value<Presence>();
|
||||
|
@ -124,6 +129,16 @@ UserSettings::setStartInTray(bool state)
|
|||
save();
|
||||
}
|
||||
|
||||
void
|
||||
UserSettings::setMobileMode(bool state)
|
||||
{
|
||||
if (state == mobileMode_)
|
||||
return;
|
||||
mobileMode_ = state;
|
||||
emit mobileModeChanged(state);
|
||||
save();
|
||||
}
|
||||
|
||||
void
|
||||
UserSettings::setGroupView(bool state)
|
||||
{
|
||||
|
@ -295,6 +310,17 @@ UserSettings::setUseStunServer(bool useStunServer)
|
|||
save();
|
||||
}
|
||||
|
||||
void
|
||||
UserSettings::setShareKeysWithTrustedUsers(bool shareKeys)
|
||||
{
|
||||
if (shareKeys == shareKeysWithTrustedUsers_)
|
||||
return;
|
||||
|
||||
shareKeysWithTrustedUsers_ = shareKeys;
|
||||
emit shareKeysWithTrustedUsersChanged(shareKeys);
|
||||
save();
|
||||
}
|
||||
|
||||
void
|
||||
UserSettings::setMicrophone(QString microphone)
|
||||
{
|
||||
|
@ -347,17 +373,18 @@ UserSettings::applyTheme()
|
|||
/*windowText*/ QColor("#333"),
|
||||
/*button*/ QColor("#333"),
|
||||
/*light*/ QColor(0xef, 0xef, 0xef),
|
||||
/*dark*/ QColor(220, 220, 220),
|
||||
/*mid*/ QColor(110, 110, 110),
|
||||
/*dark*/ QColor(110, 110, 110),
|
||||
/*mid*/ QColor(220, 220, 220),
|
||||
/*text*/ QColor("#333"),
|
||||
/*bright_text*/ QColor("#333"),
|
||||
/*base*/ QColor("#eee"),
|
||||
/*base*/ QColor("#fff"),
|
||||
/*window*/ QColor("white"));
|
||||
lightActive.setColor(QPalette::AlternateBase, QColor("#eee"));
|
||||
lightActive.setColor(QPalette::Highlight, QColor("#38a3d8"));
|
||||
lightActive.setColor(QPalette::ToolTipBase, lightActive.base().color());
|
||||
lightActive.setColor(QPalette::ToolTipText, lightActive.text().color());
|
||||
lightActive.setColor(QPalette::Link, QColor("#0077b5"));
|
||||
lightActive.setColor(QPalette::ButtonText, QColor(Qt::gray));
|
||||
lightActive.setColor(QPalette::ButtonText, QColor("#495057"));
|
||||
QApplication::setPalette(lightActive);
|
||||
} else if (this->theme() == "dark") {
|
||||
stylefile.setFileName(":/styles/styles/nheko-dark.qss");
|
||||
|
@ -365,17 +392,18 @@ UserSettings::applyTheme()
|
|||
/*windowText*/ QColor("#caccd1"),
|
||||
/*button*/ QColor(0xff, 0xff, 0xff),
|
||||
/*light*/ QColor("#caccd1"),
|
||||
/*dark*/ QColor("#2d3139"),
|
||||
/*mid*/ QColor(110, 110, 110),
|
||||
/*dark*/ QColor(110, 110, 110),
|
||||
/*mid*/ QColor("#202228"),
|
||||
/*text*/ QColor("#caccd1"),
|
||||
/*bright_text*/ QColor(0xff, 0xff, 0xff),
|
||||
/*base*/ QColor("#2d3139"),
|
||||
/*window*/ QColor("#202228"));
|
||||
/*base*/ QColor("#202228"),
|
||||
/*window*/ QColor("#2d3139"));
|
||||
darkActive.setColor(QPalette::AlternateBase, QColor("#2d3139"));
|
||||
darkActive.setColor(QPalette::Highlight, QColor("#38a3d8"));
|
||||
darkActive.setColor(QPalette::ToolTipBase, darkActive.base().color());
|
||||
darkActive.setColor(QPalette::ToolTipText, darkActive.text().color());
|
||||
darkActive.setColor(QPalette::Link, QColor("#38a3d8"));
|
||||
darkActive.setColor(QPalette::ButtonText, QColor(0x90, 0x90, 0x90));
|
||||
darkActive.setColor(QPalette::ButtonText, "#727274");
|
||||
QApplication::setPalette(darkActive);
|
||||
} else {
|
||||
stylefile.setFileName(":/styles/styles/system.qss");
|
||||
|
@ -408,6 +436,8 @@ UserSettings::save()
|
|||
|
||||
settings.setValue("avatar_circles", avatarCircles_);
|
||||
settings.setValue("decrypt_sidebar", decryptSidebar_);
|
||||
settings.setValue("share_keys_with_trusted_users", shareKeysWithTrustedUsers_);
|
||||
settings.setValue("mobile_mode", mobileMode_);
|
||||
settings.setValue("font_size", baseFontSize_);
|
||||
settings.setValue("typing_notifications", typingNotifications_);
|
||||
settings.setValue("minor_events", sortByImportance_);
|
||||
|
@ -456,6 +486,9 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge
|
|||
font.setPointSizeF(font.pointSizeF() * 1.1);
|
||||
|
||||
auto versionInfo = new QLabel(QString("%1 | %2").arg(nheko::version).arg(nheko::build_os));
|
||||
if (QCoreApplication::applicationName() != "nheko")
|
||||
versionInfo->setText(versionInfo->text() + " | " +
|
||||
tr("profile: %1").arg(QCoreApplication::applicationName()));
|
||||
versionInfo->setTextInteractionFlags(Qt::TextBrowserInteraction);
|
||||
|
||||
topBarLayout_ = new QHBoxLayout;
|
||||
|
@ -476,30 +509,32 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge
|
|||
general_->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
|
||||
general_->setFont(font);
|
||||
|
||||
trayToggle_ = new Toggle{this};
|
||||
startInTrayToggle_ = new Toggle{this};
|
||||
avatarCircles_ = new Toggle{this};
|
||||
decryptSidebar_ = new Toggle(this);
|
||||
groupViewToggle_ = new Toggle{this};
|
||||
timelineButtonsToggle_ = new Toggle{this};
|
||||
typingNotifications_ = new Toggle{this};
|
||||
messageHoverHighlight_ = new Toggle{this};
|
||||
enlargeEmojiOnlyMessages_ = new Toggle{this};
|
||||
sortByImportance_ = new Toggle{this};
|
||||
readReceipts_ = new Toggle{this};
|
||||
markdown_ = new Toggle{this};
|
||||
desktopNotifications_ = new Toggle{this};
|
||||
alertOnNotification_ = new Toggle{this};
|
||||
useStunServer_ = new Toggle{this};
|
||||
scaleFactorCombo_ = new QComboBox{this};
|
||||
fontSizeCombo_ = new QComboBox{this};
|
||||
fontSelectionCombo_ = new QComboBox{this};
|
||||
emojiFontSelectionCombo_ = new QComboBox{this};
|
||||
microphoneCombo_ = new QComboBox{this};
|
||||
cameraCombo_ = new QComboBox{this};
|
||||
cameraResolutionCombo_ = new QComboBox{this};
|
||||
cameraFrameRateCombo_ = new QComboBox{this};
|
||||
timelineMaxWidthSpin_ = new QSpinBox{this};
|
||||
trayToggle_ = new Toggle{this};
|
||||
startInTrayToggle_ = new Toggle{this};
|
||||
avatarCircles_ = new Toggle{this};
|
||||
decryptSidebar_ = new Toggle(this);
|
||||
shareKeysWithTrustedUsers_ = new Toggle(this);
|
||||
groupViewToggle_ = new Toggle{this};
|
||||
timelineButtonsToggle_ = new Toggle{this};
|
||||
typingNotifications_ = new Toggle{this};
|
||||
messageHoverHighlight_ = new Toggle{this};
|
||||
enlargeEmojiOnlyMessages_ = new Toggle{this};
|
||||
sortByImportance_ = new Toggle{this};
|
||||
readReceipts_ = new Toggle{this};
|
||||
markdown_ = new Toggle{this};
|
||||
desktopNotifications_ = new Toggle{this};
|
||||
alertOnNotification_ = new Toggle{this};
|
||||
useStunServer_ = new Toggle{this};
|
||||
mobileMode_ = new Toggle{this};
|
||||
scaleFactorCombo_ = new QComboBox{this};
|
||||
fontSizeCombo_ = new QComboBox{this};
|
||||
fontSelectionCombo_ = new QFontComboBox{this};
|
||||
emojiFontSelectionCombo_ = new QComboBox{this};
|
||||
microphoneCombo_ = new QComboBox{this};
|
||||
cameraCombo_ = new QComboBox{this};
|
||||
cameraResolutionCombo_ = new QComboBox{this};
|
||||
cameraFrameRateCombo_ = new QComboBox{this};
|
||||
timelineMaxWidthSpin_ = new QSpinBox{this};
|
||||
|
||||
if (!settings_->tray())
|
||||
startInTrayToggle_->setDisabled(true);
|
||||
|
@ -517,10 +552,6 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge
|
|||
fontSizeCombo_->addItem(QString("%1 ").arg(QString::number(option)));
|
||||
|
||||
QFontDatabase fontDb;
|
||||
auto fontFamilies = fontDb.families();
|
||||
for (const auto &family : fontFamilies) {
|
||||
fontSelectionCombo_->addItem(family);
|
||||
}
|
||||
|
||||
// TODO: Is there a way to limit to just emojis, rather than
|
||||
// all emoji fonts?
|
||||
|
@ -666,6 +697,9 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge
|
|||
formLayout_->addRow(uiLabel_);
|
||||
formLayout_->addRow(new HorizontalLine{this});
|
||||
|
||||
boxWrap(tr("Mobile mode"),
|
||||
mobileMode_,
|
||||
tr("Will prevent text selection in the timeline to make scrolling easier."));
|
||||
#if !defined(Q_OS_MAC)
|
||||
boxWrap(tr("Scale factor"),
|
||||
scaleFactorCombo_,
|
||||
|
@ -702,6 +736,10 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge
|
|||
formLayout_->addRow(new HorizontalLine{this});
|
||||
boxWrap(tr("Device ID"), deviceIdValue_);
|
||||
boxWrap(tr("Device Fingerprint"), deviceFingerprintValue_);
|
||||
boxWrap(
|
||||
tr("Share keys with trusted users"),
|
||||
shareKeysWithTrustedUsers_,
|
||||
tr("Automatically replies to key requests from other users, if they are verified."));
|
||||
formLayout_->addRow(new HorizontalLine{this});
|
||||
formLayout_->addRow(sessionKeysLabel, sessionKeysLayout);
|
||||
|
||||
|
@ -793,6 +831,10 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge
|
|||
settings_->setStartInTray(!disabled);
|
||||
});
|
||||
|
||||
connect(mobileMode_, &Toggle::toggled, this, [this](bool disabled) {
|
||||
settings_->setMobileMode(!disabled);
|
||||
});
|
||||
|
||||
connect(groupViewToggle_, &Toggle::toggled, this, [this](bool disabled) {
|
||||
settings_->setGroupView(!disabled);
|
||||
});
|
||||
|
@ -802,6 +844,10 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge
|
|||
emit decryptSidebarChanged();
|
||||
});
|
||||
|
||||
connect(shareKeysWithTrustedUsers_, &Toggle::toggled, this, [this](bool disabled) {
|
||||
settings_->setShareKeysWithTrustedUsers(!disabled);
|
||||
});
|
||||
|
||||
connect(avatarCircles_, &Toggle::toggled, this, [this](bool disabled) {
|
||||
settings_->setAvatarCircles(!disabled);
|
||||
});
|
||||
|
@ -876,10 +922,12 @@ UserSettingsPage::showEvent(QShowEvent *)
|
|||
startInTrayToggle_->setState(!settings_->startInTray());
|
||||
groupViewToggle_->setState(!settings_->groupView());
|
||||
decryptSidebar_->setState(!settings_->decryptSidebar());
|
||||
shareKeysWithTrustedUsers_->setState(!settings_->shareKeysWithTrustedUsers());
|
||||
avatarCircles_->setState(!settings_->avatarCircles());
|
||||
typingNotifications_->setState(!settings_->typingNotifications());
|
||||
sortByImportance_->setState(!settings_->sortByImportance());
|
||||
timelineButtonsToggle_->setState(!settings_->buttonsInTimeline());
|
||||
mobileMode_->setState(!settings_->mobileMode());
|
||||
readReceipts_->setState(!settings_->readReceipts());
|
||||
markdown_->setState(!settings_->markdown());
|
||||
desktopNotifications_->setState(!settings_->hasDesktopNotifications());
|
||||
|
|
|
@ -27,6 +27,7 @@ class Toggle;
|
|||
class QLabel;
|
||||
class QFormLayout;
|
||||
class QComboBox;
|
||||
class QFontComboBox;
|
||||
class QSpinBox;
|
||||
class QHBoxLayout;
|
||||
class QVBoxLayout;
|
||||
|
@ -66,19 +67,22 @@ class UserSettings : public QObject
|
|||
decryptSidebarChanged)
|
||||
Q_PROPERTY(int timelineMaxWidth READ timelineMaxWidth WRITE setTimelineMaxWidth NOTIFY
|
||||
timelineMaxWidthChanged)
|
||||
Q_PROPERTY(bool mobileMode READ mobileMode WRITE setMobileMode NOTIFY mobileModeChanged)
|
||||
Q_PROPERTY(double fontSize READ fontSize WRITE setFontSize NOTIFY fontSizeChanged)
|
||||
Q_PROPERTY(QString font READ font WRITE setFontFamily NOTIFY fontChanged)
|
||||
Q_PROPERTY(
|
||||
QString emojiFont READ emojiFont WRITE setEmojiFontFamily NOTIFY emojiFontChanged)
|
||||
Q_PROPERTY(Presence presence READ presence WRITE setPresence NOTIFY presenceChanged)
|
||||
Q_PROPERTY(
|
||||
bool useStunServer READ useStunServer WRITE setUseStunServer NOTIFY useStunServerChanged)
|
||||
Q_PROPERTY(QString microphone READ microphone WRITE setMicrophone NOTIFY microphoneChanged)
|
||||
Q_PROPERTY(QString camera READ camera WRITE setCamera NOTIFY cameraChanged)
|
||||
Q_PROPERTY(QString cameraResolution READ cameraResolution WRITE setCameraResolution NOTIFY
|
||||
cameraResolutionChanged)
|
||||
Q_PROPERTY(QString cameraFrameRate READ cameraFrameRate WRITE setCameraFrameRate NOTIFY
|
||||
cameraFrameRateChanged)
|
||||
Q_PROPERTY(
|
||||
bool useStunServer READ useStunServer WRITE setUseStunServer NOTIFY useStunServerChanged)
|
||||
Q_PROPERTY(bool shareKeysWithTrustedUsers READ shareKeysWithTrustedUsers WRITE
|
||||
setShareKeysWithTrustedUsers NOTIFY shareKeysWithTrustedUsersChanged)
|
||||
|
||||
public:
|
||||
UserSettings();
|
||||
|
@ -100,6 +104,7 @@ public:
|
|||
void setEnlargeEmojiOnlyMessages(bool state);
|
||||
void setTray(bool state);
|
||||
void setStartInTray(bool state);
|
||||
void setMobileMode(bool mode);
|
||||
void setFontSize(double size);
|
||||
void setFontFamily(QString family);
|
||||
void setEmojiFontFamily(QString family);
|
||||
|
@ -120,6 +125,7 @@ public:
|
|||
void setCameraResolution(QString resolution);
|
||||
void setCameraFrameRate(QString frameRate);
|
||||
void setUseStunServer(bool state);
|
||||
void setShareKeysWithTrustedUsers(bool state);
|
||||
|
||||
QString theme() const { return !theme_.isEmpty() ? theme_ : defaultTheme_; }
|
||||
bool messageHoverHighlight() const { return messageHoverHighlight_; }
|
||||
|
@ -133,6 +139,7 @@ public:
|
|||
bool typingNotifications() const { return typingNotifications_; }
|
||||
bool sortByImportance() const { return sortByImportance_; }
|
||||
bool buttonsInTimeline() const { return buttonsInTimeline_; }
|
||||
bool mobileMode() const { return mobileMode_; }
|
||||
bool readReceipts() const { return readReceipts_; }
|
||||
bool hasDesktopNotifications() const { return hasDesktopNotifications_; }
|
||||
bool hasAlertOnNotification() const { return hasAlertOnNotification_; }
|
||||
|
@ -150,6 +157,7 @@ public:
|
|||
QString cameraResolution() const { return cameraResolution_; }
|
||||
QString cameraFrameRate() const { return cameraFrameRate_; }
|
||||
bool useStunServer() const { return useStunServer_; }
|
||||
bool shareKeysWithTrustedUsers() const { return shareKeysWithTrustedUsers_; }
|
||||
|
||||
signals:
|
||||
void groupViewStateChanged(bool state);
|
||||
|
@ -168,6 +176,7 @@ signals:
|
|||
void avatarCirclesChanged(bool state);
|
||||
void decryptSidebarChanged(bool state);
|
||||
void timelineMaxWidthChanged(int state);
|
||||
void mobileModeChanged(bool mode);
|
||||
void fontSizeChanged(double state);
|
||||
void fontChanged(QString state);
|
||||
void emojiFontChanged(QString state);
|
||||
|
@ -177,6 +186,7 @@ signals:
|
|||
void cameraResolutionChanged(QString resolution);
|
||||
void cameraFrameRateChanged(QString frameRate);
|
||||
void useStunServerChanged(bool state);
|
||||
void shareKeysWithTrustedUsersChanged(bool state);
|
||||
|
||||
private:
|
||||
// Default to system theme if QT_QPA_PLATFORMTHEME var is set.
|
||||
|
@ -199,6 +209,8 @@ private:
|
|||
bool hasAlertOnNotification_;
|
||||
bool avatarCircles_;
|
||||
bool decryptSidebar_;
|
||||
bool shareKeysWithTrustedUsers_;
|
||||
bool mobileMode_;
|
||||
int timelineMaxWidth_;
|
||||
double baseFontSize_;
|
||||
QString font_;
|
||||
|
@ -264,13 +276,15 @@ private:
|
|||
Toggle *avatarCircles_;
|
||||
Toggle *useStunServer_;
|
||||
Toggle *decryptSidebar_;
|
||||
Toggle *shareKeysWithTrustedUsers_;
|
||||
Toggle *mobileMode_;
|
||||
QLabel *deviceFingerprintValue_;
|
||||
QLabel *deviceIdValue_;
|
||||
|
||||
QComboBox *themeCombo_;
|
||||
QComboBox *scaleFactorCombo_;
|
||||
QComboBox *fontSizeCombo_;
|
||||
QComboBox *fontSelectionCombo_;
|
||||
QFontComboBox *fontSelectionCombo_;
|
||||
QComboBox *emojiFontSelectionCombo_;
|
||||
QComboBox *microphoneCombo_;
|
||||
QComboBox *cameraCombo_;
|
||||
|
|
41
src/main.cpp
41
src/main.cpp
|
@ -104,10 +104,32 @@ createCacheDirectory()
|
|||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
// needed for settings so need to register before any settings are read to prevent warings
|
||||
// needed for settings so need to register before any settings are read to prevent warnings
|
||||
qRegisterMetaType<UserSettings::Presence>();
|
||||
|
||||
QCoreApplication::setApplicationName("nheko");
|
||||
// This is some hacky programming, but it's necessary (AFAIK?) to get the unique config name
|
||||
// parsed before the app name is set.
|
||||
QString appName{"nheko"};
|
||||
for (int i = 0; i < argc; ++i) {
|
||||
if (QString{argv[i]}.startsWith("--profile=")) {
|
||||
QString q{argv[i]};
|
||||
q.remove("--profile=");
|
||||
appName += "-" + q;
|
||||
} else if (QString{argv[i]}.startsWith("--p=")) {
|
||||
QString q{argv[i]};
|
||||
q.remove("-p=");
|
||||
appName += "-" + q;
|
||||
} else if (QString{argv[i]} == "--profile" || QString{argv[i]} == "-p") {
|
||||
if (i < argc - 1) // if i is less than argc - 1, we still have a parameter
|
||||
// left to process as the name
|
||||
{
|
||||
++i; // the next arg is the name, so increment
|
||||
appName += "-" + QString{argv[i]};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QCoreApplication::setApplicationName(appName);
|
||||
QCoreApplication::setApplicationVersion(nheko::version);
|
||||
QCoreApplication::setOrganizationName("nheko");
|
||||
QCoreApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
|
||||
|
@ -137,6 +159,19 @@ main(int argc, char *argv[])
|
|||
parser.addVersionOption();
|
||||
QCommandLineOption debugOption("debug", "Enable debug output");
|
||||
parser.addOption(debugOption);
|
||||
|
||||
// This option is not actually parsed via Qt due to the need to parse it before the app
|
||||
// name is set. It only exists to keep Qt from complaining about the --profile/-p
|
||||
// option and thereby crashing the app.
|
||||
QCommandLineOption configName(
|
||||
QStringList() << "p"
|
||||
<< "profile",
|
||||
QCoreApplication::tr("Create a unique profile, which allows you to log into several "
|
||||
"accounts at the same time and start multiple instances of nheko."),
|
||||
QCoreApplication::tr("profile"),
|
||||
QCoreApplication::tr("profile name"));
|
||||
parser.addOption(configName);
|
||||
|
||||
parser.process(app);
|
||||
|
||||
app.setWindowIcon(QIcon(":/logos/nheko.png"));
|
||||
|
@ -181,7 +216,7 @@ main(int argc, char *argv[])
|
|||
appTranslator.load(QLocale(), "nheko", "_", ":/translations");
|
||||
app.installTranslator(&appTranslator);
|
||||
|
||||
MainWindow w;
|
||||
MainWindow w{(appName == "nheko" ? "" : appName.remove("nheko-"))};
|
||||
|
||||
// Move the MainWindow to the center
|
||||
w.move(screenCenter(w.width(), w.height()));
|
||||
|
|
|
@ -54,6 +54,12 @@ EventStore::EventStore(std::string room_id, QObject *)
|
|||
&EventStore::oldMessagesRetrieved,
|
||||
this,
|
||||
[this](const mtx::responses::Messages &res) {
|
||||
if (cache::client()->previousBatchToken(room_id_) == res.end) {
|
||||
noMoreMessages = true;
|
||||
emit fetchedMore();
|
||||
return;
|
||||
}
|
||||
|
||||
uint64_t newFirst = cache::client()->saveOldMessages(room_id_, res);
|
||||
if (newFirst == first)
|
||||
fetchMore();
|
||||
|
@ -209,6 +215,28 @@ EventStore::clearTimeline()
|
|||
emit endResetModel();
|
||||
}
|
||||
|
||||
void
|
||||
EventStore::receivedSessionKey(const std::string &session_id)
|
||||
{
|
||||
if (!pending_key_requests.count(session_id))
|
||||
return;
|
||||
|
||||
auto request = pending_key_requests.at(session_id);
|
||||
pending_key_requests.erase(session_id);
|
||||
|
||||
olm::send_key_request_for(request.events.front(), request.request_id, true);
|
||||
|
||||
for (const auto &e : request.events) {
|
||||
auto idx = idToIndex(e.event_id);
|
||||
if (idx) {
|
||||
decryptedEvents_.remove({room_id_, e.event_id});
|
||||
events_by_id_.remove({room_id_, e.event_id});
|
||||
events_.remove({room_id_, toInternalIdx(*idx)});
|
||||
emit dataChanged(*idx, *idx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
EventStore::handleSync(const mtx::responses::Timeline &events)
|
||||
{
|
||||
|
@ -291,18 +319,6 @@ EventStore::handleSync(const mtx::responses::Timeline &events)
|
|||
*d_event)) {
|
||||
handle_room_verification(*d_event);
|
||||
}
|
||||
// else {
|
||||
// // only the key.verification.ready sent by localuser's other
|
||||
// device
|
||||
// // is of significance as it is used for detecting accepted request
|
||||
// if (std::get_if<mtx::events::RoomEvent<
|
||||
// mtx::events::msg::KeyVerificationReady>>(d_event)) {
|
||||
// auto msg = std::get_if<mtx::events::RoomEvent<
|
||||
// mtx::events::msg::KeyVerificationReady>>(d_event);
|
||||
// ChatPage::instance()->receivedDeviceVerificationReady(
|
||||
// msg->content);
|
||||
// }
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -498,7 +514,7 @@ EventStore::decryptEvent(const IdIndex &idx,
|
|||
|
||||
if (decryptionResult.error) {
|
||||
switch (*decryptionResult.error) {
|
||||
case olm::DecryptionErrorCode::MissingSession:
|
||||
case olm::DecryptionErrorCode::MissingSession: {
|
||||
dummy.content.body =
|
||||
tr("-- Encrypted Event (No keys found for decryption) --",
|
||||
"Placeholder, when the message was not decrypted yet or can't be "
|
||||
|
@ -509,8 +525,21 @@ EventStore::decryptEvent(const IdIndex &idx,
|
|||
index.session_id,
|
||||
e.sender);
|
||||
// TODO: Check if this actually works and look in key backup
|
||||
olm::send_key_request_for(room_id_, e);
|
||||
auto copy = e;
|
||||
copy.room_id = room_id_;
|
||||
if (pending_key_requests.count(e.content.session_id)) {
|
||||
pending_key_requests.at(e.content.session_id)
|
||||
.events.push_back(copy);
|
||||
} else {
|
||||
PendingKeyRequests request;
|
||||
request.request_id =
|
||||
"key_request." + http::client()->generate_txn_id();
|
||||
request.events.push_back(copy);
|
||||
olm::send_key_request_for(copy, request.request_id);
|
||||
pending_key_requests[e.content.session_id] = request;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case olm::DecryptionErrorCode::DbError:
|
||||
nhlog::db()->critical(
|
||||
"failed to retrieve megolm session with index ({}, {}, {})",
|
||||
|
@ -687,6 +716,9 @@ EventStore::get(std::string_view id, std::string_view related_to, bool decrypt)
|
|||
void
|
||||
EventStore::fetchMore()
|
||||
{
|
||||
if (noMoreMessages)
|
||||
return;
|
||||
|
||||
mtx::http::MessagesOpts opts;
|
||||
opts.room_id = room_id_;
|
||||
opts.from = cache::client()->previousBatchToken(room_id_);
|
||||
|
|
|
@ -104,6 +104,7 @@ signals:
|
|||
|
||||
public slots:
|
||||
void addPending(mtx::events::collections::TimelineEvents event);
|
||||
void receivedSessionKey(const std::string &session_id);
|
||||
void clearTimeline();
|
||||
|
||||
private:
|
||||
|
@ -121,6 +122,14 @@ private:
|
|||
static QCache<Index, mtx::events::collections::TimelineEvents> events_;
|
||||
static QCache<IdIndex, mtx::events::collections::TimelineEvents> events_by_id_;
|
||||
|
||||
struct PendingKeyRequests
|
||||
{
|
||||
std::string request_id;
|
||||
std::vector<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>> events;
|
||||
};
|
||||
std::map<std::string, PendingKeyRequests> pending_key_requests;
|
||||
|
||||
std::string current_txn;
|
||||
int current_txn_error_count = 0;
|
||||
bool noMoreMessages = false;
|
||||
};
|
||||
|
|
|
@ -930,11 +930,12 @@ TimelineModel::sendEncryptedMessage(mtx::events::RoomEvent<T> msg, mtx::events::
|
|||
const auto session_id = mtx::crypto::session_id(outbound_session.get());
|
||||
const auto session_key = mtx::crypto::session_key(outbound_session.get());
|
||||
|
||||
// TODO: needs to be moved in the lib.
|
||||
auto megolm_payload = json{{"algorithm", "m.megolm.v1.aes-sha2"},
|
||||
{"room_id", room_id},
|
||||
{"session_id", session_id},
|
||||
{"session_key", session_key}};
|
||||
mtx::events::DeviceEvent<mtx::events::msg::RoomKey> megolm_payload;
|
||||
megolm_payload.content.algorithm = "m.megolm.v1.aes-sha2";
|
||||
megolm_payload.content.room_id = room_id;
|
||||
megolm_payload.content.session_id = session_id;
|
||||
megolm_payload.content.session_key = session_key;
|
||||
megolm_payload.type = mtx::events::EventType::RoomKey;
|
||||
|
||||
// Saving the new megolm session.
|
||||
// TODO: Maybe it's too early to save.
|
||||
|
@ -958,122 +959,29 @@ TimelineModel::sendEncryptedMessage(mtx::events::RoomEvent<T> msg, mtx::events::
|
|||
const auto members = cache::roomMembers(room_id);
|
||||
nhlog::ui()->info("retrieved {} members for {}", members.size(), room_id);
|
||||
|
||||
auto keeper =
|
||||
std::make_shared<StateKeeper>([room_id, doc, txn_id = msg.event_id, this]() {
|
||||
try {
|
||||
mtx::events::EncryptedEvent<mtx::events::msg::Encrypted> event;
|
||||
event.content = olm::encrypt_group_message(
|
||||
room_id, http::client()->device_id(), doc);
|
||||
event.event_id = txn_id;
|
||||
event.room_id = room_id;
|
||||
event.sender = http::client()->user_id().to_string();
|
||||
event.type = mtx::events::EventType::RoomEncrypted;
|
||||
event.origin_server_ts = QDateTime::currentMSecsSinceEpoch();
|
||||
|
||||
emit this->addPendingMessageToStore(event);
|
||||
} catch (const lmdb::error &e) {
|
||||
nhlog::db()->critical(
|
||||
"failed to save megolm outbound session: {}", e.what());
|
||||
emit ChatPage::instance()->showNotification(
|
||||
tr("Failed to encrypt event, sending aborted!"));
|
||||
}
|
||||
});
|
||||
|
||||
mtx::requests::QueryKeys req;
|
||||
std::map<std::string, std::vector<std::string>> targets;
|
||||
for (const auto &member : members)
|
||||
req.device_keys[member] = {};
|
||||
targets[member] = {};
|
||||
|
||||
http::client()->query_keys(
|
||||
req,
|
||||
[keeper = std::move(keeper), megolm_payload, txn_id = msg.event_id, this](
|
||||
const mtx::responses::QueryKeys &res, mtx::http::RequestErr err) {
|
||||
if (err) {
|
||||
nhlog::net()->warn("failed to query device keys: {} {}",
|
||||
err->matrix_error.error,
|
||||
static_cast<int>(err->status_code));
|
||||
emit ChatPage::instance()->showNotification(
|
||||
tr("Failed to encrypt event, sending aborted!"));
|
||||
return;
|
||||
}
|
||||
olm::send_encrypted_to_device_messages(targets, megolm_payload);
|
||||
|
||||
mtx::requests::ClaimKeys claim_keys;
|
||||
try {
|
||||
mtx::events::EncryptedEvent<mtx::events::msg::Encrypted> event;
|
||||
event.content =
|
||||
olm::encrypt_group_message(room_id, http::client()->device_id(), doc);
|
||||
event.event_id = msg.event_id;
|
||||
event.room_id = room_id;
|
||||
event.sender = http::client()->user_id().to_string();
|
||||
event.type = mtx::events::EventType::RoomEncrypted;
|
||||
event.origin_server_ts = QDateTime::currentMSecsSinceEpoch();
|
||||
|
||||
// Mapping from user id to a device_id with valid identity keys to the
|
||||
// generated room_key event used for sharing the megolm session.
|
||||
std::map<std::string, std::map<std::string, std::string>> room_key_msgs;
|
||||
std::map<std::string, std::map<std::string, DevicePublicKeys>> deviceKeys;
|
||||
|
||||
for (const auto &user : res.device_keys) {
|
||||
for (const auto &dev : user.second) {
|
||||
const auto user_id = ::UserId(dev.second.user_id);
|
||||
const auto device_id = DeviceId(dev.second.device_id);
|
||||
|
||||
if (user_id.get() ==
|
||||
http::client()->user_id().to_string() &&
|
||||
device_id.get() == http::client()->device_id())
|
||||
continue;
|
||||
|
||||
const auto device_keys = dev.second.keys;
|
||||
const auto curveKey = "curve25519:" + device_id.get();
|
||||
const auto edKey = "ed25519:" + device_id.get();
|
||||
|
||||
if ((device_keys.find(curveKey) == device_keys.end()) ||
|
||||
(device_keys.find(edKey) == device_keys.end())) {
|
||||
nhlog::net()->debug(
|
||||
"ignoring malformed keys for device {}",
|
||||
device_id.get());
|
||||
continue;
|
||||
}
|
||||
|
||||
DevicePublicKeys pks;
|
||||
pks.ed25519 = device_keys.at(edKey);
|
||||
pks.curve25519 = device_keys.at(curveKey);
|
||||
|
||||
try {
|
||||
if (!mtx::crypto::verify_identity_signature(
|
||||
dev.second, device_id, user_id)) {
|
||||
nhlog::crypto()->warn(
|
||||
"failed to verify identity keys: {}",
|
||||
json(dev.second).dump(2));
|
||||
continue;
|
||||
}
|
||||
} catch (const json::exception &e) {
|
||||
nhlog::crypto()->warn(
|
||||
"failed to parse device key json: {}",
|
||||
e.what());
|
||||
continue;
|
||||
} catch (const mtx::crypto::olm_exception &e) {
|
||||
nhlog::crypto()->warn(
|
||||
"failed to verify device key json: {}",
|
||||
e.what());
|
||||
continue;
|
||||
}
|
||||
|
||||
auto room_key = olm::client()
|
||||
->create_room_key_event(
|
||||
user_id, pks.ed25519, megolm_payload)
|
||||
.dump();
|
||||
|
||||
room_key_msgs[user_id].emplace(device_id, room_key);
|
||||
deviceKeys[user_id].emplace(device_id, pks);
|
||||
claim_keys.one_time_keys[user.first][device_id] =
|
||||
mtx::crypto::SIGNED_CURVE25519;
|
||||
|
||||
nhlog::net()->info("{}", device_id.get());
|
||||
nhlog::net()->info(" curve25519 {}", pks.curve25519);
|
||||
nhlog::net()->info(" ed25519 {}", pks.ed25519);
|
||||
}
|
||||
}
|
||||
|
||||
http::client()->claim_keys(claim_keys,
|
||||
std::bind(&TimelineModel::handleClaimedKeys,
|
||||
this,
|
||||
keeper,
|
||||
room_key_msgs,
|
||||
deviceKeys,
|
||||
std::placeholders::_1,
|
||||
std::placeholders::_2));
|
||||
});
|
||||
emit this->addPendingMessageToStore(event);
|
||||
} catch (const lmdb::error &e) {
|
||||
nhlog::db()->critical("failed to save megolm outbound session: {}",
|
||||
e.what());
|
||||
emit ChatPage::instance()->showNotification(
|
||||
tr("Failed to encrypt event, sending aborted!"));
|
||||
}
|
||||
|
||||
// TODO: Let the user know about the errors.
|
||||
} catch (const lmdb::error &e) {
|
||||
|
@ -1089,86 +997,6 @@ TimelineModel::sendEncryptedMessage(mtx::events::RoomEvent<T> msg, mtx::events::
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
TimelineModel::handleClaimedKeys(
|
||||
std::shared_ptr<StateKeeper> keeper,
|
||||
const std::map<std::string, std::map<std::string, std::string>> &room_keys,
|
||||
const std::map<std::string, std::map<std::string, DevicePublicKeys>> &pks,
|
||||
const mtx::responses::ClaimKeys &res,
|
||||
mtx::http::RequestErr err)
|
||||
{
|
||||
if (err) {
|
||||
nhlog::net()->warn("claim keys error: {} {} {}",
|
||||
err->matrix_error.error,
|
||||
err->parse_error,
|
||||
static_cast<int>(err->status_code));
|
||||
return;
|
||||
}
|
||||
|
||||
// Payload with all the to_device message to be sent.
|
||||
nlohmann::json body;
|
||||
|
||||
for (const auto &[user_id, retrieved_devices] : res.one_time_keys) {
|
||||
nhlog::net()->debug("claimed keys for {}", user_id);
|
||||
if (retrieved_devices.size() == 0) {
|
||||
nhlog::net()->debug("no one-time keys found for user_id: {}", user_id);
|
||||
return;
|
||||
}
|
||||
|
||||
for (const auto &rd : retrieved_devices) {
|
||||
const auto device_id = rd.first;
|
||||
|
||||
nhlog::net()->debug("{} : \n {}", device_id, rd.second.dump(2));
|
||||
|
||||
if (rd.second.empty() || !rd.second.begin()->contains("key")) {
|
||||
nhlog::net()->warn("Skipping device {} as it has no key.",
|
||||
device_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
// TODO: Verify signatures
|
||||
auto otk = rd.second.begin()->at("key");
|
||||
|
||||
auto id_key = pks.at(user_id).at(device_id).curve25519;
|
||||
auto s = olm::client()->create_outbound_session(id_key, otk);
|
||||
|
||||
auto device_msg = olm::client()->create_olm_encrypted_content(
|
||||
s.get(),
|
||||
room_keys.at(user_id).at(device_id),
|
||||
pks.at(user_id).at(device_id).curve25519);
|
||||
|
||||
try {
|
||||
cache::saveOlmSession(id_key, std::move(s));
|
||||
} catch (const lmdb::error &e) {
|
||||
nhlog::db()->critical("failed to save outbound olm session: {}",
|
||||
e.what());
|
||||
} catch (const mtx::crypto::olm_exception &e) {
|
||||
nhlog::crypto()->critical(
|
||||
"failed to pickle outbound olm session: {}", e.what());
|
||||
}
|
||||
|
||||
body["messages"][user_id][device_id] = device_msg;
|
||||
}
|
||||
|
||||
nhlog::net()->info("send_to_device: {}", user_id);
|
||||
}
|
||||
|
||||
http::client()->send_to_device(
|
||||
mtx::events::to_string(mtx::events::EventType::RoomEncrypted),
|
||||
http::client()->generate_txn_id(),
|
||||
body,
|
||||
[keeper](mtx::http::RequestErr err) {
|
||||
if (err) {
|
||||
nhlog::net()->warn("failed to send "
|
||||
"send_to_device "
|
||||
"message: {}",
|
||||
err->matrix_error.error);
|
||||
}
|
||||
|
||||
(void)keeper;
|
||||
});
|
||||
}
|
||||
|
||||
struct SendMessageVisitor
|
||||
{
|
||||
explicit SendMessageVisitor(TimelineModel *model)
|
||||
|
|
|
@ -264,6 +264,10 @@ public slots:
|
|||
}
|
||||
void setDecryptDescription(bool decrypt) { decryptDescription = decrypt; }
|
||||
void clearTimeline() { events.clearTimeline(); }
|
||||
void receivedSessionKey(const std::string &session_key)
|
||||
{
|
||||
events.receivedSessionKey(session_key);
|
||||
}
|
||||
|
||||
QString roomName() const;
|
||||
QString roomTopic() const;
|
||||
|
@ -297,12 +301,6 @@ signals:
|
|||
private:
|
||||
template<typename T>
|
||||
void sendEncryptedMessage(mtx::events::RoomEvent<T> msg, mtx::events::EventType eventType);
|
||||
void handleClaimedKeys(
|
||||
std::shared_ptr<StateKeeper> keeper,
|
||||
const std::map<std::string, std::map<std::string, std::string>> &room_keys,
|
||||
const std::map<std::string, std::map<std::string, DevicePublicKeys>> &pks,
|
||||
const mtx::responses::ClaimKeys &res,
|
||||
mtx::http::RequestErr err);
|
||||
void readEvent(const std::string &id);
|
||||
|
||||
void setPaginationInProgress(const bool paginationInProgress);
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace msgs = mtx::events::msg;
|
|||
void
|
||||
TimelineViewManager::updateEncryptedDescriptions()
|
||||
{
|
||||
auto decrypt = settings->decryptSidebar();
|
||||
auto decrypt = ChatPage::instance()->userSettings()->decryptSidebar();
|
||||
QHash<QString, QSharedPointer<TimelineModel>>::iterator i;
|
||||
for (i = models.begin(); i != models.end(); ++i) {
|
||||
auto ptr = i.value();
|
||||
|
@ -47,10 +47,10 @@ TimelineViewManager::updateColorPalette()
|
|||
{
|
||||
userColors.clear();
|
||||
|
||||
if (settings->theme() == "light") {
|
||||
if (ChatPage::instance()->userSettings()->theme() == "light") {
|
||||
view->rootContext()->setContextProperty("currentActivePalette", QPalette());
|
||||
view->rootContext()->setContextProperty("currentInactivePalette", QPalette());
|
||||
} else if (settings->theme() == "dark") {
|
||||
} else if (ChatPage::instance()->userSettings()->theme() == "dark") {
|
||||
view->rootContext()->setContextProperty("currentActivePalette", QPalette());
|
||||
view->rootContext()->setContextProperty("currentInactivePalette", QPalette());
|
||||
} else {
|
||||
|
@ -84,14 +84,11 @@ TimelineViewManager::userStatus(QString id) const
|
|||
return QString::fromStdString(cache::statusMessage(id.toStdString()));
|
||||
}
|
||||
|
||||
TimelineViewManager::TimelineViewManager(QSharedPointer<UserSettings> userSettings,
|
||||
CallManager *callManager,
|
||||
ChatPage *parent)
|
||||
TimelineViewManager::TimelineViewManager(CallManager *callManager, ChatPage *parent)
|
||||
: imgProvider(new MxcImageProvider())
|
||||
, colorImgProvider(new ColorImageProvider())
|
||||
, blurhashProvider(new BlurhashProvider())
|
||||
, callManager_(callManager)
|
||||
, settings(userSettings)
|
||||
{
|
||||
qRegisterMetaType<mtx::events::msg::KeyVerificationAccept>();
|
||||
qRegisterMetaType<mtx::events::msg::KeyVerificationCancel>();
|
||||
|
@ -133,7 +130,7 @@ TimelineViewManager::TimelineViewManager(QSharedPointer<UserSettings> userSettin
|
|||
});
|
||||
qmlRegisterSingletonType<UserSettings>(
|
||||
"im.nheko", 1, 0, "Settings", [](QQmlEngine *, QJSEngine *) -> QObject * {
|
||||
return self->settings.data();
|
||||
return ChatPage::instance()->userSettings().data();
|
||||
});
|
||||
|
||||
qRegisterMetaType<mtx::events::collections::TimelineEvents>();
|
||||
|
@ -295,7 +292,8 @@ TimelineViewManager::addRoom(const QString &room_id)
|
|||
{
|
||||
if (!models.contains(room_id)) {
|
||||
QSharedPointer<TimelineModel> newRoom(new TimelineModel(this, room_id));
|
||||
newRoom->setDecryptDescription(settings->decryptSidebar());
|
||||
newRoom->setDecryptDescription(
|
||||
ChatPage::instance()->userSettings()->decryptSidebar());
|
||||
|
||||
connect(newRoom.data(),
|
||||
&TimelineModel::newEncryptedImage,
|
||||
|
@ -453,6 +451,15 @@ TimelineViewManager::updateReadReceipts(const QString &room_id,
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
TimelineViewManager::receivedSessionKey(const std::string &room_id, const std::string &session_id)
|
||||
{
|
||||
auto room = models.find(QString::fromStdString(room_id));
|
||||
if (room != models.end()) {
|
||||
room.value()->receivedSessionKey(session_id);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
TimelineViewManager::initWithMessages(const std::map<QString, mtx::responses::Timeline> &msgs)
|
||||
{
|
||||
|
@ -472,7 +479,7 @@ TimelineViewManager::queueTextMessage(const QString &msg)
|
|||
mtx::events::msg::Text text = {};
|
||||
text.body = msg.trimmed().toStdString();
|
||||
|
||||
if (settings->markdown()) {
|
||||
if (ChatPage::instance()->userSettings()->markdown()) {
|
||||
text.formatted_body = utils::markdownToHtml(msg).toStdString();
|
||||
|
||||
// Don't send formatted_body, when we don't need to
|
||||
|
@ -500,7 +507,7 @@ TimelineViewManager::queueTextMessage(const QString &msg)
|
|||
|
||||
// NOTE(Nico): rich replies always need a formatted_body!
|
||||
text.format = "org.matrix.custom.html";
|
||||
if (settings->markdown())
|
||||
if (ChatPage::instance()->userSettings()->markdown())
|
||||
text.formatted_body =
|
||||
utils::getFormattedQuoteBody(related, utils::markdownToHtml(msg))
|
||||
.toStdString();
|
||||
|
@ -523,7 +530,8 @@ TimelineViewManager::queueEmoteMessage(const QString &msg)
|
|||
mtx::events::msg::Emote emote;
|
||||
emote.body = msg.trimmed().toStdString();
|
||||
|
||||
if (html != msg.trimmed().toHtmlEscaped() && settings->markdown()) {
|
||||
if (html != msg.trimmed().toHtmlEscaped() &&
|
||||
ChatPage::instance()->userSettings()->markdown()) {
|
||||
emote.formatted_body = html.toStdString();
|
||||
emote.format = "org.matrix.custom.html";
|
||||
}
|
||||
|
|
|
@ -42,9 +42,7 @@ class TimelineViewManager : public QObject
|
|||
Q_PROPERTY(bool isMicMuted READ isMicMuted NOTIFY micMuteChanged)
|
||||
|
||||
public:
|
||||
TimelineViewManager(QSharedPointer<UserSettings> userSettings,
|
||||
CallManager *callManager,
|
||||
ChatPage *parent = nullptr);
|
||||
TimelineViewManager(CallManager *callManager, ChatPage *parent = nullptr);
|
||||
QWidget *getWidget() const { return container; }
|
||||
|
||||
void sync(const mtx::responses::Rooms &rooms);
|
||||
|
@ -98,6 +96,7 @@ signals:
|
|||
|
||||
public slots:
|
||||
void updateReadReceipts(const QString &room_id, const std::vector<QString> &event_ids);
|
||||
void receivedSessionKey(const std::string &room_id, const std::string &session_id);
|
||||
void initWithMessages(const std::map<QString, mtx::responses::Timeline> &msgs);
|
||||
|
||||
void setHistoryView(const QString &room_id);
|
||||
|
@ -180,7 +179,6 @@ private:
|
|||
bool isInitialSync_ = true;
|
||||
bool isNarrowView_ = false;
|
||||
|
||||
QSharedPointer<UserSettings> settings;
|
||||
QHash<QString, QColor> userColors;
|
||||
|
||||
QHash<QString, QSharedPointer<DeviceVerificationFlow>> dvList;
|
||||
|
|
Loading…
Reference in a new issue