Merge branch 'master' into qml-roomlist

This commit is contained in:
Nicolas Werner 2021-06-12 15:05:07 +02:00
commit 7d5e82c888
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
16 changed files with 3439 additions and 605 deletions

View file

@ -114,6 +114,15 @@ with [homebrew](https://brew.sh/):
```sh
brew install --cask nheko
```
#### Windows
with [Chocolatey](https://chocolatey.org/):
```posh
choco install nheko-reborn
```
### FAQ
##

View file

@ -16,7 +16,9 @@ finish-args:
- --socket=wayland
- --socket=x11
- --talk-name=org.freedesktop.Notifications
- --talk-name=org.kde.StatusNotifierWatcher
- --talk-name=org.freedesktop.secrets
- --talk-name=org.freedesktop.StatusNotifierItem
- --talk-name=org.kde.*
cleanup:
- /include
- /bin/mdb*

View file

@ -17,22 +17,22 @@
<message>
<location line="+67"/>
<source>You are screen sharing</source>
<translation>Du hast deinen Bildschirm freigegeben</translation>
<translation>Du teilst deinen Bildschirm</translation>
</message>
<message>
<location line="+17"/>
<source>Hide/Show Picture-in-Picture</source>
<translation>Bild in Bild anzeigen/verstecken</translation>
<translation>Bild-in-Bild Teilen/Verstecken</translation>
</message>
<message>
<location line="+13"/>
<source>Unmute Mic</source>
<translation>Stummschaltung aufheben</translation>
<translation>Stummschaltung Aufheben</translation>
</message>
<message>
<location line="+0"/>
<source>Mute Mic</source>
<translation>Mikrophon stummschalten</translation>
<translation>Mikrofon stumm schalten</translation>
</message>
</context>
<context>
@ -151,12 +151,12 @@
<message>
<location line="+412"/>
<source>Confirm join</source>
<translation>Beitreten bestätigen</translation>
<translation>Beitritt bestätigen</translation>
</message>
<message>
<location line="+1"/>
<source>Do you really want to join %1?</source>
<translation>Willst du wirklich %1 betreten?</translation>
<translation>Möchtest du wirklich %1 beitreten?</translation>
</message>
<message>
<location line="+44"/>
@ -172,7 +172,7 @@
<message>
<location line="-323"/>
<source>Do you really want to invite %1 (%2)?</source>
<translation>Willst du wirklich %1 (%2) einladen?</translation>
<translation>Nutzer %1 (%2) wirklich einladen?</translation>
</message>
<message>
<location line="+11"/>
@ -187,12 +187,12 @@
<message>
<location line="+1"/>
<source>Do you really want to kick %1 (%2)?</source>
<translation>Willst du wirklich %1 (%2) kicken?</translation>
<translation>Nutzer %1 (%2) wirklich kicken?</translation>
</message>
<message>
<location line="+16"/>
<source>Kicked user: %1</source>
<translation>%1 wurde gekickt.</translation>
<translation>Gekickter Benutzer: %1</translation>
</message>
<message>
<location line="+10"/>
@ -202,7 +202,7 @@
<message>
<location line="+1"/>
<source>Do you really want to ban %1 (%2)?</source>
<translation>Willst du wirklich %1 (%2) aus dem Raum verbannen?</translation>
<translation>Nutzer %1 (%2) wirklich bannen?</translation>
</message>
<message>
<location line="+11"/>
@ -212,7 +212,7 @@
<message>
<location line="+5"/>
<source>Banned user: %1</source>
<translation>%1 wurde gebannt.</translation>
<translation>Gebannter Nutzer: %1</translation>
</message>
<message>
<location line="+10"/>
@ -222,7 +222,7 @@
<message>
<location line="+1"/>
<source>Do you really want to unban %1 (%2)?</source>
<translation>Willst du wirklich den Bann von %1 (%2) zurückziehen?</translation>
<translation>Bann des Nutzers %1 (%2) wirklich aufheben?</translation>
</message>
<message>
<location line="+11"/>
@ -232,7 +232,7 @@
<message>
<location line="+5"/>
<source>Unbanned user: %1</source>
<translation>Verbannung von %1 wurde aufgehoben.</translation>
<translation>Verbannung aufgehoben: %1</translation>
</message>
<message>
<location line="+227"/>
@ -247,7 +247,7 @@
<message>
<location line="+13"/>
<source>Incompatible cache version</source>
<translation>Inkompatible Cacheversion</translation>
<translation>Inkompatible Version des Caches</translation>
</message>
<message>
<location line="+1"/>
@ -283,7 +283,7 @@
<message>
<location line="+5"/>
<source>You joined the room</source>
<translation>Du bist dem Raum beigetreten.</translation>
<translation>Du hast den Raum betreten</translation>
</message>
<message>
<location line="+6"/>
@ -506,12 +506,12 @@
<message>
<location line="+2"/>
<source>Encrypted by an unverified device, but you have trusted that user so far.</source>
<translation type="unfinished"></translation>
<translation>Von einem unverifizierten Gerät verschlüsselt, Sie haben dem Nutzer jedoch früher schon vertraut.</translation>
</message>
<message>
<location line="+2"/>
<source>Encrypted by an unverified device</source>
<translation type="unfinished"></translation>
<translation>Von einem unverifizierten Gerät verschlüsselt</translation>
</message>
</context>
<context>
@ -598,7 +598,7 @@
<message>
<location filename="../qml/ForwardCompleter.qml" line="+44"/>
<source>Forward Message</source>
<translation type="unfinished"></translation>
<translation>Nachricht weiterleiten</translation>
</message>
</context>
<context>
@ -645,10 +645,10 @@
You can also put your homeserver address there, if your server doesn&apos;t support .well-known lookup.
Example: @user:server.my
If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source>
<translation>Dein Anmeldename. Eine mxid sollte mit einem @ anfangen, gefolgt von dem Benutzernamen. Nach dem Benutzernamen sollten ein Doppelpunkt (:) under der Servername folgen.
Nach dem Doppelpunkt kann alternativ die Serveradresse (mit oder ohne Port) angegeben werden, wenn der Server nicht per .well-known auffindbar ist.
<translation>Dein Anmeldename sollte mit einem @ anfangen, gefolgt von deinem Benutzernamen. Nach deinem Benutzernamen sollte ein Doppelpunkt (:) und der Servername folgen.
Nach dem Doppelpunkt kann alternativ die Serveradresse (mit oder ohne Port) angegeben werden, wenn der Server nicht via .well-known auffindbar ist.
Beispiel: @benutzer:dein.server
Wenn Nheko deinen Server nicht automatisch erkennen kann, wird es dich nach dem Server fragen.</translation>
Wenn Nheko deinen Server nicht automatisch erkennen kann, bekommst du eine Eingabemaske gezeigt in die du die Serverdaten manuell eintragen kannst.</translation>
</message>
<message>
<location line="+25"/>
@ -668,7 +668,7 @@ Wenn Nheko deinen Server nicht automatisch erkennen kann, wird es dich nach dem
<message>
<location line="+2"/>
<source>A name for this device, which will be shown to others, when verifying your devices. If none is provided a default is used.</source>
<translation>Ein Name für dieses Gerät. Dieser wird der anderen Seite gezeigt, wenn das Gerät verifiziert wird. Wenn nichts angeben wurde, wird einer generiert.</translation>
<translation>Ein Name für dieses Gerät, das der anderen Seite gezeigt wird, wenn das Gerät verifiziert wird. Wird nichts angegeben, wird einer generiert.</translation>
</message>
<message>
<location line="+4"/>
@ -785,7 +785,7 @@ Beispiel: https://mein.server:8787</translation>
<message>
<location line="+0"/>
<source>removed topic</source>
<translation>Raumthema wurde entfernt</translation>
<translation>Thema wurde entfernt</translation>
</message>
<message>
<location line="+9"/>
@ -1124,7 +1124,7 @@ Beispiel: https://mein.server:8787</translation>
<message>
<location line="+13"/>
<source>Cancel edit</source>
<translation>Editieren abbrechen</translation>
<translation>Bearbeiten abbrechen</translation>
</message>
</context>
<context>
@ -1266,7 +1266,7 @@ Beispiel: https://mein.server:8787</translation>
<location line="+1"/>
<source>Encryption is currently experimental and things might break unexpectedly. &lt;br&gt;
Please take note that it can&apos;t be disabled afterwards.</source>
<translation>Verschlüsselung ist aktuell experimentell und kann in verschiedenen Fällen zu Fehlern führen.&lt;br&gt;Verschlüsselung kann nachträglich nicht deaktiviert werden.</translation>
<translation>Verschlüsselung ist derzeit experimentell und könnte unerwartete Probleme verursachen.&lt;br&gt;Bitte beachte, dass dies später nicht mehr deaktiviert werden kann.</translation>
</message>
<message>
<location line="+17"/>
@ -1278,9 +1278,7 @@ Beispiel: https://mein.server:8787</translation>
<source>Whether or not the client should respond automatically with the session keys
upon request. Use with caution, this is a temporary measure to test the
E2E implementation until device verification is completed.</source>
<translation>Ob Nheko automatisch auf Schlüsselanfragen antwortet. Dies ist ein temporärer
Workaround um, solange die Ende-zu-Ende Verschlüsselung unvollständig ist, um
Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</translation>
<translation>Soll der Client automatisch mit den Sitzungsschlüsseln auf Anfragen antworten oder nicht? Bitte mit Vorsicht benutzen, dies ist eine vorübergehende Maßnahme, um die Ende-zu-Ende-Implementierung zu testen, bis die Geräteverifizierung abgeschlossen ist.</translation>
</message>
<message>
<location line="+21"/>
@ -1325,13 +1323,13 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
<message>
<location line="+5"/>
<source>Error while reading file: %1</source>
<translation>Fehler beim Lesen der DateI: %1</translation>
<translation>Fehler beim Lesen der Datei: %1</translation>
</message>
<message>
<location line="+34"/>
<location line="+20"/>
<source>Failed to upload image: %s</source>
<translation>Hochladen der Bilddatei fehlgeschlagen: %s</translation>
<translation>Hochladen des Bildes fehlgeschlagen: %s</translation>
</message>
</context>
<context>
@ -1349,23 +1347,23 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
<message>
<location line="+20"/>
<source>Frame rate:</source>
<translation>Wiederholungsrate:</translation>
<translation>Bildrate:</translation>
</message>
<message>
<location line="+19"/>
<source>Include your camera picture-in-picture</source>
<translation>Eigene Kamera als Bild-im-Bild anzeigen</translation>
<translation>Deine Kamera Bild-in-Bild anzeigen</translation>
</message>
<message>
<location line="+12"/>
<source>Request remote camera</source>
<translation>Kamera der Gegenstelle anfragen</translation>
<translation>Entfernte Kamera anfragen</translation>
</message>
<message>
<location line="+1"/>
<location line="+9"/>
<source>View your callee&apos;s camera like a regular video call</source>
<translation>Zeige die Kamera des Angerufen wie in einem normalen Videoanruf an</translation>
<translation>Die Kamera Ihres Gesprächspartners wie bei einem normalen Videoanruf betrachten</translation>
</message>
<message>
<location line="+5"/>
@ -1649,12 +1647,12 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
<message>
<location filename="../qml/TimelineView.qml" line="+125"/>
<source>Copy</source>
<translation type="unfinished"></translation>
<translation>Kopieren</translation>
</message>
<message>
<location line="+7"/>
<source>Copy link location</source>
<translation type="unfinished"></translation>
<translation>Link kopieren</translation>
</message>
<message>
<location line="+8"/>
@ -1679,7 +1677,7 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
<message>
<location line="+6"/>
<source>Forward</source>
<translation type="unfinished"></translation>
<translation>Weiterleiten</translation>
</message>
<message>
<location line="+9"/>
@ -1714,7 +1712,7 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
<message>
<location line="+7"/>
<source>Copy link to event</source>
<translation type="unfinished"></translation>
<translation>Link zu Event kopieren</translation>
</message>
<message>
<location line="+57"/>
@ -1871,7 +1869,7 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
<message>
<location filename="../../src/ui/UserProfile.cpp" line="+301"/>
<source>Select an avatar</source>
<translation>Wähle einen Avatar</translation>
<translation>Avatar wählen</translation>
</message>
<message>
<location line="+0"/>
@ -1993,13 +1991,12 @@ Betrifft nur Nachrichten in verschlüsselten Chats.</translation>
<location line="+2"/>
<source>When the window loses focus, the timeline will
be blurred.</source>
<translation>Verliert das Fenster den Fokus, werden die Nachrichten
verschwommen angezeigt.</translation>
<translation>Die Zeitliste wird unscharf, wenn das Fenster den Fokus verliert.</translation>
</message>
<message>
<location line="+2"/>
<source>Privacy screen timeout (in seconds [0 - 3600])</source>
<translation>Zeit bis Blickschutz aktiv wird (in Sekunden [0 - 3600])</translation>
<translation>Sichtschutz-Zeitbegrenzung (in Sekunden [0 - 3600])</translation>
</message>
<message>
<location line="+2"/>

File diff suppressed because it is too large Load diff

View file

@ -146,7 +146,7 @@
<message>
<location line="-509"/>
<source>Migrating the cache to the current version failed. This can have different reasons. Please open an issue and try to use an older version in the mean time. Alternatively you can try deleting the cache manually.</source>
<translation type="unfinished"></translation>
<translation>La migración de la caché a la versión actual ha fallado. Esto puede deberse a distintos motivos. Por favor, reporte el incidente y mientras tanto intente usar una versión anterior. También puede probar a borrar la caché manualmente.</translation>
</message>
<message>
<location line="+412"/>
@ -161,13 +161,13 @@
<message>
<location line="+44"/>
<source>Room %1 created.</source>
<translation type="unfinished"></translation>
<translation>Sala %1 creada.</translation>
</message>
<message>
<location line="+35"/>
<location line="+324"/>
<source>Confirm invite</source>
<translation type="unfinished"></translation>
<translation>Confirmar invitación</translation>
</message>
<message>
<location line="-323"/>
@ -182,7 +182,7 @@
<message>
<location line="+15"/>
<source>Confirm kick</source>
<translation type="unfinished"></translation>
<translation>Confirmar expulsión</translation>
</message>
<message>
<location line="+1"/>
@ -192,7 +192,7 @@
<message>
<location line="+16"/>
<source>Kicked user: %1</source>
<translation type="unfinished"></translation>
<translation>Se ha expulsado a %1</translation>
</message>
<message>
<location line="+10"/>

View file

@ -501,17 +501,17 @@
<message>
<location line="+4"/>
<source>Encrypted by a verified device</source>
<translation type="unfinished"></translation>
<translation>Krüptitud verifitseeritud seadmes</translation>
</message>
<message>
<location line="+2"/>
<source>Encrypted by an unverified device, but you have trusted that user so far.</source>
<translation type="unfinished"></translation>
<translation>Krüptitud verifitseerimata seadmes, aga sa oled selle kasutajat seni usaldanud.</translation>
</message>
<message>
<location line="+2"/>
<source>Encrypted by an unverified device</source>
<translation type="unfinished"></translation>
<translation>Krüptitud verifitseerimata seadmes</translation>
</message>
</context>
<context>
@ -598,7 +598,7 @@
<message>
<location filename="../qml/ForwardCompleter.qml" line="+44"/>
<source>Forward Message</source>
<translation type="unfinished"></translation>
<translation>Suuna sõnum edasi</translation>
</message>
</context>
<context>
@ -858,7 +858,7 @@ Näiteks: https://server.minu:8787</translation>
<message>
<location line="+11"/>
<source>You don&apos;t have permission to send messages in this room</source>
<translation type="unfinished"></translation>
<translation>Sul puuduvad selles jututoas õigused sõnumite saatmiseks</translation>
</message>
</context>
<context>
@ -1607,12 +1607,12 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
<message>
<location line="+842"/>
<source>%1 has changed their avatar and changed their display name to %2.</source>
<translation type="unfinished"></translation>
<translation>%1 muutis oma tunnuspilti ja seadistas uueks kuvatavaks nimeks %2.</translation>
</message>
<message>
<location line="+5"/>
<source>%1 has changed their display name to %2.</source>
<translation type="unfinished"></translation>
<translation>%1 seadistas uueks kuvatavaks nimeks %2.</translation>
</message>
<message>
<location line="+31"/>
@ -1649,12 +1649,12 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
<message>
<location filename="../qml/TimelineView.qml" line="+125"/>
<source>Copy</source>
<translation type="unfinished"></translation>
<translation>Kopeeri</translation>
</message>
<message>
<location line="+7"/>
<source>Copy link location</source>
<translation type="unfinished"></translation>
<translation>Kopeeri lingi asukoht</translation>
</message>
<message>
<location line="+8"/>
@ -1679,7 +1679,7 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
<message>
<location line="+6"/>
<source>Forward</source>
<translation type="unfinished"></translation>
<translation>Edasta</translation>
</message>
<message>
<location line="+9"/>
@ -1714,7 +1714,7 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
<message>
<location line="+7"/>
<source>Copy link to event</source>
<translation type="unfinished"></translation>
<translation>Kopeeri sündmuse link</translation>
</message>
<message>
<location line="+57"/>

View file

@ -17,7 +17,7 @@
<message>
<location line="+67"/>
<source>You are screen sharing</source>
<translation type="unfinished"></translation>
<translation>Olet jakamassa näyttöä</translation>
</message>
<message>
<location line="+17"/>
@ -58,7 +58,7 @@
<message>
<location filename="../../src/Cache.cpp" line="+2016"/>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
<translation>Sinä liityit tähän huoneeseen.</translation>
</message>
</context>
<context>
@ -66,17 +66,17 @@
<message>
<location filename="../qml/voip/CallInvite.qml" line="+70"/>
<source>Video Call</source>
<translation type="unfinished"></translation>
<translation>Videopuhelu</translation>
</message>
<message>
<location line="+0"/>
<source>Voice Call</source>
<translation type="unfinished"></translation>
<translation>Äänipuhelu</translation>
</message>
<message>
<location line="+62"/>
<source>No microphone found.</source>
<translation type="unfinished"></translation>
<translation>Mikrofonia ei löydy.</translation>
</message>
</context>
<context>
@ -84,12 +84,12 @@
<message>
<location filename="../qml/voip/CallInviteBar.qml" line="+64"/>
<source>Video Call</source>
<translation type="unfinished"></translation>
<translation>Videopuhelu</translation>
</message>
<message>
<location line="+0"/>
<source>Voice Call</source>
<translation type="unfinished"></translation>
<translation>Äänipuhelu</translation>
</message>
<message>
<location line="+16"/>
@ -104,12 +104,12 @@
<message>
<location line="+12"/>
<source>Unknown microphone: %1</source>
<translation type="unfinished"></translation>
<translation>Tuntematon mikrofoni: %1</translation>
</message>
<message>
<location line="+8"/>
<source>Unknown camera: %1</source>
<translation type="unfinished"></translation>
<translation>Tuntematon kamera: %1</translation>
</message>
<message>
<location line="+13"/>
@ -119,7 +119,7 @@
<message>
<location line="-28"/>
<source>No microphone found.</source>
<translation type="unfinished"></translation>
<translation>Mikrofonia ei löydy.</translation>
</message>
</context>
<context>
@ -141,7 +141,7 @@
<location line="+4"/>
<location line="+809"/>
<source>Invited user: %1</source>
<translation type="unfinished"></translation>
<translation>Kutsuttu käyttäjä: %1</translation>
</message>
<message>
<location line="-509"/>
@ -151,12 +151,12 @@
<message>
<location line="+412"/>
<source>Confirm join</source>
<translation type="unfinished"></translation>
<translation>Vahvista liittyminen</translation>
</message>
<message>
<location line="+1"/>
<source>Do you really want to join %1?</source>
<translation type="unfinished"></translation>
<translation>Haluatko todella liittyä huoneeseen %1?</translation>
</message>
<message>
<location line="+44"/>
@ -278,12 +278,12 @@
<message>
<location line="+51"/>
<source>Failed to join room: %1</source>
<translation type="unfinished"></translation>
<translation>Huoneeseen liittyminen epäonnistui: %1</translation>
</message>
<message>
<location line="+5"/>
<source>You joined the room</source>
<translation type="unfinished"></translation>
<translation>Sinä liityit huoneeseen</translation>
</message>
<message>
<location line="+6"/>
@ -425,22 +425,22 @@
<message>
<location filename="../qml/emoji/EmojiPicker.qml" line="+59"/>
<source>Search</source>
<translation type="unfinished"></translation>
<translation>Hae</translation>
</message>
<message>
<location line="+172"/>
<source>People</source>
<translation type="unfinished"></translation>
<translation>Ihmiset</translation>
</message>
<message>
<location line="+2"/>
<source>Nature</source>
<translation type="unfinished"></translation>
<translation>Luonto</translation>
</message>
<message>
<location line="+2"/>
<source>Food</source>
<translation type="unfinished"></translation>
<translation>Ruoka</translation>
</message>
<message>
<location line="+2"/>
@ -450,7 +450,7 @@
<message>
<location line="+2"/>
<source>Travel</source>
<translation type="unfinished"></translation>
<translation>Matkustaminen</translation>
</message>
<message>
<location line="+2"/>
@ -496,7 +496,7 @@
<message>
<location filename="../qml/EncryptionIndicator.qml" line="+34"/>
<source>This message is not encrypted!</source>
<translation type="unfinished"></translation>
<translation>Tätä viestiä ei ole salattu!</translation>
</message>
<message>
<location line="+4"/>
@ -598,7 +598,7 @@
<message>
<location filename="../qml/ForwardCompleter.qml" line="+44"/>
<source>Forward Message</source>
<translation type="unfinished"></translation>
<translation>Välitä viesti</translation>
</message>
</context>
<context>
@ -655,7 +655,7 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
<message>
<location line="+2"/>
<source>Your password.</source>
<translation type="unfinished"></translation>
<translation>Salasanasi.</translation>
</message>
<message>
<location line="+3"/>
@ -670,7 +670,7 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
<message>
<location line="+4"/>
<source>Homeserver address</source>
<translation type="unfinished"></translation>
<translation>Kotipalvelimen osoite</translation>
</message>
<message>
<location line="+1"/>
@ -761,12 +761,12 @@ Example: https://server.my:8787</source>
<message>
<location line="+9"/>
<source>Encryption enabled</source>
<translation type="unfinished"></translation>
<translation>Salaus on käytössä</translation>
</message>
<message>
<location line="+9"/>
<source>room name changed to: %1</source>
<translation type="unfinished"></translation>
<translation>huoneen nimi muutettu: %1</translation>
</message>
<message>
<location line="+0"/>
@ -862,22 +862,22 @@ Example: https://server.my:8787</source>
<message>
<location filename="../qml/MessageView.qml" line="+82"/>
<source>Edit</source>
<translation type="unfinished"></translation>
<translation>Muokkaa</translation>
</message>
<message>
<location line="+15"/>
<source>React</source>
<translation type="unfinished"></translation>
<translation>Reagoi</translation>
</message>
<message>
<location line="+13"/>
<source>Reply</source>
<translation type="unfinished"></translation>
<translation>Vastaa</translation>
</message>
<message>
<location line="+11"/>
<source>Options</source>
<translation type="unfinished"></translation>
<translation>Asetukset</translation>
</message>
</context>
<context>
@ -945,7 +945,7 @@ Example: https://server.my:8787</source>
<location filename="../../src/notifications/ManagerMac.cpp" line="+44"/>
<location filename="../../src/notifications/ManagerWin.cpp" line="+78"/>
<source>%1 sent an encrypted message</source>
<translation type="unfinished">%1 lähetti salatun viestin</translation>
<translation>%1 lähetti salatun viestin</translation>
</message>
<message>
<location line="+4"/>
@ -957,29 +957,29 @@ Example: https://server.my:8787</source>
<location line="+5"/>
<source>%1 replied: %2</source>
<comment>Format a reply in a notification. %1 is the sender, %2 the message</comment>
<translation type="unfinished"></translation>
<translation>%1 vastasi: %2</translation>
</message>
<message>
<location line="+4"/>
<source>%1: %2</source>
<comment>Format a normal message in a notification. %1 is the sender, %2 the message</comment>
<translation type="unfinished">%1: %2</translation>
<translation>%1: %2</translation>
</message>
<message>
<location filename="../../src/notifications/ManagerMac.cpp" line="-1"/>
<location filename="../../src/notifications/ManagerWin.cpp" line="-1"/>
<source>%1 replied with an encrypted message</source>
<translation type="unfinished"></translation>
<translation>%1 vastasi salatulla viestillä</translation>
</message>
<message>
<location line="+6"/>
<source>%1 replied to a message</source>
<translation type="unfinished"></translation>
<translation>%1 vastasi viestiin</translation>
</message>
<message>
<location line="+0"/>
<source>%1 sent a message</source>
<translation type="unfinished"></translation>
<translation>%1 lähetti viestin</translation>
</message>
</context>
<context>
@ -992,7 +992,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+16"/>
<source>No microphone found.</source>
<translation type="unfinished"></translation>
<translation>Mikrofonia ei löydy.</translation>
</message>
<message>
<location line="+22"/>
@ -1052,7 +1052,7 @@ Example: https://server.my:8787</source>
<location line="+2"/>
<location line="+287"/>
<source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source>
<translation type="unfinished"></translation>
<translation>Käyttäjätunnus ei saa olla tyhjä, ja se saa sisältää vain merkkejä a-z, 0-9, ., _, =, - ja /.</translation>
</message>
<message>
<location line="-283"/>
@ -1072,7 +1072,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+4"/>
<source>Homeserver</source>
<translation type="unfinished"></translation>
<translation>Kotipalvelin</translation>
</message>
<message>
<location line="+2"/>
@ -1120,7 +1120,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+13"/>
<source>Cancel edit</source>
<translation type="unfinished"></translation>
<translation>Peruuta muokkaus</translation>
</message>
</context>
<context>
@ -1251,12 +1251,12 @@ Example: https://server.my:8787</source>
<message>
<location line="+9"/>
<source>Encryption</source>
<translation type="unfinished"></translation>
<translation>Salaus</translation>
</message>
<message>
<location line="+20"/>
<source>End-to-End Encryption</source>
<translation type="unfinished">Päästä-päähän-salaus</translation>
<translation>Päästä-päähän-salaus</translation>
</message>
<message>
<location line="+1"/>
@ -1289,43 +1289,43 @@ Example: https://server.my:8787</source>
<message>
<location line="+10"/>
<source>Room Version</source>
<translation type="unfinished"></translation>
<translation>Huoneen versio</translation>
</message>
<message>
<location line="+13"/>
<source>OK</source>
<translation type="unfinished">OK</translation>
<translation>OK</translation>
</message>
<message>
<location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
<source>Failed to enable encryption: %1</source>
<translation type="unfinished">Salauksen aktivointi epäonnistui: %1</translation>
<translation>Salauksen aktivointi epäonnistui: %1</translation>
</message>
<message>
<location line="+228"/>
<source>Select an avatar</source>
<translation type="unfinished">Valitse profiilikuva</translation>
<translation>Valitse profiilikuva</translation>
</message>
<message>
<location line="+0"/>
<source>All Files (*)</source>
<translation type="unfinished">Kaikki Tiedostot (*)</translation>
<translation>Kaikki Tiedostot (*)</translation>
</message>
<message>
<location line="+12"/>
<source>The selected file is not an image</source>
<translation type="unfinished">Valittu tiedosto ei ole kuva</translation>
<translation>Valittu tiedosto ei ole kuva</translation>
</message>
<message>
<location line="+5"/>
<source>Error while reading file: %1</source>
<translation type="unfinished">Virhe lukiessa tiedostoa: %1</translation>
<translation>Virhe lukiessa tiedostoa: %1</translation>
</message>
<message>
<location line="+34"/>
<location line="+20"/>
<source>Failed to upload image: %s</source>
<translation type="unfinished">Kuvan lähetys epäonnistui: %s</translation>
<translation>Kuvan lähetys epäonnistui: %s</translation>
</message>
</context>
<context>
@ -1364,7 +1364,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+5"/>
<source>Hide mouse cursor</source>
<translation type="unfinished"></translation>
<translation>Piilota hiiren kursori</translation>
</message>
<message>
<location line="+20"/>
@ -1379,7 +1379,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+7"/>
<source>Cancel</source>
<translation type="unfinished">Peruuta</translation>
<translation>Peruuta</translation>
</message>
</context>
<context>
@ -1472,17 +1472,17 @@ Example: https://server.my:8787</source>
<message>
<location line="+2"/>
<source>Save video</source>
<translation type="unfinished"></translation>
<translation>Tallenna video</translation>
</message>
<message>
<location line="+2"/>
<source>Save audio</source>
<translation type="unfinished"></translation>
<translation>Tallenna äänitiedosto</translation>
</message>
<message>
<location line="+2"/>
<source>Save file</source>
<translation type="unfinished"></translation>
<translation>Tallenna tiedosto</translation>
</message>
<message numerus="yes">
<location line="+228"/>
@ -1556,7 +1556,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+4"/>
<source>%1 joined.</source>
<translation type="unfinished"></translation>
<translation>%1 liittyi.</translation>
</message>
<message>
<location line="+9"/>
@ -1571,7 +1571,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+3"/>
<source>%1 left the room.</source>
<translation type="unfinished"></translation>
<translation>%1 poistui huoneesta.</translation>
</message>
<message>
<location line="+2"/>
@ -1596,7 +1596,7 @@ Example: https://server.my:8787</source>
<message>
<location line="-876"/>
<source>You joined this room.</source>
<translation type="unfinished"></translation>
<translation>Sinä liityit tähän huoneeseen.</translation>
</message>
<message>
<location line="+842"/>
@ -1622,7 +1622,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+15"/>
<source> Reason: %1</source>
<translation type="unfinished"></translation>
<translation>Perustelu: %1</translation>
</message>
<message>
<location line="-5"/>
@ -1635,7 +1635,7 @@ Example: https://server.my:8787</source>
<message>
<location filename="../qml/TimelineRow.qml" line="+106"/>
<source>Edited</source>
<translation type="unfinished"></translation>
<translation>Muokattu</translation>
</message>
</context>
<context>
@ -1643,27 +1643,27 @@ Example: https://server.my:8787</source>
<message>
<location filename="../qml/TimelineView.qml" line="+125"/>
<source>Copy</source>
<translation type="unfinished"></translation>
<translation>Kopioi</translation>
</message>
<message>
<location line="+7"/>
<source>Copy link location</source>
<translation type="unfinished"></translation>
<translation>Kopioi linkin sijainti</translation>
</message>
<message>
<location line="+8"/>
<source>React</source>
<translation type="unfinished"></translation>
<translation>Reagoi</translation>
</message>
<message>
<location line="+8"/>
<source>Reply</source>
<translation type="unfinished"></translation>
<translation>Vastaa</translation>
</message>
<message>
<location line="+7"/>
<source>Edit</source>
<translation type="unfinished"></translation>
<translation>Muokkaa</translation>
</message>
<message>
<location line="+5"/>
@ -1673,12 +1673,12 @@ Example: https://server.my:8787</source>
<message>
<location line="+6"/>
<source>Forward</source>
<translation type="unfinished"></translation>
<translation>Lähetä viesti eteenpäin</translation>
</message>
<message>
<location line="+9"/>
<source>Mark as read</source>
<translation type="unfinished"></translation>
<translation>Merkitse luetuksi</translation>
</message>
<message>
<location line="+4"/>
@ -1693,12 +1693,12 @@ Example: https://server.my:8787</source>
<message>
<location line="+6"/>
<source>Remove message</source>
<translation type="unfinished"></translation>
<translation>Poista viesti</translation>
</message>
<message>
<location line="+7"/>
<source>Save as</source>
<translation type="unfinished"></translation>
<translation>Tallenna nimellä</translation>
</message>
<message>
<location line="+7"/>
@ -2148,7 +2148,7 @@ This usually causes the application icon in the task bar to animate in some fash
<message>
<location line="+4"/>
<source>Ringtone</source>
<translation type="unfinished"></translation>
<translation>Soittoääni</translation>
</message>
<message>
<location line="+2"/>
@ -2158,12 +2158,12 @@ This usually causes the application icon in the task bar to animate in some fash
<message>
<location line="+1"/>
<source>Microphone</source>
<translation type="unfinished"></translation>
<translation>Mikrofoni</translation>
</message>
<message>
<location line="+1"/>
<source>Camera</source>
<translation type="unfinished"></translation>
<translation>Kamera</translation>
</message>
<message>
<location line="+1"/>

View file

@ -6,33 +6,33 @@
<message>
<location filename="../qml/voip/ActiveCallBar.qml" line="+106"/>
<source>Calling...</source>
<translation type="unfinished"></translation>
<translation>Sto chiamando</translation>
</message>
<message>
<location line="+10"/>
<location line="+10"/>
<source>Connecting...</source>
<translation type="unfinished"></translation>
<translation>Connessione in corso...</translation>
</message>
<message>
<location line="+67"/>
<source>You are screen sharing</source>
<translation type="unfinished"></translation>
<translation>Stai condividendo il tuo schermo</translation>
</message>
<message>
<location line="+17"/>
<source>Hide/Show Picture-in-Picture</source>
<translation type="unfinished"></translation>
<translation>Nascondi/Mostra Picture-in-Picture</translation>
</message>
<message>
<location line="+13"/>
<source>Unmute Mic</source>
<translation type="unfinished"></translation>
<translation>Attiva Microfono</translation>
</message>
<message>
<location line="+0"/>
<source>Mute Mic</source>
<translation type="unfinished"></translation>
<translation>Silenzia Microfono</translation>
</message>
</context>
<context>
@ -40,12 +40,12 @@
<message>
<location filename="../qml/device-verification/AwaitingVerificationConfirmation.qml" line="+11"/>
<source>Awaiting Confirmation</source>
<translation type="unfinished"></translation>
<translation>In attesa di conferma</translation>
</message>
<message>
<location line="+12"/>
<source>Waiting for other side to complete verification.</source>
<translation type="unfinished"></translation>
<translation>In attesa della conferma dall&apos;altra parte per la verifica.</translation>
</message>
<message>
<location line="+12"/>
@ -66,17 +66,17 @@
<message>
<location filename="../qml/voip/CallInvite.qml" line="+70"/>
<source>Video Call</source>
<translation type="unfinished"></translation>
<translation>Chiamata video</translation>
</message>
<message>
<location line="+0"/>
<source>Voice Call</source>
<translation type="unfinished"></translation>
<translation>Chiamata vocale</translation>
</message>
<message>
<location line="+62"/>
<source>No microphone found.</source>
<translation type="unfinished"></translation>
<translation>Nessun microfono trovato.</translation>
</message>
</context>
<context>
@ -84,22 +84,22 @@
<message>
<location filename="../qml/voip/CallInviteBar.qml" line="+64"/>
<source>Video Call</source>
<translation type="unfinished"></translation>
<translation>Chiamata Video</translation>
</message>
<message>
<location line="+0"/>
<source>Voice Call</source>
<translation type="unfinished"></translation>
<translation>Chiamata audio</translation>
</message>
<message>
<location line="+16"/>
<source>Devices</source>
<translation type="unfinished">Dispositivi</translation>
<translation>Dispositivi</translation>
</message>
<message>
<location line="+10"/>
<source>Accept</source>
<translation type="unfinished">Accetta</translation>
<translation>Accetta</translation>
</message>
<message>
<location line="+12"/>
@ -114,12 +114,12 @@
<message>
<location line="+13"/>
<source>Decline</source>
<translation type="unfinished">Rifiuta</translation>
<translation>Rifiuta</translation>
</message>
<message>
<location line="-28"/>
<source>No microphone found.</source>
<translation type="unfinished"></translation>
<translation>Nessun microfono trovato.</translation>
</message>
</context>
<context>
@ -151,12 +151,12 @@
<message>
<location line="+412"/>
<source>Confirm join</source>
<translation type="unfinished"></translation>
<translation>Conferma collegamento</translation>
</message>
<message>
<location line="+1"/>
<source>Do you really want to join %1?</source>
<translation type="unfinished"></translation>
<translation>Vuoi davvero collegarti a %1?</translation>
</message>
<message>
<location line="+44"/>
@ -167,12 +167,12 @@
<location line="+35"/>
<location line="+324"/>
<source>Confirm invite</source>
<translation type="unfinished"></translation>
<translation>Conferma Invito</translation>
</message>
<message>
<location line="-323"/>
<source>Do you really want to invite %1 (%2)?</source>
<translation type="unfinished"></translation>
<translation>Vuoi davvero inviare %1 (%2)?</translation>
</message>
<message>
<location line="+11"/>
@ -182,12 +182,12 @@
<message>
<location line="+15"/>
<source>Confirm kick</source>
<translation type="unfinished"></translation>
<translation>Conferma l&apos;allontanamento</translation>
</message>
<message>
<location line="+1"/>
<source>Do you really want to kick %1 (%2)?</source>
<translation type="unfinished"></translation>
<translation>Vuoi davvero allontanare %1 (%2)?</translation>
</message>
<message>
<location line="+16"/>
@ -197,12 +197,12 @@
<message>
<location line="+10"/>
<source>Confirm ban</source>
<translation type="unfinished"></translation>
<translation>Conferma ban</translation>
</message>
<message>
<location line="+1"/>
<source>Do you really want to ban %1 (%2)?</source>
<translation type="unfinished"></translation>
<translation>Vuoi veramente bannare %1 (%2)?</translation>
</message>
<message>
<location line="+11"/>
@ -217,12 +217,12 @@
<message>
<location line="+10"/>
<source>Confirm unban</source>
<translation type="unfinished"></translation>
<translation>Conferma reintegro</translation>
</message>
<message>
<location line="+1"/>
<source>Do you really want to unban %1 (%2)?</source>
<translation type="unfinished"></translation>
<translation>Vuoi veramente reintegrare %1 (%2)?</translation>
</message>
<message>
<location line="+11"/>
@ -303,7 +303,7 @@
<message>
<location line="+61"/>
<source>Failed to kick %1 from %2: %3</source>
<translation type="unfinished"></translation>
<translation>Fallita l&apos;espulsione di %1 da %2: %3</translation>
</message>
</context>
<context>
@ -311,7 +311,7 @@
<message>
<location filename="../../src/CommunitiesListItem.cpp" line="+30"/>
<source>Hide rooms with this tag or from this community</source>
<translation type="unfinished"></translation>
<translation>Nascondi stanze con questo tag o di questa comunità</translation>
</message>
<message>
<location line="+153"/>
@ -332,7 +332,7 @@
<location line="+2"/>
<source>Server Notices</source>
<comment>Tag translation for m.server_notice</comment>
<translation type="unfinished"></translation>
<translation>Notifiche del server</translation>
</message>
<message>
<location line="+2"/>
@ -351,27 +351,27 @@
<message>
<location filename="../../src/ChatPage.cpp" line="+228"/>
<source>Decrypt secrets</source>
<translation type="unfinished"></translation>
<translation>Decifra i segreti</translation>
</message>
<message>
<location line="+2"/>
<source>Enter your recovery key or passphrase to decrypt your secrets:</source>
<translation type="unfinished"></translation>
<translation>Inserisci la chiave di recupero o la parola chiave per decriptare i tuoi segreti:</translation>
</message>
<message>
<location line="+3"/>
<source>Enter your recovery key or passphrase called %1 to decrypt your secrets:</source>
<translation type="unfinished"></translation>
<translation>Inserisci la tua chiave di recupero o la parola chiave chiamata %1 per decifrare i tuoi segreti:</translation>
</message>
<message>
<location line="+17"/>
<source>Decryption failed</source>
<translation type="unfinished"></translation>
<translation>Decrittazione fallita</translation>
</message>
<message>
<location line="+1"/>
<source>Failed to decrypt secrets with the provided recovery key or passphrase</source>
<translation type="unfinished"></translation>
<translation>Fallita la decrittazione usando la chiave di recupero o la parola chiave fornita</translation>
</message>
</context>
<context>
@ -379,22 +379,22 @@
<message>
<location filename="../qml/device-verification/DigitVerification.qml" line="+11"/>
<source>Verification Code</source>
<translation type="unfinished"></translation>
<translation>Codice di verifica</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 &apos;They do not match!&apos; to abort verification!</source>
<translation type="unfinished"></translation>
<translation>Verificare i seguenti numeri. Dovresti vedere gli stessi numeri da entrambi i lati. Se differiscono, premi &apos;Sono diversi!&apos; per annullare la verifica!</translation>
</message>
<message>
<location line="+31"/>
<source>They do not match!</source>
<translation type="unfinished"></translation>
<translation>Non corrispondono!</translation>
</message>
<message>
<location line="+13"/>
<source>They match!</source>
<translation type="unfinished"></translation>
<translation>Corrispondono!</translation>
</message>
</context>
<context>
@ -425,7 +425,7 @@
<message>
<location filename="../qml/emoji/EmojiPicker.qml" line="+59"/>
<source>Search</source>
<translation type="unfinished"></translation>
<translation>Cerca</translation>
</message>
<message>
<location line="+172"/>
@ -435,7 +435,7 @@
<message>
<location line="+2"/>
<source>Nature</source>
<translation type="unfinished"></translation>
<translation>Natura</translation>
</message>
<message>
<location line="+2"/>
@ -445,27 +445,27 @@
<message>
<location line="+2"/>
<source>Activity</source>
<translation type="unfinished">Attività</translation>
<translation>Attività</translation>
</message>
<message>
<location line="+2"/>
<source>Travel</source>
<translation type="unfinished"></translation>
<translation>Viaggi</translation>
</message>
<message>
<location line="+2"/>
<source>Objects</source>
<translation type="unfinished">Oggetti</translation>
<translation>Oggetti</translation>
</message>
<message>
<location line="+2"/>
<source>Symbols</source>
<translation type="unfinished">Simboli</translation>
<translation>Simboli</translation>
</message>
<message>
<location line="+2"/>
<source>Flags</source>
<translation type="unfinished">Bandiere</translation>
<translation>Bandiere</translation>
</message>
</context>
<context>
@ -473,7 +473,7 @@
<message>
<location filename="../qml/device-verification/EmojiVerification.qml" line="+11"/>
<source>Verification Code</source>
<translation type="unfinished"></translation>
<translation>Codice di Verifica</translation>
</message>
<message>
<location line="+10"/>
@ -483,12 +483,12 @@
<message>
<location line="+376"/>
<source>They do not match!</source>
<translation type="unfinished"></translation>
<translation>Non corrispondono!</translation>
</message>
<message>
<location line="+13"/>
<source>They match!</source>
<translation type="unfinished"></translation>
<translation>Corrispondono!</translation>
</message>
</context>
<context>
@ -496,22 +496,22 @@
<message>
<location filename="../qml/EncryptionIndicator.qml" line="+34"/>
<source>This message is not encrypted!</source>
<translation>Questo messaggio è in chiaro!</translation>
<translation>Questo messaggio non è crittato!</translation>
</message>
<message>
<location line="+4"/>
<source>Encrypted by a verified device</source>
<translation type="unfinished"></translation>
<translation>Criptato da un dispositivo verificato</translation>
</message>
<message>
<location line="+2"/>
<source>Encrypted by an unverified device, but you have trusted that user so far.</source>
<translation type="unfinished"></translation>
<translation>Criptato da un dispositivo non verificato ma hai già verificato questo utente.</translation>
</message>
<message>
<location line="+2"/>
<source>Encrypted by an unverified device</source>
<translation type="unfinished"></translation>
<translation>Criptato da un dispositivo non verificato</translation>
</message>
</context>
<context>
@ -520,13 +520,13 @@
<location filename="../../src/timeline/EventStore.cpp" line="+616"/>
<source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted.</comment>
<translation type="unfinished">-- Evento Criptato (Chiavi per la decriptazione non trovate) --</translation>
<translation>-- Evento Criptato (Nessuna chiave privata per la decriptazione) --</translation>
</message>
<message>
<location line="+7"/>
<source>-- Encrypted Event (Key not valid for this index) --</source>
<comment>Placeholder, when the message can&apos;t be decrypted with this key since it is not valid for this index </comment>
<translation type="unfinished"></translation>
<translation>-- Evento Criptato (Chiave non valida per questo indice) --</translation>
</message>
<message>
<location line="+32"/>
@ -1024,7 +1024,7 @@ Esempio: https://server.mio:8787</translation>
<message>
<location filename="../qml/delegates/Placeholder.qml" line="+8"/>
<source>unimplemented event: </source>
<translation>event non implementato: </translation>
<translation>evento non implementato: </translation>
</message>
</context>
<context>
@ -1157,7 +1157,7 @@ Esempio: https://server.mio:8787</translation>
<location line="+3"/>
<source>Low Priority</source>
<comment>Standard matrix tag for low priority rooms</comment>
<translation>bassa priorità</translation>
<translation>Tag matrix standard per stanze a bassa priorità</translation>
</message>
<message>
<location line="+3"/>
@ -1181,7 +1181,7 @@ Esempio: https://server.mio:8787</translation>
<location line="+4"/>
<source>New Tag</source>
<comment>Tag name prompt title</comment>
<translation type="unfinished"></translation>
<translation>Nome del tag</translation>
</message>
<message>
<location line="+1"/>
@ -1520,12 +1520,12 @@ Esempio: https://server.mio:8787</translation>
<message>
<location line="+23"/>
<source>%1 made the room history world readable. Events may be now read by non-joined people.</source>
<translation>%1 ha reso la cronologia della stanza leggibile da tutti. Gli eventi adesso possono essere letti da persone esterne. </translation>
<translation>%1 ha reso la cronologia della stanza leggibile da tutti. Gli eventi adesso possono essere letti da persone esterne.</translation>
</message>
<message>
<location line="+4"/>
<source>%1 set the room history visible to members from this point on.</source>
<translation>%1 ha reso la cronologia della stanza visibile ai membri da questo momento in poi. </translation>
<translation>%1 ha reso la cronologia della stanza visibile ai membri da questo momento in poi.</translation>
</message>
<message>
<location line="+3"/>
@ -2449,7 +2449,7 @@ This usually causes the application icon in the task bar to animate in some fash
<message>
<location filename="../../src/dialogs/FallbackAuth.cpp" line="+34"/>
<source>Open Fallback in Browser</source>
<translation>Apertura di Ripiego nel Browser </translation>
<translation>Apertura di Ripiego nel Browser</translation>
</message>
<message>
<location line="+1"/>

File diff suppressed because it is too large Load diff

View file

@ -17,12 +17,12 @@
<message>
<location line="+67"/>
<source>You are screen sharing</source>
<translation type="unfinished"></translation>
<translation>Вы демонстрируете экран</translation>
</message>
<message>
<location line="+17"/>
<source>Hide/Show Picture-in-Picture</source>
<translation type="unfinished"></translation>
<translation>Убрать/Показать Картинку-в-Картинке</translation>
</message>
<message>
<location line="+13"/>
@ -84,42 +84,42 @@
<message>
<location filename="../qml/voip/CallInviteBar.qml" line="+64"/>
<source>Video Call</source>
<translation type="unfinished">Видео Звонок</translation>
<translation>Видео Звонок</translation>
</message>
<message>
<location line="+0"/>
<source>Voice Call</source>
<translation type="unfinished">Голосовой Звонок</translation>
<translation>Голосовой Звонок</translation>
</message>
<message>
<location line="+16"/>
<source>Devices</source>
<translation type="unfinished">Устройства</translation>
<translation>Устройства</translation>
</message>
<message>
<location line="+10"/>
<source>Accept</source>
<translation type="unfinished">Принять</translation>
<translation>Принять</translation>
</message>
<message>
<location line="+12"/>
<source>Unknown microphone: %1</source>
<translation type="unfinished"></translation>
<translation>Неизвестный микрофон: %1</translation>
</message>
<message>
<location line="+8"/>
<source>Unknown camera: %1</source>
<translation type="unfinished"></translation>
<translation>Неизвестная камера: %1</translation>
</message>
<message>
<location line="+13"/>
<source>Decline</source>
<translation type="unfinished">Отказаться</translation>
<translation>Отказаться</translation>
</message>
<message>
<location line="-28"/>
<source>No microphone found.</source>
<translation type="unfinished">Микрофон не найден.</translation>
<translation>Микрофон не найден.</translation>
</message>
</context>
<context>
@ -127,7 +127,7 @@
<message>
<location filename="../../src/CallManager.cpp" line="+521"/>
<source>Entire screen</source>
<translation type="unfinished"></translation>
<translation>Весь экран</translation>
</message>
</context>
<context>
@ -151,12 +151,12 @@
<message>
<location line="+412"/>
<source>Confirm join</source>
<translation type="unfinished"></translation>
<translation>Подтвердить вход</translation>
</message>
<message>
<location line="+1"/>
<source>Do you really want to join %1?</source>
<translation type="unfinished"></translation>
<translation>Вы действительно хотите присоединиться?</translation>
</message>
<message>
<location line="+44"/>
@ -237,7 +237,7 @@
<message>
<location line="+227"/>
<source>Do you really want to start a private chat with %1?</source>
<translation type="unfinished"></translation>
<translation>Вы действительно хотите начать личную переписку с %1?</translation>
</message>
<message>
<location line="-818"/>
@ -303,7 +303,7 @@
<message>
<location line="+61"/>
<source>Failed to kick %1 from %2: %3</source>
<translation type="unfinished"></translation>
<translation>Не удалось выгнать %1 из %2: %3</translation>
</message>
</context>
<context>
@ -351,27 +351,27 @@
<message>
<location filename="../../src/ChatPage.cpp" line="+228"/>
<source>Decrypt secrets</source>
<translation type="unfinished"></translation>
<translation>Расшифровать секреты</translation>
</message>
<message>
<location line="+2"/>
<source>Enter your recovery key or passphrase to decrypt your secrets:</source>
<translation type="unfinished"></translation>
<translation>Введите свой ключ восстановления или пароль для расшифровки секретов: </translation>
</message>
<message>
<location line="+3"/>
<source>Enter your recovery key or passphrase called %1 to decrypt your secrets:</source>
<translation type="unfinished"></translation>
<translation>Введите свой ключ восстановления или пароль названный %1 для расшифровки Ваших секретов:</translation>
</message>
<message>
<location line="+17"/>
<source>Decryption failed</source>
<translation type="unfinished"></translation>
<translation>Расшифровка не удалась</translation>
</message>
<message>
<location line="+1"/>
<source>Failed to decrypt secrets with the provided recovery key or passphrase</source>
<translation type="unfinished"></translation>
<translation>Не удалось расшифровать секреты с помощью предоставленного ключа восстановления или пароля.</translation>
</message>
</context>
<context>
@ -501,17 +501,17 @@
<message>
<location line="+4"/>
<source>Encrypted by a verified device</source>
<translation type="unfinished"></translation>
<translation>Зашифровано верефицированым устройством</translation>
</message>
<message>
<location line="+2"/>
<source>Encrypted by an unverified device, but you have trusted that user so far.</source>
<translation type="unfinished"></translation>
<translation>Зашифрованно неверефицированым устройством, но Вы все еще доверяете этому пользователю.</translation>
</message>
<message>
<location line="+2"/>
<source>Encrypted by an unverified device</source>
<translation type="unfinished"></translation>
<translation>Зашифровано неверифицированым устройства</translation>
</message>
</context>
<context>
@ -520,20 +520,20 @@
<location filename="../../src/timeline/EventStore.cpp" line="+616"/>
<source>-- Encrypted Event (No keys found for decryption) --</source>
<comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted.</comment>
<translation>-- Зашифрованное событие (Нет найдено ключей для дешифрования) --</translation>
<translation>-- Зашифрованное событие (Не найдено ключей для дешифрования) --</translation>
</message>
<message>
<location line="+7"/>
<source>-- Encrypted Event (Key not valid for this index) --</source>
<comment>Placeholder, when the message can&apos;t be decrypted with this key since it is not valid for this index </comment>
<translation type="unfinished"></translation>
<translation>-- Зашифрованное событие(Не найдено ключей для дешифрования) --</translation>
</message>
<message>
<location line="+32"/>
<location line="+63"/>
<source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
<comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed.</comment>
<translation>-- Ошибка дешифрования (Не удалось получить megolm-ключи для бд) --</translation>
<translation>-- Ошибка дешифрования (Не удалось получить megolm-ключи из бд) --</translation>
</message>
<message>
<location line="-49"/>
@ -598,7 +598,7 @@
<message>
<location filename="../qml/ForwardCompleter.qml" line="+44"/>
<source>Forward Message</source>
<translation type="unfinished"></translation>
<translation>Переслать Сообщение</translation>
</message>
</context>
<context>
@ -658,7 +658,7 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
<message>
<location line="+2"/>
<source>Your password.</source>
<translation type="unfinished"></translation>
<translation>Ваш пароль.</translation>
</message>
<message>
<location line="+3"/>
@ -673,12 +673,12 @@ If Nheko fails to discover your homeserver, it will show you a field to enter th
<message>
<location line="+4"/>
<source>Homeserver address</source>
<translation type="unfinished"></translation>
<translation>Адрес домашнего сервера</translation>
</message>
<message>
<location line="+1"/>
<source>server.my:8787</source>
<translation type="unfinished"></translation>
<translation>server.my:8787</translation>
</message>
<message>
<location line="+1"/>
@ -698,7 +698,7 @@ Example: https://server.my:8787</source>
<location line="+160"/>
<location line="+11"/>
<source>You have entered an invalid Matrix ID e.g @joe:matrix.org</source>
<translation type="unfinished"></translation>
<translation>Вы ввели не правильный Matrix ID, @joe:matrix.org</translation>
</message>
<message>
<location line="-132"/>
@ -858,7 +858,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+11"/>
<source>You don&apos;t have permission to send messages in this room</source>
<translation type="unfinished"></translation>
<translation>У вас нет прав для отправления сообщений в этой комнате</translation>
</message>
</context>
<context>
@ -866,22 +866,22 @@ Example: https://server.my:8787</source>
<message>
<location filename="../qml/MessageView.qml" line="+82"/>
<source>Edit</source>
<translation type="unfinished"></translation>
<translation>Редактировать</translation>
</message>
<message>
<location line="+15"/>
<source>React</source>
<translation type="unfinished">Отреагировать</translation>
<translation>Реакция</translation>
</message>
<message>
<location line="+13"/>
<source>Reply</source>
<translation type="unfinished">Ответить</translation>
<translation>Ответить</translation>
</message>
<message>
<location line="+11"/>
<source>Options</source>
<translation type="unfinished">Опции</translation>
<translation>Опции</translation>
</message>
</context>
<context>
@ -889,12 +889,12 @@ Example: https://server.my:8787</source>
<message>
<location filename="../qml/device-verification/NewVerificationRequest.qml" line="+11"/>
<source>Send Verification Request</source>
<translation type="unfinished"></translation>
<translation>Отправить Запрос Верификации</translation>
</message>
<message>
<location line="+0"/>
<source>Received Verification Request</source>
<translation type="unfinished"></translation>
<translation>Получен Запрос Верификации</translation>
</message>
<message>
<location line="+15"/>
@ -949,7 +949,7 @@ Example: https://server.my:8787</source>
<location filename="../../src/notifications/ManagerMac.cpp" line="+44"/>
<location filename="../../src/notifications/ManagerWin.cpp" line="+78"/>
<source>%1 sent an encrypted message</source>
<translation type="unfinished">%1 отправил зашифрованное сообщение</translation>
<translation>%1 отправил зашифрованное сообщение</translation>
</message>
<message>
<location line="+4"/>
@ -973,17 +973,17 @@ Example: https://server.my:8787</source>
<location filename="../../src/notifications/ManagerMac.cpp" line="-1"/>
<location filename="../../src/notifications/ManagerWin.cpp" line="-1"/>
<source>%1 replied with an encrypted message</source>
<translation type="unfinished"></translation>
<translation>%1 ответил зашифрованным сообщением</translation>
</message>
<message>
<location line="+6"/>
<source>%1 replied to a message</source>
<translation type="unfinished"></translation>
<translation>%1 ответил на сообщение</translation>
</message>
<message>
<location line="+0"/>
<source>%1 sent a message</source>
<translation type="unfinished"></translation>
<translation>%1 отправил сообщениe</translation>
</message>
</context>
<context>
@ -991,32 +991,32 @@ Example: https://server.my:8787</source>
<message>
<location filename="../qml/voip/PlaceCall.qml" line="+48"/>
<source>Place a call to %1?</source>
<translation type="unfinished"></translation>
<translation>Позвонить %1?</translation>
</message>
<message>
<location line="+16"/>
<source>No microphone found.</source>
<translation type="unfinished">Микрофон не найден.</translation>
<translation>Микрофон не найден.</translation>
</message>
<message>
<location line="+22"/>
<source>Voice</source>
<translation type="unfinished"></translation>
<translation>Голос</translation>
</message>
<message>
<location line="+13"/>
<source>Video</source>
<translation type="unfinished"></translation>
<translation>Видео</translation>
</message>
<message>
<location line="+14"/>
<source>Screen</source>
<translation type="unfinished"></translation>
<translation>Экран</translation>
</message>
<message>
<location line="+10"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
<translation>Отмена</translation>
</message>
</context>
<context>
@ -1124,7 +1124,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+13"/>
<source>Cancel edit</source>
<translation type="unfinished"></translation>
<translation>Отменить редактирование</translation>
</message>
</context>
<context>
@ -1205,62 +1205,62 @@ Example: https://server.my:8787</source>
<message>
<location filename="../qml/RoomSettings.qml" line="+25"/>
<source>Room Settings</source>
<translation type="unfinished"></translation>
<translation>Настройки комнаты</translation>
</message>
<message>
<location line="+79"/>
<source>%1 member(s)</source>
<translation type="unfinished"></translation>
<translation>%1 участник(ов)</translation>
</message>
<message>
<location line="+43"/>
<source>SETTINGS</source>
<translation type="unfinished"></translation>
<translation>НАЙСТРОЙКИ</translation>
</message>
<message>
<location line="+9"/>
<source>Notifications</source>
<translation type="unfinished"></translation>
<translation>Уведомления</translation>
</message>
<message>
<location line="+5"/>
<source>Muted</source>
<translation type="unfinished"></translation>
<translation>Заглушен</translation>
</message>
<message>
<location line="+0"/>
<source>Mentions only</source>
<translation type="unfinished"></translation>
<translation>Упоминания только</translation>
</message>
<message>
<location line="+0"/>
<source>All messages</source>
<translation type="unfinished"></translation>
<translation>Все сообщения</translation>
</message>
<message>
<location line="+15"/>
<source>Anyone and guests</source>
<translation type="unfinished"></translation>
<translation>Каждый и гости</translation>
</message>
<message>
<location line="+0"/>
<source>Anyone</source>
<translation type="unfinished"></translation>
<translation>Каждый</translation>
</message>
<message>
<location line="+0"/>
<source>Invited users</source>
<translation type="unfinished"></translation>
<translation>Приглашённые пользователи</translation>
</message>
<message>
<location line="+9"/>
<source>Encryption</source>
<translation type="unfinished"></translation>
<translation>Шифрование</translation>
</message>
<message>
<location line="+20"/>
<source>End-to-End Encryption</source>
<translation type="unfinished">Сквозное шифрование</translation>
<translation>Оконечное шифрование</translation>
</message>
<message>
<location line="+1"/>
@ -1271,7 +1271,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+17"/>
<source>Respond to key requests</source>
<translation type="unfinished"></translation>
<translation>Отвечать на запрос ключей</translation>
</message>
<message>
<location line="+5"/>
@ -1283,53 +1283,53 @@ Example: https://server.my:8787</source>
<message>
<location line="+21"/>
<source>INFO</source>
<translation type="unfinished"></translation>
<translation>ИНФОРМАЦИЯ</translation>
</message>
<message>
<location line="+9"/>
<source>Internal ID</source>
<translation type="unfinished"></translation>
<translation>Внутренний ID</translation>
</message>
<message>
<location line="+10"/>
<source>Room Version</source>
<translation type="unfinished"></translation>
<translation>Версия Комнаты</translation>
</message>
<message>
<location line="+13"/>
<source>OK</source>
<translation type="unfinished">ОК</translation>
<translation>ОК</translation>
</message>
<message>
<location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
<source>Failed to enable encryption: %1</source>
<translation type="unfinished">Не удалось включить шифрование: %1</translation>
<translation>Не удалось включить шифрование: %1</translation>
</message>
<message>
<location line="+228"/>
<source>Select an avatar</source>
<translation type="unfinished">Выберите аватар</translation>
<translation>Выберите аватар</translation>
</message>
<message>
<location line="+0"/>
<source>All Files (*)</source>
<translation type="unfinished">Все файлы (*)</translation>
<translation>Все файлы (*)</translation>
</message>
<message>
<location line="+12"/>
<source>The selected file is not an image</source>
<translation type="unfinished">Выбранный файл не является картинкой</translation>
<translation>Выбранный файл не является картинкой</translation>
</message>
<message>
<location line="+5"/>
<source>Error while reading file: %1</source>
<translation type="unfinished">Ошибка во время прочтения файла: %1</translation>
<translation>Ошибка во время прочтения файла: %1</translation>
</message>
<message>
<location line="+34"/>
<location line="+20"/>
<source>Failed to upload image: %s</source>
<translation type="unfinished">Не удалось загрузить изображение: %s</translation>
<translation>Не удалось загрузить изображение: %s</translation>
</message>
</context>
<context>
@ -1337,27 +1337,27 @@ Example: https://server.my:8787</source>
<message>
<location filename="../qml/voip/ScreenShare.qml" line="+30"/>
<source>Share desktop with %1?</source>
<translation type="unfinished"></translation>
<translation>Поделиться экраном с %1?</translation>
</message>
<message>
<location line="+11"/>
<source>Window:</source>
<translation type="unfinished"></translation>
<translation>Окно:</translation>
</message>
<message>
<location line="+20"/>
<source>Frame rate:</source>
<translation type="unfinished"></translation>
<translation>Частота кадров:</translation>
</message>
<message>
<location line="+19"/>
<source>Include your camera picture-in-picture</source>
<translation type="unfinished"></translation>
<translation>Включить Вашу камеру в режиме картинка-в-картинке</translation>
</message>
<message>
<location line="+12"/>
<source>Request remote camera</source>
<translation type="unfinished"></translation>
<translation>Запросить удалённую камеру</translation>
</message>
<message>
<location line="+1"/>
@ -1368,22 +1368,22 @@ Example: https://server.my:8787</source>
<message>
<location line="+5"/>
<source>Hide mouse cursor</source>
<translation type="unfinished"></translation>
<translation>Спрятать курсор мыши</translation>
</message>
<message>
<location line="+20"/>
<source>Share</source>
<translation type="unfinished"></translation>
<translation>Поделиться</translation>
</message>
<message>
<location line="+19"/>
<source>Preview</source>
<translation type="unfinished"></translation>
<translation>Предпросмотр</translation>
</message>
<message>
<location line="+7"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
<translation>Отмена</translation>
</message>
</context>
<context>
@ -1640,7 +1640,7 @@ Example: https://server.my:8787</source>
<message>
<location filename="../qml/TimelineRow.qml" line="+106"/>
<source>Edited</source>
<translation type="unfinished"></translation>
<translation>Изменено</translation>
</message>
</context>
<context>
@ -1648,12 +1648,12 @@ Example: https://server.my:8787</source>
<message>
<location filename="../qml/TimelineView.qml" line="+125"/>
<source>Copy</source>
<translation type="unfinished"></translation>
<translation>Копировать</translation>
</message>
<message>
<location line="+7"/>
<source>Copy link location</source>
<translation type="unfinished"></translation>
<translation>Скопировать ссылку</translation>
</message>
<message>
<location line="+8"/>
@ -1668,7 +1668,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+7"/>
<source>Edit</source>
<translation type="unfinished"></translation>
<translation>Редактировать</translation>
</message>
<message>
<location line="+5"/>
@ -1678,7 +1678,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+6"/>
<source>Forward</source>
<translation type="unfinished"></translation>
<translation>Переслать</translation>
</message>
<message>
<location line="+9"/>
@ -1708,12 +1708,12 @@ Example: https://server.my:8787</source>
<message>
<location line="+7"/>
<source>Open in external program</source>
<translation type="unfinished"></translation>
<translation>Открыть вo сторонней программе</translation>
</message>
<message>
<location line="+7"/>
<source>Copy link to event</source>
<translation type="unfinished"></translation>
<translation>Скопировать ссылку на событие</translation>
</message>
<message>
<location line="+57"/>
@ -1806,7 +1806,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+8"/>
<source>User Profile Settings</source>
<translation type="unfinished"></translation>
<translation>Настройки пользовательского профиля</translation>
</message>
<message>
<location line="+5"/>
@ -1834,12 +1834,12 @@ Example: https://server.my:8787</source>
<message>
<location filename="../qml/UserProfile.qml" line="+24"/>
<source>Global User Profile</source>
<translation type="unfinished"></translation>
<translation>Глобальный Пользовательский Профиль</translation>
</message>
<message>
<location line="+0"/>
<source>Room User Profile</source>
<translation type="unfinished"></translation>
<translation>Поользовательский Профиль в Комнате</translation>
</message>
<message>
<location line="+114"/>
@ -1865,27 +1865,27 @@ Example: https://server.my:8787</source>
<message>
<location line="+63"/>
<source>Unverify</source>
<translation type="unfinished"></translation>
<translation>Отменить Верификацию</translation>
</message>
<message>
<location filename="../../src/ui/UserProfile.cpp" line="+301"/>
<source>Select an avatar</source>
<translation type="unfinished">Выберите аватар</translation>
<translation>Выберите аватар</translation>
</message>
<message>
<location line="+0"/>
<source>All Files (*)</source>
<translation type="unfinished">Все файлы (*)</translation>
<translation>Все файлы (*)</translation>
</message>
<message>
<location line="+12"/>
<source>The selected file is not an image</source>
<translation type="unfinished">Выбранный файл не является картинкой</translation>
<translation>Выбранный файл не является картинкой</translation>
</message>
<message>
<location line="+5"/>
<source>Error while reading file: %1</source>
<translation type="unfinished">Ошибка во время прочтения файла: %1</translation>
<translation>Ошибка во время прочтения файла: %1</translation>
</message>
</context>
<context>
@ -1894,7 +1894,7 @@ Example: https://server.my:8787</source>
<location filename="../../src/UserSettingsPage.cpp" line="+340"/>
<location filename="../../src/UserSettingsPage.h" line="+186"/>
<source>Default</source>
<translation type="unfinished"></translation>
<translation>По умолчанию</translation>
</message>
</context>
<context>
@ -1927,7 +1927,7 @@ Example: https://server.my:8787</source>
<message>
<location line="+96"/>
<source>Default</source>
<translation type="unfinished"></translation>
<translation>По умолчанию</translation>
</message>
<message>
<location line="+31"/>
@ -1942,12 +1942,12 @@ Example: https://server.my:8787</source>
<message>
<location line="+4"/>
<source>REQUEST</source>
<translation type="unfinished"></translation>
<translation>ЗАПРОС</translation>
</message>
<message>
<location line="+1"/>
<source>DOWNLOAD</source>
<translation type="unfinished"></translation>
<translation>СКАЧАТЬ</translation>
</message>
<message>
<location line="+27"/>
@ -1984,7 +1984,7 @@ Only affects messages in encrypted chats.</source>
<message>
<location line="+2"/>
<source>Privacy Screen</source>
<translation type="unfinished"></translation>
<translation>Приватное Окно</translation>
</message>
<message>
<location line="+2"/>
@ -2123,12 +2123,12 @@ This usually causes the application icon in the task bar to animate in some fash
<message>
<location line="+406"/>
<source>CACHED</source>
<translation type="unfinished"></translation>
<translation>Закешировано</translation>
</message>
<message>
<location line="+6"/>
<source>NOT CACHED</source>
<translation type="unfinished"></translation>
<translation>НЕ ЗАКЕШИРОВАНО</translation>
</message>
<message>
<location line="-460"/>
@ -2288,7 +2288,7 @@ This usually causes the application icon in the task bar to animate in some fash
<message>
<location line="+3"/>
<source>Backup key</source>
<translation type="unfinished"></translation>
<translation>Ключ восстановления</translation>
</message>
<message>
<location line="+2"/>

View file

@ -448,14 +448,14 @@ ScrollView {
Platform.MenuItem {
visible: messageContextMenu.text
enabled: visible
text: qsTr("Copy")
text: qsTr("&Copy")
onTriggered: Clipboard.text = messageContextMenu.text
}
Platform.MenuItem {
visible: messageContextMenu.link
enabled: visible
text: qsTr("Copy link location")
text: qsTr("Copy &link location")
onTriggered: Clipboard.text = messageContextMenu.link
}
@ -463,7 +463,7 @@ ScrollView {
id: reactionOption
visible: room ? room.permissions.canSend(MtxEvent.Reaction) : false
text: qsTr("React")
text: qsTr("Re&act")
onTriggered: emojiPopup.show(null, function(emoji) {
room.input.reaction(messageContextMenu.eventId, emoji);
})
@ -471,25 +471,25 @@ ScrollView {
Platform.MenuItem {
visible: room ? room.permissions.canSend(MtxEvent.TextMessage) : false
text: qsTr("Reply")
text: qsTr("Repl&y")
onTriggered: room.replyAction(messageContextMenu.eventId)
}
Platform.MenuItem {
visible: messageContextMenu.isEditable && (room ? room.permissions.canSend(MtxEvent.TextMessage) : false)
enabled: visible
text: qsTr("Edit")
text: qsTr("&Edit")
onTriggered: room.editAction(messageContextMenu.eventId)
}
Platform.MenuItem {
text: qsTr("Read receipts")
text: qsTr("Read receip&ts")
onTriggered: room.readReceiptsAction(messageContextMenu.eventId)
}
Platform.MenuItem {
visible: messageContextMenu.eventType == MtxEvent.ImageMessage || messageContextMenu.eventType == MtxEvent.VideoMessage || messageContextMenu.eventType == MtxEvent.AudioMessage || messageContextMenu.eventType == MtxEvent.FileMessage || messageContextMenu.eventType == MtxEvent.Sticker || messageContextMenu.eventType == MtxEvent.TextMessage || messageContextMenu.eventType == MtxEvent.LocationMessage || messageContextMenu.eventType == MtxEvent.EmoteMessage || messageContextMenu.eventType == MtxEvent.NoticeMessage
text: qsTr("Forward")
text: qsTr("&Forward")
onTriggered: {
var forwardMess = forwardCompleterComponent.createObject(timelineRoot);
forwardMess.setMessageEventId(messageContextMenu.eventId);
@ -498,7 +498,7 @@ ScrollView {
}
Platform.MenuItem {
text: qsTr("Mark as read")
text: qsTr("&Mark as read")
}
Platform.MenuItem {
@ -516,28 +516,28 @@ ScrollView {
Platform.MenuItem {
visible: (room ? room.permissions.canRedact() : false) || messageContextMenu.isSender
text: qsTr("Remove message")
text: qsTr("Remo&ve message")
onTriggered: room.redactEvent(messageContextMenu.eventId)
}
Platform.MenuItem {
visible: messageContextMenu.eventType == MtxEvent.ImageMessage || messageContextMenu.eventType == MtxEvent.VideoMessage || messageContextMenu.eventType == MtxEvent.AudioMessage || messageContextMenu.eventType == MtxEvent.FileMessage || messageContextMenu.eventType == MtxEvent.Sticker
enabled: visible
text: qsTr("Save as")
text: qsTr("&Save as")
onTriggered: room.saveMedia(messageContextMenu.eventId)
}
Platform.MenuItem {
visible: messageContextMenu.eventType == MtxEvent.ImageMessage || messageContextMenu.eventType == MtxEvent.VideoMessage || messageContextMenu.eventType == MtxEvent.AudioMessage || messageContextMenu.eventType == MtxEvent.FileMessage || messageContextMenu.eventType == MtxEvent.Sticker
enabled: visible
text: qsTr("Open in external program")
text: qsTr("&Open in external program")
onTriggered: room.openMedia(messageContextMenu.eventId)
}
Platform.MenuItem {
visible: messageContextMenu.eventId
enabled: visible
text: qsTr("Copy link to event")
text: qsTr("Copy link to eve&nt")
onTriggered: room.copyLinkToEvent(messageContextMenu.eventId)
}

View file

@ -11,6 +11,7 @@
#include <QtMath>
#include <mtx/responses/register.hpp>
#include <mtx/responses/well-known.hpp>
#include "Config.h"
#include "Logging.h"
@ -108,6 +109,10 @@ RegisterPage::RegisterPage(QWidget *parent)
error_password_confirmation_label_->setWordWrap(true);
error_password_confirmation_label_->hide();
error_server_label_ = new QLabel(this);
error_server_label_->setWordWrap(true);
error_server_label_->hide();
form_layout_->addWidget(username_input_, Qt::AlignHCenter);
form_layout_->addWidget(error_username_label_, Qt::AlignHCenter);
form_layout_->addWidget(password_input_, Qt::AlignHCenter);
@ -115,6 +120,7 @@ RegisterPage::RegisterPage(QWidget *parent)
form_layout_->addWidget(password_confirmation_, Qt::AlignHCenter);
form_layout_->addWidget(error_password_confirmation_label_, Qt::AlignHCenter);
form_layout_->addWidget(server_input_, Qt::AlignHCenter);
form_layout_->addWidget(error_server_label_, Qt::AlignHCenter);
button_layout_ = new QHBoxLayout();
button_layout_->setSpacing(0);
@ -140,6 +146,17 @@ RegisterPage::RegisterPage(QWidget *parent)
top_layout_->addWidget(error_label_, 0, Qt::AlignHCenter);
top_layout_->addStretch(1);
connect(
this,
&RegisterPage::versionErrorCb,
this,
[this](const QString &msg) {
error_server_label_->show();
server_input_->setValid(false);
showError(error_server_label_, msg);
},
Qt::QueuedConnection);
connect(back_button_, SIGNAL(clicked()), this, SLOT(onBackButtonClicked()));
connect(register_button_, SIGNAL(clicked()), this, SLOT(onRegisterButtonClicked()));
@ -351,10 +368,12 @@ RegisterPage::checkFields()
error_username_label_->setText("");
error_password_label_->setText("");
error_password_confirmation_label_->setText("");
error_server_label_->setText("");
error_username_label_->hide();
error_password_label_->hide();
error_password_confirmation_label_->hide();
error_server_label_->hide();
password_confirmation_->setValid(true);
server_input_->setValid(true);
@ -379,7 +398,8 @@ RegisterPage::checkFields()
all_fields_good = false;
} else if (server_input_->isModified() &&
(!server_input_->hasAcceptableInput() || server_input_->text().isEmpty())) {
showError(tr("Invalid server name"));
error_server_label_->show();
showError(error_server_label_, tr("Invalid server name"));
server_input_->setValid(false);
all_fields_good = false;
}
@ -406,51 +426,113 @@ RegisterPage::onRegisterButtonClicked()
http::client()->set_server(server);
http::client()->verify_certificates(
!UserSettings::instance()->disableCertificateValidation());
http::client()->registration(
username,
password,
[this, username, password](const mtx::responses::Register &res,
http::client()->well_known(
[this, username, password](const mtx::responses::WellKnown &res,
mtx::http::RequestErr err) {
if (!err) {
http::client()->set_user(res.user_id);
http::client()->set_access_token(res.access_token);
if (err) {
using namespace boost::beast::http;
emit registerOk();
return;
}
// The server requires registration flows.
if (err->status_code == boost::beast::http::status::unauthorized) {
if (err->matrix_error.unauthorized.flows.empty()) {
nhlog::net()->warn(
"failed to retrieve registration flows1: ({}) "
"{}",
static_cast<int>(err->status_code),
err->matrix_error.error);
emit errorOccurred();
emit registerErrorCb(
QString::fromStdString(err->matrix_error.error));
if (err->status_code == status::not_found) {
nhlog::net()->info("Autodiscovery: No .well-known.");
checkVersionAndRegister(username, password);
return;
}
emit registrationFlow(
username, password, err->matrix_error.unauthorized);
if (!err->parse_error.empty()) {
emit versionErrorCb(tr(
"Autodiscovery failed. Received malformed response."));
nhlog::net()->error(
"Autodiscovery failed. Received malformed response.");
return;
}
emit versionErrorCb(tr("Autodiscovery failed. Unknown error when "
"requesting .well-known."));
nhlog::net()->error("Autodiscovery failed. Unknown error when "
"requesting .well-known. {}",
err->error_code.message());
return;
}
nhlog::net()->error(
"failed to register: status_code ({}), matrix_error({})",
static_cast<int>(err->status_code),
err->matrix_error.error);
emit registerErrorCb(QString::fromStdString(err->matrix_error.error));
emit errorOccurred();
nhlog::net()->info("Autodiscovery: Discovered '" +
res.homeserver.base_url + "'");
http::client()->set_server(res.homeserver.base_url);
checkVersionAndRegister(username, password);
});
emit registering();
}
}
void
RegisterPage::checkVersionAndRegister(const std::string &username, const std::string &password)
{
http::client()->versions(
[this, username, password](const mtx::responses::Versions &, mtx::http::RequestErr err) {
if (err) {
using namespace boost::beast::http;
if (err->status_code == status::not_found) {
emit versionErrorCb(tr("The required endpoints were not found. "
"Possibly not a Matrix server."));
return;
}
if (!err->parse_error.empty()) {
emit versionErrorCb(tr("Received malformed response. Make sure "
"the homeserver domain is valid."));
return;
}
emit versionErrorCb(tr(
"An unknown error occured. Make sure the homeserver domain is valid."));
return;
}
http::client()->registration(
username,
password,
[this, username, password](const mtx::responses::Register &res,
mtx::http::RequestErr err) {
if (!err) {
http::client()->set_user(res.user_id);
http::client()->set_access_token(res.access_token);
emit registerOk();
return;
}
// The server requires registration flows.
if (err->status_code == boost::beast::http::status::unauthorized) {
if (err->matrix_error.unauthorized.flows.empty()) {
nhlog::net()->warn(
"failed to retrieve registration flows1: ({}) "
"{}",
static_cast<int>(err->status_code),
err->matrix_error.error);
emit errorOccurred();
emit registerErrorCb(
QString::fromStdString(err->matrix_error.error));
return;
}
emit registrationFlow(
username, password, err->matrix_error.unauthorized);
return;
}
nhlog::net()->error(
"failed to register: status_code ({}), matrix_error({})",
static_cast<int>(err->status_code),
err->matrix_error.error);
emit registerErrorCb(QString::fromStdString(err->matrix_error.error));
emit errorOccurred();
});
});
}
void
RegisterPage::paintEvent(QPaintEvent *)
{

View file

@ -31,6 +31,10 @@ protected:
signals:
void backButtonClicked();
void errorOccurred();
//! Used to trigger the corresponding slot outside of the main thread.
void versionErrorCb(const QString &err);
void registering();
void registerOk();
void registerErrorCb(const QString &msg);
@ -52,6 +56,7 @@ private:
bool checkOneField(QLabel *label, const TextField *t_field, const QString &msg);
bool checkFields();
void showError(QLabel *label, const QString &msg);
void checkVersionAndRegister(const std::string &username, const std::string &password);
QVBoxLayout *top_layout_;
QHBoxLayout *back_layout_;
@ -63,6 +68,7 @@ private:
QLabel *error_username_label_;
QLabel *error_password_label_;
QLabel *error_password_confirmation_label_;
QLabel *error_server_label_;
FlatButton *back_button_;
RaisedButton *register_button_;

View file

@ -679,11 +679,10 @@ utils::hashQString(const QString &input)
return hash;
}
QString
utils::generateContrastingHexColor(const QString &input, const QString &background)
QColor
utils::generateContrastingHexColor(const QString &input, const QColor &backgroundCol)
{
const QColor backgroundCol(background);
const qreal backgroundLum = luminance(background);
const qreal backgroundLum = luminance(backgroundCol);
// Create a color for the input
auto hash = hashQString(input);

View file

@ -301,8 +301,8 @@ hashQString(const QString &input);
//! Generate a color (matching #RRGGBB) that has an acceptable contrast to background that is based
//! on the input string.
QString
generateContrastingHexColor(const QString &input, const QString &background);
QColor
generateContrastingHexColor(const QString &input, const QColor &background);
//! Given two luminance values, compute the contrast ratio between them.
qreal

View file

@ -107,8 +107,7 @@ QColor
TimelineViewManager::userColor(QString id, QColor background)
{
if (!userColors.contains(id))
userColors.insert(
id, QColor(utils::generateContrastingHexColor(id, background.name())));
userColors.insert(id, QColor(utils::generateContrastingHexColor(id, background)));
return userColors.value(id);
}