{ description }
} +{ cancellationMessage }
; + buttons = <> +{ _t("Check that the code below matches with your other device:") }
+{ _t("Scan the QR code below with your device that's signed out.") }
+{ + _t("You can use this device to sign in a new device with a QR code. You will need to " + + "scan the QR code shown on this device with your device that's signed out.") + }
+%(homeserverDomain)s
) to configure a TURN server in order for calls to work reliably.": "Požádejte správce svého homeserveru (%(homeserverDomain)s
) jestli by nemohl nakonfigurovat TURN server, aby volání fungovala spolehlivě.",
+ "Please ask the administrator of your homeserver (%(homeserverDomain)s
) to configure a TURN server in order for calls to work reliably.": "Požádejte správce svého domovského serveru (%(homeserverDomain)s
) jestli by nemohl nakonfigurovat TURN server, aby volání fungovala spolehlivě.",
"Alternatively, you can try to use the public server at turn.matrix.org
, but this will not be as reliable, and it will share your IP address with that server. You can also manage this in Settings.": "Můžete také zkusit použít veřejný server na adrese turn.matrix.org
, ale ten nebude tak spolehlivý a bude sdílet vaši IP adresu s tímto serverem. To můžete spravovat také v Nastavení.",
"Try using turn.matrix.org": "Zkuste použít turn.matrix.org",
"Messages": "Zprávy",
@@ -1262,7 +1262,7 @@
"about a day from now": "asi za den",
"%(num)s days from now": "za %(num)s dní",
"Show info about bridges in room settings": "Zobrazovat v nastavení místnosti informace o propojeních",
- "Never send encrypted messages to unverified sessions from this session": "Nikdy neposílat šifrované zprávy neověřených zařízením",
+ "Never send encrypted messages to unverified sessions from this session": "Nikdy neposílat šifrované zprávy do neověřených relací z této relace",
"Never send encrypted messages to unverified sessions in this room from this session": "Nikdy v této místnosti neposílat šifrované zprávy neověřeným relacím",
"Enable message search in encrypted rooms": "Povolit vyhledávání v šifrovaných místnostech",
"How fast should messages be downloaded.": "Jak rychle se mají zprávy stahovat.",
@@ -1441,7 +1441,7 @@
"Manually Verify by Text": "Manuální textové ověření",
"Interactively verify by Emoji": "Interaktivní ověření s emotikonami",
"Support adding custom themes": "Umožnit přidání vlastního vzhledu",
- "Manually verify all remote sessions": "Manuálně ověřit všechny relace",
+ "Manually verify all remote sessions": "Ručně ověřit všechny relace",
"cached locally": "uložen lokálně",
"not found locally": "nenalezen lolálně",
"Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Individuálně ověřit každou uživatelovu relaci a označit jí za důvěryhodnou, bez důvěry v křížový podpis.",
@@ -3582,12 +3582,87 @@
"Failed to set pusher state": "Nepodařilo se nastavit stav push oznámení",
"%(selectedDeviceCount)s sessions selected": "%(selectedDeviceCount)s vybraných relací",
"Receive push notifications on this session.": "Přijímat push oznámení v této relaci.",
- "Toggle push notifications on this session.": "Přepnout push notifikace v této relaci.",
- "Push notifications": "Push notifikace",
+ "Toggle push notifications on this session.": "Přepnout push oznámení v této relaci.",
+ "Push notifications": "Push oznámení",
"Enable notifications for this device": "Povolit oznámení pro toto zařízení",
"Turn off to disable notifications on all your devices and sessions": "Vypnutím zakážete oznámení na všech zařízeních a relacích",
"Enable notifications for this account": "Povolit oznámení pro tento účet",
"Video call ended": "Videohovor ukončen",
"%(name)s started a video call": "%(name)s zahájil(a) videohovor",
- "Record the client name, version, and url to recognise sessions more easily in session manager": "Zaznamenat název, verzi a url pro snadnější rozpoznání relací ve správci relací"
+ "Record the client name, version, and url to recognise sessions more easily in session manager": "Zaznamenat název, verzi a url pro snadnější rozpoznání relací ve správci relací",
+ "URL": "URL",
+ "Version": "Verze",
+ "Application": "Aplikace",
+ "Room info": "Informace o místnosti",
+ "View chat timeline": "Zobrazit časovou osu konverzace",
+ "Close call": "Zavřít hovor",
+ "Freedom": "Svoboda",
+ "Layout type": "Typ rozložení",
+ "Spotlight": "Reflektor",
+ "Unknown session type": "Neznámý typ relace",
+ "Web session": "Relace na webu",
+ "Mobile session": "Relace mobilního zařízení",
+ "Desktop session": "Relace stolního počítače",
+ "Fill screen": "Vyplnit obrazovku",
+ "Video call started": "Videohovor byl zahájen",
+ "Unknown room": "Neznámá místnost",
+ "Video call started in %(roomName)s. (not supported by this browser)": "Videohovor byl zahájen v %(roomName)s. (není podporováno tímto prohlížečem)",
+ "Video call started in %(roomName)s.": "Videohovor byl zahájen v %(roomName)s.",
+ "Operating system": "Operační systém",
+ "Model": "Model",
+ "Client": "Klient",
+ "Video call (%(brand)s)": "Videohovor (%(brand)s)",
+ "Call type": "Typ volání",
+ "You do not have sufficient permissions to change this.": "Ke změně nemáte dostatečná oprávnění.",
+ "%(brand)s is end-to-end encrypted, but is currently limited to smaller numbers of users.": "%(brand)s je koncově šifrovaný, ale v současné době je omezen na menší počet uživatelů.",
+ "Enable %(brand)s as an additional calling option in this room": "Povolit %(brand)s jako další možnost volání v této místnosti",
+ "Join %(brand)s calls": "Připojit se k %(brand)s volání",
+ "Start %(brand)s calls": "Zahájit %(brand)s volání",
+ "Sorry — this call is currently full": "Omlouváme se — tento hovor je v současné době plný",
+ "Our new sessions manager provides better visibility of all your sessions, and greater control over them including the ability to remotely toggle push notifications.": "Náš nový správce relací poskytuje lepší přehled o všech relacích a lepší kontrolu nad nimi, včetně možnosti vzdáleně přepínat push oznámení.",
+ "Have greater visibility and control over all your sessions.": "Získejte větší přehled a kontrolu nad všemi relacemi.",
+ "New session manager": "Nový správce relací",
+ "Use new session manager": "Použít nový správce relací",
+ "Wysiwyg composer (plain text mode coming soon) (under active development)": "Wysiwyg editor (textový režim již brzy) (v aktivním vývoji)",
+ "Sign out all other sessions": "Odhlásit všechny ostatní relace",
+ "resume voice broadcast": "obnovit hlasové vysílání",
+ "pause voice broadcast": "pozastavit hlasové vysílání",
+ "Underline": "Podtržení",
+ "Italic": "Kurzíva",
+ "Try out the rich text editor (plain text mode coming soon)": "Vyzkoušejte nový editor (textový režim již brzy)",
+ "You have already joined this call from another device": "K tomuto hovoru jste se již připojili z jiného zařízení",
+ "stop voice broadcast": "zastavit hlasové vysílání",
+ "Notifications silenced": "Oznámení ztlumena",
+ "Yes, stop broadcast": "Ano, zastavit vysílání",
+ "Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Opravdu chcete ukončit živé vysílání? Tím se vysílání ukončí a v místnosti bude k dispozici celý záznam.",
+ "Stop live broadcasting?": "Ukončit živé vysílání?",
+ "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Hlasové vysílání už nahrává někdo jiný. Počkejte, až jeho hlasové vysílání skončí, a spusťte nové.",
+ "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Nemáte potřebná oprávnění ke spuštění hlasového vysílání v této místnosti. Obraťte se na správce místnosti, aby vám zvýšil oprávnění.",
+ "You are already recording a voice broadcast. Please end your current voice broadcast to start a new one.": "Již nahráváte hlasové vysílání. Ukončete prosím aktuální hlasové vysílání a spusťte nové.",
+ "Can't start a new voice broadcast": "Nelze spustit nové hlasové vysílání",
+ "Completing set up of your new device": "Dokončování nastavení nového zařízení",
+ "Waiting for device to sign in": "Čekání na přihlášení zařízení",
+ "Connecting...": "Připojování...",
+ "Review and approve the sign in": "Zkontrolovat a schválit přihlášení",
+ "Select 'Scan QR code'": "Vyberte \"Naskenovat QR kód\"",
+ "Start at the sign in screen": "Začněte na přihlašovací obrazovce",
+ "Scan the QR code below with your device that's signed out.": "Níže uvedený QR kód naskenujte pomocí přihlašovaného zařízení.",
+ "By approving access for this device, it will have full access to your account.": "Schválením přístupu tohoto zařízení získá zařízení plný přístup k vašemu účtu.",
+ "Check that the code below matches with your other device:": "Zkontrolujte, zda se níže uvedený kód shoduje s vaším dalším zařízením:",
+ "Devices connected": "Zařízení byla propojena",
+ "The homeserver doesn't support signing in another device.": "Domovský server nepodporuje přihlášení pomocí jiného zařízení.",
+ "An unexpected error occurred.": "Došlo k neočekávané chybě.",
+ "The request was cancelled.": "Požadavek byl zrušen.",
+ "The other device isn't signed in.": "Druhé zařízení není přihlášeno.",
+ "The other device is already signed in.": "Druhé zařízení je již přihlášeno.",
+ "The request was declined on the other device.": "Požadavek byl na druhém zařízení odmítnut.",
+ "Linking with this device is not supported.": "Propojení s tímto zařízením není podporováno.",
+ "The scanned code is invalid.": "Naskenovaný kód je neplatný.",
+ "The linking wasn't completed in the required time.": "Propojení nebylo dokončeno v požadovaném čase.",
+ "Sign in new device": "Přihlásit nové zařízení",
+ "Show QR code": "Zobrazit QR kód",
+ "You can use this device to sign in a new device with a QR code. You will need to scan the QR code shown on this device with your device that's signed out.": "Toto zařízení můžete použít k přihlášení nového zařízení pomocí QR kódu. QR kód zobrazený na tomto zařízení musíte naskenovat pomocí odhlášeného zařízení.",
+ "Sign in with QR code": "Přihlásit se pomocí QR kódu",
+ "Browser": "Prohlížeč",
+ "Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "Povolit zobrazení QR kódu ve správci relací pro přihlášení do jiného zařízení (vyžaduje kompatibilní domovský server)"
}
diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json
index 5116fcf8f5..60586e4088 100644
--- a/src/i18n/strings/de_DE.json
+++ b/src/i18n/strings/de_DE.json
@@ -142,7 +142,7 @@
"and %(count)s others...|one": "und ein weiterer …",
"Are you sure?": "Bist du sicher?",
"Attachment": "Anhang",
- "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Es kann keine Verbindung zum Heimserver via HTTP aufgebaut werden, wenn die Adresszeile des Browsers eine HTTPS-URL enthält. Entweder HTTPS verwenden oder alternativ unsichere Skripte erlauben.",
+ "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Es kann keine Verbindung zum Heim-Server via HTTP aufgebaut werden, wenn die Adresszeile des Browsers eine HTTPS-URL enthält. Entweder HTTPS verwenden oder alternativ unsichere Skripte erlauben.",
"Command error": "Fehler im Befehl",
"Decrypt %(text)s": "%(text)s entschlüsseln",
"Download %(text)s": "%(text)s herunterladen",
@@ -159,7 +159,7 @@
"OK": "Ok",
"Search": "Suchen",
"Search failed": "Suche ist fehlgeschlagen",
- "Server error": "Serverfehler",
+ "Server error": "Server-Fehler",
"Server may be unavailable, overloaded, or search timed out :(": "Der Server ist entweder nicht verfügbar, überlastet oder die Suche wurde wegen Zeitüberschreitung abgebrochen :(",
"Server unavailable, overloaded, or something else went wrong.": "Server ist nicht verfügbar, überlastet oder ein anderer Fehler ist aufgetreten.",
"Submit": "Absenden",
@@ -264,7 +264,7 @@
"Home": "Startseite",
"Accept": "Annehmen",
"Admin Tools": "Administrationswerkzeuge",
- "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Verbindung zum Heimserver fehlgeschlagen - bitte überprüfe die Internetverbindung und stelle sicher, dass dem SSL-Zertifikat deines Heimservers vertraut wird und dass Anfragen nicht durch eine Browser-Erweiterung blockiert werden.",
+ "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Verbindung zum Heim-Server fehlgeschlagen – bitte überprüfe die Internetverbindung und stelle sicher, dass dem SSL-Zertifikat deines Heimservers vertraut wird und dass Anfragen nicht durch eine Browser-Erweiterung blockiert werden.",
"Close": "Schließen",
"Decline": "Ablehnen",
"Failed to upload profile picture!": "Hochladen des Profilbilds fehlgeschlagen!",
@@ -360,7 +360,7 @@
"%(oneUser)schanged their avatar %(count)s times|one": "%(oneUser)shat das Profilbild geändert",
"Members only (since the point in time of selecting this option)": "Mitglieder",
"Members only (since they were invited)": "Mitglieder (ab Einladung)",
- "Members only (since they joined)": "Mitglieder (ab Beitreten)",
+ "Members only (since they joined)": "Mitglieder (ab Betreten)",
"A text message has been sent to %(msisdn)s": "Eine Textnachricht wurde an %(msisdn)s gesendet",
"%(severalUsers)srejected their invitations %(count)s times|other": "%(severalUsers)shaben ihre Einladungen %(count)s-mal abgelehnt",
"%(oneUser)srejected their invitation %(count)s times|other": "%(oneUser)shat die Einladung %(count)s-mal abgelehnt",
@@ -380,7 +380,7 @@
"Enable inline URL previews by default": "URL-Vorschau standardmäßig aktivieren",
"Enable URL previews for this room (only affects you)": "URL-Vorschau für dich in diesem Raum",
"Enable URL previews by default for participants in this room": "URL-Vorschau für Raummitglieder",
- "Please note you are logging into the %(hs)s server, not matrix.org.": "Du meldest dich gerade am Server von %(hs)s an, nicht auf matrix.org.",
+ "Please note you are logging into the %(hs)s server, not matrix.org.": "Du meldest dich gerade auf dem Server von %(hs)s an, nicht auf matrix.org.",
"URL previews are disabled by default for participants in this room.": "URL-Vorschau ist für Mitglieder des Raumes standardmäßig deaktiviert.",
"URL previews are enabled by default for participants in this room.": "URL-Vorschau ist für Mitglieder des Raumes standardmäßig aktiviert.",
"Restricted": "Eingeschränkt",
@@ -392,7 +392,7 @@
"Idle for %(duration)s": "Abwesend seit %(duration)s",
"Offline for %(duration)s": "Offline seit %(duration)s",
"Unknown for %(duration)s": "Unbekannt seit %(duration)s",
- "This homeserver doesn't offer any login flows which are supported by this client.": "Dieser Heimserver verfügt über keines von dieser Anwendung unterstütztes Anmeldeverfahren.",
+ "This homeserver doesn't offer any login flows which are supported by this client.": "Dieser Heim-Server verfügt über keines von dieser Anwendung unterstütztes Anmeldeverfahren.",
"Call Failed": "Anruf fehlgeschlagen",
"Send": "Senden",
"collapse": "Verbergen",
@@ -424,7 +424,7 @@
"What's New": "Was ist neu",
"On": "An",
"Changelog": "Änderungsprotokoll",
- "Waiting for response from server": "Auf Antwort vom Server warten",
+ "Waiting for response from server": "Warte auf Antwort vom Server",
"Failed to send logs: ": "Senden von Protokolldateien fehlgeschlagen: ",
"This Room": "In diesem Raum",
"Resend": "Erneut senden",
@@ -444,7 +444,7 @@
"Developer Tools": "Entwicklungswerkzeuge",
"Preparing to send logs": "Senden von Protokolldateien wird vorbereitet",
"Saturday": "Samstag",
- "The server may be unavailable or overloaded": "Der Server ist vermutlich nicht erreichbar oder überlastet",
+ "The server may be unavailable or overloaded": "Der Server ist möglicherweise nicht erreichbar oder überlastet",
"Reject": "Ablehnen",
"Monday": "Montag",
"Remove from Directory": "Aus dem Raum-Verzeichnis entfernen",
@@ -494,10 +494,10 @@
"Enable widget screenshots on supported widgets": "Bildschirmfotos für unterstützte Widgets",
"Send analytics data": "Analysedaten senden",
"Muted Users": "Stummgeschaltete Benutzer",
- "Can't leave Server Notices room": "Du kannst den Raum für Servernotizen nicht verlassen",
- "This room is used for important messages from the Homeserver, so you cannot leave it.": "Du kannst diesen Raum nicht verlassen, da dieser Raum für wichtige Nachrichten vom Heim-Server verwendet wird.",
+ "Can't leave Server Notices room": "Der Raum für Server-Mitteilungen kann nicht verlassen werden",
+ "This room is used for important messages from the Homeserver, so you cannot leave it.": "Du kannst diesen Raum nicht verlassen, da dieser Raum für wichtige Mitteilungen vom Heim-Server verwendet wird.",
"Terms and Conditions": "Geschäftsbedingungen",
- "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Um den %(homeserverDomain)s -Heimserver weiter zu verwenden, musst du die Geschäftsbedingungen sichten und ihnen zustimmen.",
+ "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Um den %(homeserverDomain)s-Heim-Server weiterzuverwenden, musst du die Nutzungsbedingungen sichten und akzeptieren.",
"Review terms and conditions": "Geschäftsbedingungen anzeigen",
"Share Link to User": "Link zu Benutzer teilen",
"Share room": "Raum teilen",
@@ -508,7 +508,7 @@
"Link to selected message": "Link zur ausgewählten Nachricht",
"No Audio Outputs detected": "Keine Audioausgabe erkannt",
"Audio Output": "Audioausgabe",
- "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "In verschlüsselten Räumen wie diesem ist die Linkvorschau standardmäßig deaktiviert, damit dein Heimserver (der die Vorschau erzeugt) keine Informationen über Links in diesem Raum bekommt.",
+ "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "In verschlüsselten Räumen wie diesem ist die Linkvorschau standardmäßig deaktiviert, damit dein Heim-Server (der die Vorschau erzeugt) keine Informationen über Links in diesem Raum erhält.",
"When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "Die URL-Vorschau kann Informationen wie den Titel, die Beschreibung sowie ein Vorschaubild der Website enthalten.",
"You can't send any messages until you review and agree to %(homeserverDomain)s
) to configure a TURN server in order for calls to work reliably.": "Bitte frage die Administration deines Heim-Servers (%(homeserverDomain)s
) darum, einen TURN-Server einzurichten, damit Anrufe zuverlässig funktionieren.",
- "Disconnect from the identity server @bot:*
would ignore all users that have the name 'bot' on any server.": "Füge hier die Benutzer und Server hinzu, die du blockieren willst. Verwende Sternchen, damit %(brand)s mit beliebigen Zeichen übereinstimmt. Bspw. würde @bot: *
alle Benutzer blockieren, die auf einem Server den Namen 'bot' haben.",
+ "Add users and servers you want to ignore here. Use asterisks to have %(brand)s match any characters. For example, @bot:*
would ignore all users that have the name 'bot' on any server.": "Füge hier die Benutzer und Server hinzu, die du blockieren willst. Verwende Sternchen, um %(brand)s alle Zeichen abgleichen zu lassen. So würde @bot:*
alle Benutzer mit dem Namen „bot“, auf jedem beliebigen Server, blockieren.",
"Ignoring people is done through ban lists which contain rules for who to ban. Subscribing to a ban list means the users/servers blocked by that list will be hidden from you.": "Das Ignorieren von Personen erfolgt über Sperrlisten. Wenn eine Sperrliste abonniert wird, werden die von dieser Liste blockierten Benutzer und Server ausgeblendet.",
"Personal ban list": "Persönliche Sperrliste",
- "Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "Deine persönliche Sperrliste enthält alle Benutzer/Server, von denen du persönlich keine Nachrichten sehen willst. Nachdem du den ersten Benutzer/Server blockiert hast, wird in der Raumliste \"Meine Sperrliste\" angezeigt - bleibe in diesem Raum, um die Sperrliste aufrecht zu halten.",
+ "Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "Deine persönliche Sperrliste enthält alle Benutzer/Server, von denen du persönlich keine Nachrichten sehen willst. Nachdem du den ersten Benutzer/Server blockiert hast, wird in der Raumliste „Meine Sperrliste“ angezeigt – bleibe in diesem Raum, um die Sperrliste aktiv zu halten.",
"Server or user ID to ignore": "Zu blockierende Server- oder Benutzer-ID",
- "eg: @bot:* or example.org": "z.B. @bot:* oder example.org",
+ "eg: @bot:* or example.org": "z. B. @bot:* oder example.org",
"Subscribed lists": "Abonnierte Listen",
"Subscribing to a ban list will cause you to join it!": "Eine Verbotsliste abonnieren bedeutet ihr beizutreten!",
"If this isn't what you want, please use a different tool to ignore users.": "Wenn dies nicht das ist, was du willst, verwende ein anderes Werkzeug, um Benutzer zu blockieren.",
@@ -1307,7 +1307,7 @@
"This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Diese Einladung zu %(roomName)s wurde an die Adresse %(email)s gesendet, die nicht zu deinem Konto gehört",
"Link this email with your account in Settings to receive invites directly in %(brand)s.": "Verbinde diese E-Mail-Adresse in den Einstellungen mit deinem Konto, um die Einladungen direkt in %(brand)s zu erhalten.",
"This invite to %(roomName)s was sent to %(email)s": "Diese Einladung zu %(roomName)s wurde an %(email)s gesendet",
- "Use an identity server in Settings to receive invites directly in %(brand)s.": "Verknüpfe einen Identitätsserver in den Einstellungen um die Einladungen direkt in %(brand)s zu erhalten.",
+ "Use an identity server in Settings to receive invites directly in %(brand)s.": "Verknüpfe einen Identitäts-Server in den Einstellungen, um die Einladungen direkt in %(brand)s zu erhalten.",
"Share this email in Settings to receive invites directly in %(brand)s.": "Teile diese E-Mail-Adresse in den Einstellungen, um Einladungen direkt in %(brand)s zu erhalten.",
"%(roomName)s can't be previewed. Do you want to join it?": "Vorschau von %(roomName)s kann nicht angezeigt werden. Möchtest du den Raum betreten?",
"%(count)s unread messages including mentions.|other": "%(count)s ungelesene Nachrichten einschließlich Erwähnungen.",
@@ -1316,21 +1316,21 @@
"%(count)s unread messages.|one": "1 ungelesene Nachricht.",
"Unread messages.": "Ungelesene Nachrichten.",
"This room has already been upgraded.": "Dieser Raum wurde bereits aktualisiert.",
- "This room is running room version //
to start it with a slash.": "Hinweis: Beginne deine Nachricht mit //
, um sie mit einem Schrägstrich zu beginnen.",
"Send as message": "Als Nachricht senden",
- "Failed to connect to integration manager": "Fehler beim Verbinden mit dem Integrationsserver",
+ "Failed to connect to integration manager": "Fehler beim Verbinden mit dem Integrations-Server",
"Could not revoke the invite. The server may be experiencing a temporary problem or you do not have sufficient permissions to revoke the invite.": "Die Einladung konnte nicht zurückgezogen werden. Der Server hat möglicherweise ein vorübergehendes Problem oder du hast nicht ausreichende Berechtigungen, um die Einladung zurückzuziehen.",
"Mark all as read": "Alle als gelesen markieren",
"Local address": "Lokale Adresse",
"Published Addresses": "Öffentliche Adresse",
"Other published addresses:": "Andere öffentliche Adressen:",
"No other published addresses yet, add one below": "Keine anderen öffentlichen Adressen vorhanden. Du kannst weiter unten eine hinzufügen",
- "New published address (e.g. #alias:server)": "Neue öffentliche Adresse (z.B. #alias:server)",
+ "New published address (e.g. #alias:server)": "Neue öffentliche Adresse (z. B. #alias:server)",
"Local Addresses": "Lokale Adressen",
- "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Erstelle Adressen für diesen Raum, damit andere Benutzer den Raum auf deinem Heimserver (%(localDomain)s) finden können",
+ "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Erstelle Adressen für diesen Raum, damit andere Benutzer den Raum auf deinem Heim-Server (%(localDomain)s) finden können",
"Waiting for %(displayName)s to accept…": "Warte auf die Annahme von %(displayName)s …",
"Accepting…": "Annehmen…",
"Start Verification": "Verifizierung starten",
@@ -1358,7 +1358,7 @@
"You have ignored this user, so their message is hidden. Show anyways.": "Du blockierst diesen Benutzer, deshalb werden seine Nachrichten nicht angezeigt. Trotzdem anzeigen.",
"You accepted": "Du hast angenommen",
"You declined": "Du hast abgelehnt",
- "You cancelled": "Du hast abgebrochen",
+ "You cancelled": "Du brachst ab",
"Accepting …": "Annehmen …",
"Declining …": "Ablehnen …",
"You sent a verification request": "Du hast eine Verifizierungsanfrage gesendet",
@@ -1405,13 +1405,13 @@
"Your server": "Dein Server",
"Matrix": "Matrix",
"Add a new server": "Einen Server hinzufügen",
- "Enter the name of a new server you want to explore.": "Gib den Namen des Servers an den du erforschen möchtest.",
- "Server name": "Servername",
+ "Enter the name of a new server you want to explore.": "Gib den Namen des Servers an, den du erkunden möchtest.",
+ "Server name": "Server-Name",
"Close dialog": "Dialog schließen",
"Please tell us what went wrong or, better, create a GitHub issue that describes the problem.": "Bitte teile uns mit, was schief lief - oder besser, beschreibe das Problem auf GitHub in einem \"Issue\".",
"Reminder: Your browser is unsupported, so your experience may be unpredictable.": "Warnung: Dein Browser wird nicht unterstützt. Die Anwendung kann instabil sein.",
"Notes": "Notizen",
- "If there is additional context that would help in analysing the issue, such as what you were doing at the time, room IDs, user IDs, etc., please include those things here.": "Wenn du mehr Informationen hast, die uns bei Untersuchung des Problems helfen (z.B. was du gerade getan hast, Raum-IDs, Benutzer-IDs, etc.), gib sie bitte hier an.",
+ "If there is additional context that would help in analysing the issue, such as what you were doing at the time, room IDs, user IDs, etc., please include those things here.": "Wenn es mehr Informationen gibt, die uns bei der Auswertung des Problems würden – z. B. was du getan hast, Raum- oder Benutzer-IDs … – gib sie bitte hier an.",
"Removing…": "Löschen…",
"Destroy cross-signing keys?": "Cross-Signing-Schlüssel zerstören?",
"Clear cross-signing keys": "Cross-Signing-Schlüssel löschen",
@@ -1445,7 +1445,7 @@
"Please fill why you're reporting.": "Bitte gib an, weshalb du einen Fehler meldest.",
"Upgrade private room": "Privaten Raum aktualisieren",
"Upgrade public room": "Öffentlichen Raum aktualisieren",
- "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Dies wirkt sich normalerweise nur darauf aus, wie der Raum auf dem Server verarbeitet wird. Wenn du Probleme mit deinem %(brand)s hast, melde bitte einen Bug.",
+ "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please report a bug.": "Dies beeinflusst meistens nur, wie der Raum auf dem Server verarbeitet wird. Solltest du Probleme mit %(brand)s haben, melde bitte einen Programmfehler.",
"You'll upgrade this room from /plain
to send without markdown and /md
to send with.": "Beginne Nachrichten mit /plain
, um Nachrichten ohne Markdown zu schreiben und mit /md
, um sie mit Markdown zu schreiben.",
"Enable Markdown": "Markdown aktivieren",
- "Live Location Sharing (temporary implementation: locations persist in room history)": "Standort Live teilen (Temporäre Implementation; Die Standorte bleiben in Raumverlauf bestehen)",
+ "Live Location Sharing (temporary implementation: locations persist in room history)": "Echtzeit-Standortfreigabe (Temporäre Implementation: Die Standorte bleiben in Raumverlauf bestehen)",
"Location sharing - pin drop": "Standort teilen - Position auswählen",
"Right-click message context menu": "Rechtsklick-Kontextmenü",
"To leave, return to this page and use the “%(leaveTheBeta)s” button.": "Zum Verlassen, gehe auf diese Seite zurück und klicke auf „%(leaveTheBeta)s“.",
@@ -3215,10 +3215,10 @@
"Failed to invite users to %(roomName)s": "Fehler beim Einladen von Benutzern in %(roomName)s",
"You're trying to access a community link (%(groupId)s)./plain
to send without markdown and /md
to send with.": "התחילו הודעות עם /plain
לשליחה ללא סימון ו-/md
לשליחה.",
"Get notified only with mentions and keywords as set up in your settings": "קבלו התראה רק עם אזכורים ומילות מפתח כפי שהוגדרו בהגדרות שלכם",
"New keyword": "מילת מפתח חדשה",
- "Keyword": "מילת מפתח"
+ "Keyword": "מילת מפתח",
+ "Empty room": "חדר ריק"
}
diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json
index d42f8136f9..de6d822e02 100644
--- a/src/i18n/strings/hu.json
+++ b/src/i18n/strings/hu.json
@@ -3588,5 +3588,76 @@
"Turn off to disable notifications on all your devices and sessions": "Kikapcsolva az eszközökön és munkamenetekben az értesítések tiltva lesznek",
"Enable notifications for this account": "Értesítések engedélyezése ehhez a fiókhoz",
"New group call experience": "Új konferenciahívás élmény",
- "Live": "Élő"
+ "Live": "Élő",
+ "Join %(brand)s calls": "Csatlakozás ebbe a hívásba: %(brand)s",
+ "Start %(brand)s calls": "%(brand)s hívás indítása",
+ "Fill screen": "Képernyő kitöltése",
+ "You have already joined this call from another device": "Már csatlakozott ehhez a híváshoz egy másik eszközön",
+ "Sorry — this call is currently full": "Bocsánat — ez a hívás betelt",
+ "Record the client name, version, and url to recognise sessions more easily in session manager": "Kliens neve, verziója és url felvétele a munkamenet könnyebb azonosításához a munkamenet kezelőben",
+ "Our new sessions manager provides better visibility of all your sessions, and greater control over them including the ability to remotely toggle push notifications.": "Az új munkamenet kezelő jobb rálátást biztosít a munkamenetekre és jobb felügyeletet beleértve, hogy távolról ki-, bekapcsolhatóak a „push” értesítések.",
+ "Have greater visibility and control over all your sessions.": "Jobb áttekintés és felügyelet a munkamenetek felett.",
+ "New session manager": "Új munkamenet kezelő",
+ "Use new session manager": "Új munkamenet kezelő használata",
+ "Try out the rich text editor (plain text mode coming soon)": "Próbálja ki az új szövegbevitelt (hamarosan érkezik a sima szöveges üzemmód)",
+ "Video call started": "Videó hívás elindult",
+ "Unknown room": "Ismeretlen szoba",
+ "stop voice broadcast": "hang közvetítés beállítása",
+ "resume voice broadcast": "hang közvetítés folytatása",
+ "pause voice broadcast": "hang közvetítés szüneteltetése",
+ "Video call started in %(roomName)s. (not supported by this browser)": "Videó hívás indult itt: %(roomName)s. (ebben a böngészőben ez nem támogatott)",
+ "Video call started in %(roomName)s.": "Videó hívás indult itt: %(roomName)s.",
+ "Room info": "Szoba információ",
+ "Underline": "Aláhúzott",
+ "Italic": "Dőlt",
+ "View chat timeline": "Beszélgetés idővonal megjelenítése",
+ "Close call": "Hívás befejezése",
+ "Layout type": "Kinézet típusa",
+ "Spotlight": "Reflektor",
+ "Freedom": "Szabadság",
+ "Video call (%(brand)s)": "Videó hívás (%(brand)s)",
+ "Unknown session type": "Ismeretlen munkamenet típus",
+ "Web session": "Webes munkamenet",
+ "Mobile session": "Mobil munkamenet",
+ "Desktop session": "Asztali munkamenet",
+ "Operating system": "Operációs rendszer",
+ "Model": "Modell",
+ "URL": "URL",
+ "Version": "Verzió",
+ "Application": "Alkalmazás",
+ "Client": "Kliens",
+ "Sign out all other sessions": "Kijelentkezés minden más munkamenetből",
+ "Call type": "Hívás típusa",
+ "You do not have sufficient permissions to change this.": "Nincs megfelelő jogosultság a megváltoztatáshoz.",
+ "%(brand)s is end-to-end encrypted, but is currently limited to smaller numbers of users.": "%(brand)s végpontok között titkosított de jelenleg csak kevés számú résztvevővel működik.",
+ "Enable %(brand)s as an additional calling option in this room": "%(brand)s engedélyezése mint további opció hívásokhoz a szobában",
+ "Notifications silenced": "Értesítések elnémítva",
+ "Stop live broadcasting?": "Megszakítja az élő közvetítést?",
+ "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Valaki már elindított egy hang közvetítést. Várja meg a közvetítés végét az új indításához.",
+ "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Nincs jogosultsága hang közvetítést indítani ebben a szobában. Vegye fel a kapcsolatot a szoba adminisztrátorával a szükséges jogosultság megszerzéséhez.",
+ "You are already recording a voice broadcast. Please end your current voice broadcast to start a new one.": "Egy hang közvetítés már folyamatban van. Először fejezze be a jelenlegi közvetítést egy új indításához.",
+ "Can't start a new voice broadcast": "Az új hang közvetítés nem indítható el",
+ "Completing set up of your new device": "Új eszköz beállításának elvégzése",
+ "Waiting for device to sign in": "Várakozás a másik eszköz bejelentkezésére",
+ "Connecting...": "Kapcsolás…",
+ "Select 'Scan QR code'": "Válassza ezt: „QR kód beolvasása”",
+ "Start at the sign in screen": "Kezdje a bejelentkező képernyőn",
+ "Scan the QR code below with your device that's signed out.": "A kijelentkezett eszközzel olvasd be a QR kódot alább.",
+ "By approving access for this device, it will have full access to your account.": "Ennek az eszköznek a hozzáférés engedélyezése után az eszköznek teljes hozzáférése lesz a fiókjához.",
+ "Check that the code below matches with your other device:": "Ellenőrizze, hogy az alábbi kód megegyezik a másik eszközödön lévővel:",
+ "Devices connected": "Összekötött eszközök",
+ "The homeserver doesn't support signing in another device.": "A matrix szerver nem támogatja más eszköz bejelentkeztetését.",
+ "An unexpected error occurred.": "Nemvárt hiba történt.",
+ "The request was cancelled.": "A kérés megszakítva.",
+ "The other device isn't signed in.": "A másik eszköz még nincs bejelentkezve.",
+ "The other device is already signed in.": "A másik eszköz már bejelentkezett.",
+ "The request was declined on the other device.": "A kérést elutasították a másik eszközön.",
+ "Linking with this device is not supported.": "Összekötés ezzel az eszközzel nem támogatott.",
+ "The scanned code is invalid.": "A beolvasott kód érvénytelen.",
+ "The linking wasn't completed in the required time.": "Az összekötés az elvárt időn belül nem fejeződött be.",
+ "Sign in new device": "Új eszköz bejelentkeztetése",
+ "Show QR code": "QR kód beolvasása",
+ "Sign in with QR code": "Belépés QR kóddal",
+ "Browser": "Böngésző",
+ "Yes, stop broadcast": "Igen, közvetítés megállítása"
}
diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json
index 2567745ca7..934cb31071 100644
--- a/src/i18n/strings/id.json
+++ b/src/i18n/strings/id.json
@@ -30,7 +30,7 @@
"Favourites": "Favorit",
"Import": "Impor",
"Incorrect verification code": "Kode verifikasi tidak benar",
- "Invalid Email Address": "Alamat Email Tidak Valid",
+ "Invalid Email Address": "Alamat Email Tidak Absah",
"Invited": "Diundang",
"Sign in with": "Masuk dengan",
"Leave room": "Tinggalkan ruangan",
@@ -255,7 +255,7 @@
"Unbans user with given ID": "Menhilangkan cekalan pengguna dengan ID yang dicantumkan",
"Joins room with given address": "Bergabung ke ruangan dengan alamat yang dicantumkan",
"Use an identity server to invite by email. Manage in Settings.": "Gunakan server identitas untuk mengundang melalui email. Kelola di Pengaturan.",
- "Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Gunakan server identitas untuk mengundang melalui email. Klik lanjutkan untuk menggunakan server identitas default (%(defaultIdentityServerName)s) atau kelola di Pengaturan.",
+ "Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Gunakan server identitas untuk mengundang melalui email. Klik lanjutkan untuk menggunakan server identitas bawaan (%(defaultIdentityServerName)s) atau kelola di Pengaturan.",
"Use an identity server": "Gunakan sebuah server identitias",
"Invites user with given id to current room": "Mengundang pengguna dengan ID yang dicantumkan ke ruangan saat ini",
"Sets the room name": "Mengatur nama ruangan",
@@ -563,7 +563,7 @@
"We couldn't log you in": "Kami tidak dapat memasukkan Anda",
"Trust": "Percayakan",
"Only continue if you trust the owner of the server.": "Hanya lanjutkan jika Anda mempercayai pemilik server ini.",
- "This action requires accessing the default identity server + { _t("Are you sure you want to stop your live broadcast?" + + "This will end the broadcast and the full recording will be available in the room.") } +
+ ), + button: _t("Yes, stop broadcast"), + }, + ); + const [confirmed] = await finished; + return confirmed; +}; export const useVoiceBroadcastRecording = (recording: VoiceBroadcastRecording) => { const client = MatrixClientPeg.get(); const room = client.getRoom(recording.infoEvent.getRoomId()); - const stopRecording = () => { - recording.stop(); - VoiceBroadcastRecordingsStore.instance().clearCurrent(); + const stopRecording = async () => { + const confirmed = await showStopBroadcastingDialog(); + + if (confirmed) { + await recording.stop(); + } }; - const [live, setLive] = useState(recording.getState() === VoiceBroadcastInfoState.Started); + const [recordingState, setRecordingState] = useState(recording.getState()); useTypedEventEmitter( recording, VoiceBroadcastRecordingEvent.StateChanged, (state: VoiceBroadcastInfoState, _recording: VoiceBroadcastRecording) => { - setLive(state === VoiceBroadcastInfoState.Started); + setRecordingState(state); }, ); + const live = [ + VoiceBroadcastInfoState.Started, + VoiceBroadcastInfoState.Paused, + VoiceBroadcastInfoState.Running, + ].includes(recordingState); + return { live, + recordingState, room, sender: recording.infoEvent.sender, stopRecording, + toggleRecording: recording.toggle, }; }; diff --git a/src/voice-broadcast/index.ts b/src/voice-broadcast/index.ts index 7262382b0c..39149c0a78 100644 --- a/src/voice-broadcast/index.ts +++ b/src/voice-broadcast/index.ts @@ -26,8 +26,7 @@ export * from "./models/VoiceBroadcastRecording"; export * from "./audio/VoiceBroadcastRecorder"; export * from "./components/VoiceBroadcastBody"; export * from "./components/atoms/LiveBadge"; -export * from "./components/atoms/PlaybackControlButton"; -export * from "./components/atoms/StopButton"; +export * from "./components/atoms/VoiceBroadcastControl"; export * from "./components/atoms/VoiceBroadcastHeader"; export * from "./components/molecules/VoiceBroadcastPlaybackBody"; export * from "./components/molecules/VoiceBroadcastRecordingBody"; @@ -35,9 +34,14 @@ export * from "./components/molecules/VoiceBroadcastRecordingPip"; export * from "./hooks/useVoiceBroadcastRecording"; export * from "./stores/VoiceBroadcastPlaybacksStore"; export * from "./stores/VoiceBroadcastRecordingsStore"; +export * from "./utils/getChunkLength"; +export * from "./utils/hasRoomLiveVoiceBroadcast"; +export * from "./utils/findRoomLiveVoiceBroadcastFromUserAndDevice"; +export * from "./utils/resumeVoiceBroadcastInRoom"; export * from "./utils/shouldDisplayAsVoiceBroadcastRecordingTile"; export * from "./utils/shouldDisplayAsVoiceBroadcastTile"; export * from "./utils/startNewVoiceBroadcastRecording"; +export * from "./utils/VoiceBroadcastResumer"; export const VoiceBroadcastInfoEventType = "io.element.voice_broadcast_info"; export const VoiceBroadcastChunkEventType = "io.element.voice_broadcast_chunk"; diff --git a/src/voice-broadcast/models/VoiceBroadcastPlayback.ts b/src/voice-broadcast/models/VoiceBroadcastPlayback.ts index 16ae9317e0..641deb66ad 100644 --- a/src/voice-broadcast/models/VoiceBroadcastPlayback.ts +++ b/src/voice-broadcast/models/VoiceBroadcastPlayback.ts @@ -36,6 +36,7 @@ export enum VoiceBroadcastPlaybackState { Paused, Playing, Stopped, + Buffering, } export enum VoiceBroadcastPlaybackEvent { @@ -91,7 +92,7 @@ export class VoiceBroadcastPlayback this.chunkRelationHelper.emitCurrent(); } - private addChunkEvent(event: MatrixEvent): boolean { + private addChunkEvent = async (event: MatrixEvent): Promise{ _t("You are already recording a voice broadcast. " + + "Please end your current voice broadcast to start a new one.") }
, + hasCloseButton: true, + }); +}; + +const showInsufficientPermissionsDialog = () => { + Modal.createDialog(InfoDialog, { + title: _t("Can't start a new voice broadcast"), + description:{ _t("You don't have the required permissions to start a voice broadcast in this room. " + + "Contact a room administrator to upgrade your permissions.") }
, + hasCloseButton: true, + }); +}; + +const showOthersAlreadyRecordingDialog = () => { + Modal.createDialog(InfoDialog, { + title: _t("Can't start a new voice broadcast"), + description:{ _t("Someone else is already recording a voice broadcast. " + + "Wait for their voice broadcast to end to start a new one.") }
, + hasCloseButton: true, + }); +}; + +/** + * Starts a new Voice Broadcast Recording, if + * - the user has the permissions to do so in the room + * - there is no other broadcast being recorded in the room, yet + * Sends a voice_broadcast_info state event and waits for the event to actually appear in the room state. + */ +export const startNewVoiceBroadcastRecording = async ( + room: Room, + client: MatrixClient, + recordingsStore: VoiceBroadcastRecordingsStore, +): Promise