From 4db2ede67f9404ea3608d1827f6dfbd889fefdeb Mon Sep 17 00:00:00 2001 From: Slimane Selyan AMIRI Date: Mon, 22 Jun 2020 10:46:31 +0000 Subject: [PATCH 01/91] Translated using Weblate (Kabyle) Currently translated at 7.7% (177 of 2288 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/kab/ --- src/i18n/strings/kab.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/i18n/strings/kab.json b/src/i18n/strings/kab.json index 8d11469afc..d6cb7ce525 100644 --- a/src/i18n/strings/kab.json +++ b/src/i18n/strings/kab.json @@ -80,13 +80,13 @@ "Bicycle": "Azlalam", "Ball": "Balles", "Anchor": "Tamdeyt", - "Headphones": "Casque", + "Headphones": "", "Folder": "Akaram", "Upload": "Sali", "Remove": "Sfeḍ", "Show less": "Sken-d drus", "Show more": "Sken-d ugar", - "Warning!": "Ɣur-k!", + "Warning!": "Ɣur-k·m!", "Current password": "Awal uffir amiran", "Password": "Awal uffir", "New Password": "Awal uffir amaynut", @@ -100,11 +100,11 @@ "Keywords": "Awalen tisura", "Clear notifications": "Sfeḍ ilɣuyen", "Off": "Insa", - "Display Name": "Mefffer isem", + "Display Name": "", "Save": "Sekles", - "Disconnect": "Yeffeɣ", + "Disconnect": "", "Go back": "Uɣal ɣer deffir", - "Change": "Changer", + "Change": "Beddel", "Theme": "Asentel", "Success": "Yedda", "Profile": "Amaɣnu", @@ -117,11 +117,11 @@ "Keyboard Shortcuts": "Inegzumen n unasiw", "Versions": "Ileqman", "None": "Ula yiwen", - "Unsubscribe": "Se désabonner", + "Unsubscribe": "", "Ignore": "Ttu", "Subscribe": "Jerred", - "Preferences": "Tiwelhiwin", - "Composer": "Editeur", + "Preferences": "", + "Composer": "", "Timeline": "Amazray", "Microphone": "Asawaḍ", "Camera": "Takamiṛatt", From 2319b25484e62249ebab71285092058bcf7a230a Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Mon, 22 Jun 2020 15:48:34 +0000 Subject: [PATCH 02/91] Translated using Weblate (Albanian) Currently translated at 99.9% (2286 of 2288 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 1f8f2ba48c..34507b1e3d 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -2517,5 +2517,12 @@ "Create a Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you’ll need it to unlock your data.": "Krijoni një Kyç Rimarrjesh që të depozitoni kyçe & të fshehta fshehtëzimi me të dhënat e llogarisë tuaj. Nëse humbni këto kredenciale, do t’ju duhet të shkyçni të dhënat tuaja.", "Create a Recovery Key": "Krijoni një Kyç Rimarrjesh", "Upgrade your Recovery Key": "Përmirësoni Kyçin tuaj të Rimarrjeve", - "Store your Recovery Key": "Depozitoni Kyçin tuaj të Rimarrjeve" + "Store your Recovery Key": "Depozitoni Kyçin tuaj të Rimarrjeve", + "Use the improved room list (will refresh to apply changes)": "Përdor listën e përmirësuar të dhomave (do të rifreskohet, që të aplikohen ndryshimet)", + "Enable IRC layout option in the appearance tab": "Aktivizoni te skeda e dukjes mundësinë për skemë IRC", + "Use custom size": "Përdor madhësi vetjake", + "Hey you. You're the best!": "Hej, ju. S’u ka kush shokun!", + "Message layout": "Skemë mesazhesh", + "Compact": "Kompakte", + "Modern": "Moderne" } From d875c3170d8caa21a4c0b15e5a3c5aeaff95b605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Mon, 22 Jun 2020 14:42:36 +0000 Subject: [PATCH 03/91] Translated using Weblate (Estonian) Currently translated at 67.3% (1539 of 2288 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 70eec98ec5..b153536c9d 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -1592,5 +1592,31 @@ "We encountered an error trying to restore your previous session.": "Meil tekkis eelmise sessiooni taastamisel viga.", "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Kui sa varem oled kasutanud uuemat Riot'i versiooni, siis sinu pragune sessioon ei pruugi olla sellega ühilduv. Sulge see aken ja jätka selle uuema versiooni kasutamist.", "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Brauseri andmeruumi tühjendamine võib selle vea lahendada, kui samas logid sa ka välja ning kogu krüptitud vestlusajalugu muutub loetamatuks.", - "Verification Pending": "Verifikatsioon on ootel" + "Verification Pending": "Verifikatsioon on ootel", + "Back": "Tagasi", + "Send Custom Event": "Saada kohandatud sündmus", + "You must specify an event type!": "Sa pead määratlema sündmuse tüübi!", + "Event sent!": "Sündmus on saadetud!", + "Failed to send custom event.": "Kohandatud sündmuse saatmine ei õnnestunud.", + "Event Type": "Sündmuse tüüp", + "State Key": "Oleku võti", + "Event Content": "Sündmuse sisu", + "Send Account Data": "Saada kasutajakonto andmed", + "View Servers in Room": "Näita jututoas kasutatavaid servereid", + "Verification Requests": "Verifitseerimistaotlused", + "Toolbox": "Töövahendid", + "Developer Tools": "Arendusvahendid", + "An error has occurred.": "Tekkis viga.", + "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Selle kasutaja usaldamiseks peaksid ta verifitseerima. Kui sa pruugid läbivalt krüptitud sõnumeid, siis kasutajate verifitseerimine tagab sulle täiendava meelerahu.", + "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Selle kasutaja verifitseerimisel märgitakse tema sessioon usaldusväärseks ning samuti märgitakse sinu sessioon tema jaoks usaldusväärseks.", + "Verify this device to mark it as trusted. Trusting this device gives you and other users extra peace of mind when using end-to-end encrypted messages.": "Selle seadme usaldamiseks peaksid ta verifitseerima. Kui sa pruugid läbivalt krüptitud sõnumeid, siis selle seadme usaldamine tagab sulle ja teistele kasutajatele täiendava meelerahu.", + "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Selle seadme verifitseerimisel märgitakse ta usaldusväärseks ning kõik kasutajad, kes sinuga on verifitseerimise läbi teinud, loevad ka selle seadme usaldusväärseks.", + "Waiting for partner to confirm...": "Ootan teise osapoole kinnitust...", + "Incoming Verification Request": "Saabuv verifitseerimispalve", + "Integrations are disabled": "Lõimingud ei ole kasutusel", + "Enable 'Manage Integrations' in Settings to do this.": "Selle tegevuse jaoks määra seadetes \"Halda lõiminguid\" kasutuselevõetuks.", + "Integrations not allowed": "Lõimingute kasutamine ei ole lubatud", + "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Sinu Riot ei võimalda selle tegevuse jaoks kasutada Lõimingute haldurit. Palun küsi lisateavet administraatorilt.", + "Failed to invite the following users to chat: %(csvUsers)s": "Järgnevate kasutajate vestlema kutsumine ei õnnestunud: %(csvUsers)s", + "We couldn't create your DM. Please check the users you want to invite and try again.": "Otsevestluse loomine ei õnnestunud. Palun kontrolli, et kasutajanimed oleks õiged ja proovi uuesti." } From 585af6ee8459d8408e19958dc0c7e900365192a8 Mon Sep 17 00:00:00 2001 From: Michael Albert Date: Mon, 22 Jun 2020 12:52:45 +0000 Subject: [PATCH 04/91] Translated using Weblate (German) Currently translated at 99.7% (2281 of 2288 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 143e3534c3..ee5eb489bc 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -2462,5 +2462,13 @@ "Enter your Recovery Key to continue.": "Gib deinen Wiederherstellungsschlüssel ein um fortzufahren.", "Create a Recovery Key": "Erzeuge einen Wiederherstellungsschlüssel", "Upgrade your Recovery Key": "Aktualisiere deinen Wiederherstellungsschlüssel", - "Store your Recovery Key": "Speichere deinen Wiederherstellungsschlüssel" + "Store your Recovery Key": "Speichere deinen Wiederherstellungsschlüssel", + "Light": "Hell", + "Dark": "Dunkel", + "Use the improved room list (will refresh to apply changes)": "Verwende die verbesserte Raumliste (lädt die Anwendung neu)", + "Use custom size": "Verwende individuelle Größe", + "Hey you. You're the best!": "Hey du. Du bist der Beste!", + "Message layout": "Nachrichtenlayout", + "Compact": "Kompakt", + "Modern": "Modern" } From 326f336425717ed0cb5e616752a2760abfdfd507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Mon, 22 Jun 2020 18:28:38 +0000 Subject: [PATCH 05/91] Translated using Weblate (Estonian) Currently translated at 68.9% (1576 of 2288 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index b153536c9d..afe752015a 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -1618,5 +1618,42 @@ "Integrations not allowed": "Lõimingute kasutamine ei ole lubatud", "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Sinu Riot ei võimalda selle tegevuse jaoks kasutada Lõimingute haldurit. Palun küsi lisateavet administraatorilt.", "Failed to invite the following users to chat: %(csvUsers)s": "Järgnevate kasutajate vestlema kutsumine ei õnnestunud: %(csvUsers)s", - "We couldn't create your DM. Please check the users you want to invite and try again.": "Otsevestluse loomine ei õnnestunud. Palun kontrolli, et kasutajanimed oleks õiged ja proovi uuesti." + "We couldn't create your DM. Please check the users you want to invite and try again.": "Otsevestluse loomine ei õnnestunud. Palun kontrolli, et kasutajanimed oleks õiged ja proovi uuesti.", + "a new master key signature": "uus üldvõtme allkiri", + "a new cross-signing key signature": "uus risttunnustamise võtme allkiri", + "a device cross-signing signature": "seadme risttunnustamise allkiri", + "a key signature": "võtme allkiri", + "Riot encountered an error during upload of:": "Riot'is tekkis viga järgneva üleslaadimisel:", + "Cancelled signature upload": "Allkirja üleslaadimine on tühistatud", + "Unable to upload": "Üleslaadimine ei õnnestu", + "Signature upload success": "Allkirja üleslaadimine õnnestus", + "Signature upload failed": "Allkirja üleslaadimine ei õnnestunud", + "Address (optional)": "Aadress (valikuline)", + "Reject invitation": "Lükka kutse tagasi", + "Are you sure you want to reject the invitation?": "Kas sa oled kindel, et soovid lükata kutse tagasi?", + "Failed to set Direct Message status of room": "Jututoa otsevestluse oleku seadmine ei õnnestunud", + "Failed to forget room %(errCode)s": "Jututoa unustamine ei õnnestunud %(errCode)s", + "This homeserver would like to make sure you are not a robot.": "See server soovib kindlaks teha, et sa ei ole robot.", + "Country Dropdown": "Riikide valik", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "Sa võid kasutada serveri kohandatud valikuid selleks, et määrates teise aadressi logida sisse teise Matrix'i serverisse. See võimaldab sul kasutada seda rakendust teises koduserveris hallatava olemasoleva Matrix'i kontoga.", + "Confirm your identity by entering your account password below.": "Tuvasta oma isik sisestades salasõna alljärgnevalt.", + "Please review and accept all of the homeserver's policies": "Palun vaata üle kõik koduserveri kasutustingimused ja nõustu nendega", + "Please review and accept the policies of this homeserver:": "Palun vaata üle selle koduserveri kasutustingimused ja nõustu nendega:", + "An email has been sent to %(emailAddress)s": "Saatsime e-kirja %(emailAddress)s aadressile", + "Please check your email to continue registration.": "Registreerimise jätkamiseks, palun vaata oma e-kirjad.", + "A text message has been sent to %(msisdn)s": "Saatsime tekstisõnumi telefoninumbrile %(msisdn)s", + "Please enter the code it contains:": "Palun sisesta seal kuvatud kood:", + "Code": "Kood", + "Submit": "Saada", + "Start authentication": "Alusta autentimist", + "Unable to validate homeserver/identity server": "Ei õnnestu valideerida koduserverit/isikutuvastusserverit", + "Your Modular server": "Sinu Modular-server", + "Enter the location of your Modular homeserver. It may use your own domain name or be a subdomain of modular.im.": "Sisesta oma Modular'i koduserveri aadress. See võib kasutada nii sinu oma domeeni, kui olla modular.im alamdomeen.", + "Sign in with SSO": "Logi sisse kasutades SSO'd ehk ühekordset autentimist", + "Failed to reject invitation": "Kutse tagasi lükkamine ei õnnestunud", + "This room is not public. You will not be able to rejoin without an invite.": "See ei ole avalik jututuba. Ilma kutseta sa ei saa uuesti liituda.", + "Failed to leave room": "Jututoast lahkumine ei õnnestunud", + "Can't leave Server Notices room": "Serveriteadete jututoast ei saa lahkuda", + "This room is used for important messages from the Homeserver, so you cannot leave it.": "Seda jututuba kasutatakse sinu koduserveri oluliste teadete jaoks ja seega sa ei saa sealt lahkuda.", + "Signed Out": "Välja logitud" } From 3054e6579a0776b0d045c0f9756f1d5c416ce746 Mon Sep 17 00:00:00 2001 From: ziriSut Date: Mon, 22 Jun 2020 19:00:29 +0000 Subject: [PATCH 06/91] Translated using Weblate (Kabyle) Currently translated at 8.4% (192 of 2288 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/kab/ --- src/i18n/strings/kab.json | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/kab.json b/src/i18n/strings/kab.json index d6cb7ce525..9245f89b54 100644 --- a/src/i18n/strings/kab.json +++ b/src/i18n/strings/kab.json @@ -216,7 +216,7 @@ "Send": "Azen", "Suggestions": "Isumar", "Go": "Ddu", - "Session name": "Nom de session", + "Session name": "Isem n tɣimit", "Send report": "Azen aneqqis", "Refresh": "Sismeḍ", "Email address": "Tansa email", @@ -346,5 +346,18 @@ "Cancel replying to a message": "Sefsex tiririt ɣef yizen", "Toggle microphone mute": "Rmed/sens tanusi n usawaḍ", "Toggle video on/off": "Rmed/sens tavidyut", - "Scroll up/down in the timeline": "Drurem gar afellay/addday n tesnakudt" + "Scroll up/down in the timeline": "Drurem gar afellay/addday n tesnakudt", + "Updating Riot": "Leqqem Riot", + "I don't want my encrypted messages": "Ur bɣiɣ ara izan-inu iwgelhanen", + "Manually export keys": "Sifeḍ s ufus tisura", + "Session ID": "Asulay n tqimit", + "Session key": "Tasarut n tɣimit", + "Please check your email and click on the link it contains. Once this is done, click continue.": "Ma ulac aɣilif, senqed imayl-ik/im syen sit ɣef useɣwen i yellan. Akken ara yemmed waya, sit ad tkemmleḍ.", + "This will allow you to reset your password and receive notifications.": "Ayagi ad ak(akem)-yeǧǧ ad twennzeḍ awal-ik/im uffir yerna ad d-tremseḍ ilɣa.", + "A username can only contain lower case letters, numbers and '=_-./'": "Isem n useqdac yezmer kan ad yegber isekkilen imeẓyanen, izwilen neɣ '=_-./'", + "Username invalid: %(errMessage)s": "Isem n useqdac d armeɣtu", + "An error occurred: %(error_string)s": "Tella-d tuccḍa: %(error_string)s", + "To get started, please pick a username!": "I wakken ad tebduḍ, ttxil-k/m fren isem n useqdac!", + "This will be your account name on the homeserver, or you can pick a different server.": "Wagi ad yili d isem-ik/im deg usebter agejdan, neɣ tzemreḍ ad tferneḍ aqeddac-nniḍen.", + "If you already have a Matrix account you can log in instead.": "Ma yella tesεiḍ yakan amiḍan di Matrix, tzemreḍ ad tkecmeḍ deg umḍq-nni." } From 22269de5b07607f4b0d26c4a970475740e376b35 Mon Sep 17 00:00:00 2001 From: ziriSut Date: Mon, 22 Jun 2020 22:15:09 +0000 Subject: [PATCH 07/91] Translated using Weblate (Kabyle) Currently translated at 9.7% (223 of 2288 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/kab/ --- src/i18n/strings/kab.json | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/i18n/strings/kab.json b/src/i18n/strings/kab.json index 9245f89b54..285fb6cbf1 100644 --- a/src/i18n/strings/kab.json +++ b/src/i18n/strings/kab.json @@ -2,12 +2,12 @@ "Confirm": "Sentem", "Analytics": "Tiselḍin", "Error": "Tuccḍa", - "Dismiss": "Agwi", + "Dismiss": "Agi", "OK": "IH", "Permission Required": "Tasiregt tlaq", "Continue": "Kemmel", - "Cancel": "Semmet", - "Sun": "Ace", + "Cancel": "Sefsex", + "Sun": "Iṭij", "Mon": "Ari", "Tue": "Ara", "Wed": "Aha", @@ -359,5 +359,32 @@ "An error occurred: %(error_string)s": "Tella-d tuccḍa: %(error_string)s", "To get started, please pick a username!": "I wakken ad tebduḍ, ttxil-k/m fren isem n useqdac!", "This will be your account name on the homeserver, or you can pick a different server.": "Wagi ad yili d isem-ik/im deg usebter agejdan, neɣ tzemreḍ ad tferneḍ aqeddac-nniḍen.", - "If you already have a Matrix account you can log in instead.": "Ma yella tesεiḍ yakan amiḍan di Matrix, tzemreḍ ad tkecmeḍ deg umḍq-nni." + "If you already have a Matrix account you can log in instead.": "Ma yella tesεiḍ yakan amiḍan di Matrix, tzemreḍ ad tkecmeḍ deg umḍq-nni.", + "Call Failed": "Ur iddi ara usiwel", + "Call Timeout": "Akud n uṛaǧu n usiwel", + "Try using turn.matrix.org": "Ɛreḍ aseqdec n turn.matrix.org", + "Unable to capture screen": "Tuṭṭfa n ugdil ulamek", + "Existing Call": "Asiwel amiran", + "You are already in a call.": "Aql-ak(qkem)-id yakan tessawaleḍ.", + "VoIP is unsupported": "VoIP ur tettusefrak ara", + "You cannot place VoIP calls in this browser.": "Ur tezmireḍ ara ad tesεeddiḍ asiwel VoIP deg yiminig-a.", + "You cannot place a call with yourself.": "Ur tezmireḍ ara a temsawaleḍ d yiman-ik.", + "Call in Progress": "Asiwel iteddu", + "A call is currently being placed!": "Yella usiwel ila iteddu!", + "A call is already in progress!": "Yella usiwel ila iteddun akka tura!", + "Replying With Files": "Tiririt s yifuyla", + "The file '%(fileName)s' failed to upload.": "Yegguma ad d-yali '%(fileName)s' ufaylu.", + "Upload Failed": "Asali ur yeddi ara", + "Enter passphrase": "Sekcem tafyirt tuffirt", + "Setting up keys": "Asebded n tsura", + "%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s", + "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(time)s", + "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s", + "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s", + "Who would you like to add to this community?": "Anwa i tebɣiḍ ad t-ternuḍ ɣer temɣiwent-a?", + "Name or Matrix ID": "Isem neɣ asulay n Matrix", + "Invite to Community": "Ɛreḍ-d ɣer temɣiwent", + "Room name or address": "Isem neɣ tansa n texxamt", + "Add to community": "Rnu ɣer temɣiwent", + "Unnamed Room": "Taxxamt war isem" } From 07cbf23b22a6cb1dcebf8ce9c96dc1b64c493b3b Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Tue, 23 Jun 2020 00:23:58 +0000 Subject: [PATCH 08/91] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2288 of 2288 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index c89c049ae5..b5bfcb4875 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2527,5 +2527,11 @@ "Upgrade your Recovery Key": "升級您的復原金鑰", "Store your Recovery Key": "儲存您的復原金鑰", "Use the improved room list (in development - will refresh to apply changes)": "使用改進的聊天室清單(開發中 ── 將會重新整理以套用變更)", - "Use the improved room list (will refresh to apply changes)": "使用改進的聊天室清單(將會重新整理以套用變更)" + "Use the improved room list (will refresh to apply changes)": "使用改進的聊天室清單(將會重新整理以套用變更)", + "Enable IRC layout option in the appearance tab": "在外觀分頁中啟用 IRC 佈局選項", + "Use custom size": "使用自訂大小", + "Hey you. You're the best!": "你是最棒的!", + "Message layout": "訊息佈局", + "Compact": "簡潔", + "Modern": "現代" } From 876e7799baf217ee1572a94d8e35e6907a4aca3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Tue, 23 Jun 2020 10:27:01 +0000 Subject: [PATCH 09/91] Translated using Weblate (Estonian) Currently translated at 70.2% (1606 of 2288 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index afe752015a..32c069f6c1 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -1655,5 +1655,35 @@ "Failed to leave room": "Jututoast lahkumine ei õnnestunud", "Can't leave Server Notices room": "Serveriteadete jututoast ei saa lahkuda", "This room is used for important messages from the Homeserver, so you cannot leave it.": "Seda jututuba kasutatakse sinu koduserveri oluliste teadete jaoks ja seega sa ei saa sealt lahkuda.", - "Signed Out": "Välja logitud" + "Signed Out": "Välja logitud", + "A username can only contain lower case letters, numbers and '=_-./'": "Kasutajanimes võivad olla vaid väiketähed, numbrid ja need viis tähemärki =_-./", + "Username not available": "Selline kasutajanimi ei ole saadaval", + "Username invalid: %(errMessage)s": "Vigane kasutajanimi: %(errMessage)s", + "An error occurred: %(error_string)s": "Tekkis viga: %(error_string)s", + "Checking...": "Kontrollin...", + "Username available": "Kasutajanimi on saadaval", + "To get started, please pick a username!": "Alustamiseks palun vali kasutajanimi!", + "This will be your account name on the homeserver, or you can pick a different server.": "See saab olema sinu kasutajanimi koduserveris, aga sa võid valida ka mõne teise serveri.", + "If you already have a Matrix account you can log in instead.": "Kui sul juba on olemas Matrix'i konto, siis võid lihtsalt sisse logida.", + "You have successfully set a password!": "Salasõna loomine õnnestus!", + "You have successfully set a password and an email address!": "Salasõna loomine ja e-posti aadressi salvestamine õnnestus!", + "You can now return to your account after signing out, and sign in on other devices.": "Nüüd sa saad peale väljalogimist pöörduda tagasi oma konto juurde või logida sisse muudest seadmetest.", + "Remember, you can always set an email address in user settings if you change your mind.": "Jäta meelde, et sa saad alati hiljem määrata kasutajaseadetest oma e-posti aadressi.", + "Use bots, bridges, widgets and sticker packs": "Kasuta roboteid, võrgusildu, vidinaid või kleepsupakke", + "Upload all": "Lae kõik üles", + "This file is too large to upload. The file size limit is %(limit)s but this file is %(sizeOfThisFile)s.": "See fail on üleslaadimiseks liiga suur. Üleslaetavate failide mahupiir on %(limit)s, kuid selle faili suurus on %(sizeOfThisFile)s.", + "Appearance": "Välimus", + "Enter recovery passphrase": "Sisesta taastamise paroolifraas", + "For security, this session has been signed out. Please sign in again.": "Turvalisusega seotud põhjustel on see sessioon välja logitud. Palun logi uuesti sisse.", + "Review terms and conditions": "Vaata üle kasutustingimused", + "Old cryptography data detected": "Tuvastasin andmed, mille puhul on kasutatud vanemat tüüpi krüptimist", + "Self-verification request": "Päring enda verifitseerimiseks", + "Switch to light mode": "Kasuta heledat teemat", + "Switch to dark mode": "Kasuta tumedat teemat", + "Switch theme": "Vaheta teemat", + "Security & privacy": "Turvalisus ja privaatsus", + "All settings": "Kõik seadistused", + "Archived rooms": "Arhiveeritud jututoad", + "Feedback": "Tagasiside", + "Account settings": "Kasutajakonto seadistused" } From c5da3d726d919ddc07aefd63994bf972c0356bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Tue, 23 Jun 2020 07:06:57 +0000 Subject: [PATCH 10/91] Translated using Weblate (French) Currently translated at 100.0% (2288 of 2288 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 1651164a69..1a89f1be6d 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2528,5 +2528,11 @@ "Upgrade your Recovery Key": "Mettre à jour votre clé de récupération", "Store your Recovery Key": "Stocker votre clé de récupération", "Use the improved room list (in development - will refresh to apply changes)": "Utiliser la liste de salons améliorée (en développement − actualisera pour appliquer les changements)", - "Use the improved room list (will refresh to apply changes)": "Utiliser la liste de salons améliorée (actualisera pour appliquer les changements)" + "Use the improved room list (will refresh to apply changes)": "Utiliser la liste de salons améliorée (actualisera pour appliquer les changements)", + "Enable IRC layout option in the appearance tab": "Activer l’option de mise en page IRC dans l’onglet d’apparence", + "Use custom size": "Utiliser une taille personnalisée", + "Hey you. You're the best!": "Eh vous. Vous êtes les meilleurs !", + "Message layout": "Mise en page des messages", + "Compact": "Compacte", + "Modern": "Moderne" } From 6255c67d4f0ddcc5447b111d9454acaceded2cfb Mon Sep 17 00:00:00 2001 From: random Date: Tue, 23 Jun 2020 09:15:58 +0000 Subject: [PATCH 11/91] Translated using Weblate (Italian) Currently translated at 99.9% (2287 of 2288 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 6f213de237..bf54e484bc 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2522,5 +2522,11 @@ "Create a Recovery Key": "Crea una chiave di recupero", "Upgrade your Recovery Key": "Aggiorna la chiave di recupero", "Store your Recovery Key": "Salva la chiave di recupero", - "Use the improved room list (will refresh to apply changes)": "Usa l'elenco stanze migliorato (verrà ricaricato per applicare le modifiche)" + "Use the improved room list (will refresh to apply changes)": "Usa l'elenco stanze migliorato (verrà ricaricato per applicare le modifiche)", + "Enable IRC layout option in the appearance tab": "Attiva l'opzione per il layout IRC nella scheda dell'aspetto", + "Use custom size": "Usa dimensione personalizzata", + "Hey you. You're the best!": "Ehi tu. Sei il migliore!", + "Message layout": "Layout messaggio", + "Compact": "Compatto", + "Modern": "Moderno" } From 84bcd98d1763207bffee1e1e41509df7b8594efd Mon Sep 17 00:00:00 2001 From: ziriSut Date: Tue, 23 Jun 2020 05:08:20 +0000 Subject: [PATCH 12/91] Translated using Weblate (Kabyle) Currently translated at 19.6% (449 of 2288 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/kab/ --- src/i18n/strings/kab.json | 220 ++++++++++++++++++++++++-------------- 1 file changed, 142 insertions(+), 78 deletions(-) diff --git a/src/i18n/strings/kab.json b/src/i18n/strings/kab.json index 285fb6cbf1..ad1b2ed516 100644 --- a/src/i18n/strings/kab.json +++ b/src/i18n/strings/kab.json @@ -80,7 +80,7 @@ "Bicycle": "Azlalam", "Ball": "Balles", "Anchor": "Tamdeyt", - "Headphones": "", + "Headphones": "Wennez", "Folder": "Akaram", "Upload": "Sali", "Remove": "Sfeḍ", @@ -100,9 +100,9 @@ "Keywords": "Awalen tisura", "Clear notifications": "Sfeḍ ilɣuyen", "Off": "Insa", - "Display Name": "", + "Display Name": "Sken isem", "Save": "Sekles", - "Disconnect": "", + "Disconnect": "Ffeɣ seg tuqqna", "Go back": "Uɣal ɣer deffir", "Change": "Beddel", "Theme": "Asentel", @@ -117,17 +117,17 @@ "Keyboard Shortcuts": "Inegzumen n unasiw", "Versions": "Ileqman", "None": "Ula yiwen", - "Unsubscribe": "", + "Unsubscribe": "Sefsex ajerred", "Ignore": "Ttu", "Subscribe": "Jerred", - "Preferences": "", - "Composer": "", + "Preferences": "Ismenyifen", + "Composer": "Imsuddes", "Timeline": "Amazray", "Microphone": "Asawaḍ", "Camera": "Takamiṛatt", - "Sounds": "Imeslan", - "Reset": "Ales awennez", - "Browse": "Snirem", + "Sounds": "Imesla", + "Reset": "Wennez", + "Browse": "Inig", "Default role": "Tamlilt tamzwert", "Permissions": "Tisirag", "Anyone": "Yal yiwen", @@ -136,38 +136,38 @@ "Share": "Bḍu", "Verification code": "Tangalt n usenqed", "Add": "Rnu", - "Email Address": "Tansa imayl", + "Email Address": "Tansa n yimayl", "Phone Number": "Uṭṭun n tiliɣri", - "Upload file": "Azen afaylu", + "Upload file": "Sali-d afaylu", "Bold": "Azuran", - "Strikethrough": "Jerreḍ", - "Quote": "Citation", - "Loading...": "Yessalay-ed…", - "Idle": "Idle", - "Unknown": "D arussin", + "Strikethrough": "Derrer", + "Quote": "Tanebdurt", + "Loading...": "La d-yettali…", + "Idle": "Arurmid", + "Unknown": "Arussin", "Settings": "Iɣewwaren", "Search": "Nadi", "Favourites": "Ismenyifen", "People": "Imdanen", "Sign Up": "Jerred", - "Reject": "Aggi", + "Reject": "Agi", "Not now": "Mačči tura", - "Sort by": "Smizzwer s", + "Sort by": "Semyizwer s", "Activity": "Armud", "A-Z": "A-Z", "Show": "Sken", - "Options": "Tinefrunin", + "Options": "Tixtiṛiyin", "Server error": "Tuccḍa n uqeddac", - "Members": "Imedrawen", + "Members": "Imettekkiyen", "Files": "Ifuyla", - "Trusted": "De confiance", - "Invite": "Nced…", - "Unmute": "Susem", - "Mute": "Kkes imesli", - "Are you sure?": "Tebɣiḍ ?", + "Trusted": "Yettwattkal", + "Invite": "Nced", + "Unmute": "Rmed imesli", + "Mute": "Sens imesli", + "Are you sure?": "Tebɣiḍ s tidet?", "Security": "Taɣellist", "Yes": "Ih", - "Verified": "Verified", + "Verified": "Yettwasenqed", "Got it": "Awi-t", "Sunday": "Acer", "Monday": "Arim", @@ -178,48 +178,48 @@ "Saturday": "Sed", "Today": "Ass-a", "Yesterday": "Iḍelli", - "View Source": "Sken aɣbalu", + "View Source": "Wali aɣbalu", "Reply": "Err", "Edit": "Ẓreg", - "Attachment": "Attachement", - "Error decrypting attachment": "Tuccḍa deg uzmak n ufaylu yeddan", + "Attachment": "Taceqquft yeddan", + "Error decrypting attachment": "Tuccḍa deg uwgelhen n tceqquft yeddan", "Show all": "Sken akk", - "Message deleted": "Izen yettwakkes", - "Copied!": "Yettusukken!", - "edited": "yeẓreg", - "Food & Drink": "Učči aked tissit", + "Message deleted": "Izen yettwakksen", + "Copied!": "Yettwanɣel!", + "edited": "yettwaẓreg", + "Food & Drink": "Učči d tissit", "Objects": "Tiɣawsiwin", "Symbols": "Izamulen", "Flags": "Anayen", "Categories": "Taggayin", - "More options": "Ugar n textirin", - "Join": "Semlil", + "More options": "Ugar n textiṛiyin", + "Join": "Rnu", "No results": "Ulac igmad", - "collapse": "sneḍfes", - "Rotate counter-clockwise": "Zzi di tnila tanemgalt n tsegnatin n temrilt", - "Rotate clockwise": "Zzi di tnila n tsegnatin n temrilt", + "collapse": "fneẓ", + "Rotate counter-clockwise": "Zzi mgal tanila n tessegnatin n temrilt", + "Rotate clockwise": "Zzi almend n tnila n tsegnatin n temrilt", "Add User": "Rnu aseqdac", "Server name": "Isem n uqeddac", - "email address": "tansa imayl", - "Close dialog": "Mdel tanaka n usdiwen", - "Notes": "Tamawt", - "Unavailable": "Ulac-it", - "Changelog": "Aɣmis n ibeddilen", + "email address": "tansa n yimayl", + "Close dialog": "Mdel adiwenni", + "Notes": "Tamawin", + "Unavailable": "Ulac", + "Changelog": "Aɣmis n yisnifal", "Removing…": "Tukksa…", - "Confirm Removal": "Serggeg tukksa", + "Confirm Removal": "Sentem tukksa", "Example": "Amedya", "example": "amedya", "Create": "Snulfu-d", "Name": "Isem", - "Sign out": "Ffeɣ", - "Back": "Retour", + "Sign out": "Ffeɣ seg tuqqna", + "Back": "Uɣal ɣer deffir", "Send": "Azen", "Suggestions": "Isumar", "Go": "Ddu", "Session name": "Isem n tɣimit", "Send report": "Azen aneqqis", - "Refresh": "Sismeḍ", - "Email address": "Tansa email", + "Refresh": "Smiren", + "Email address": "Tansa n yimayl", "Skip": "Zgel", "Username not available": "Ulac isem n useqdac", "Checking...": "Asenqed...", @@ -227,21 +227,21 @@ "Terms of Service": "Tiwtilin n useqdec", "Service": "Ameẓlu", "Summary": "Agzul", - "Document": "isemli", - "Next": "Ar zdat", - "Upload files": "Azen ifuyla", - "Appearance": "Udem", + "Document": "Isemli", + "Next": "Γer sdat", + "Upload files": "Sali-d ifuyla", + "Appearance": "Arwes", "Allow": "Sireg", - "Deny": "Agwi", - "Custom": "Personnalisé", - "Source URL": "URL aγbalu", - "Notification settings": "Iɣewwaṛen n yilɣa", + "Deny": "Agi", + "Custom": "Sagen", + "Source URL": "URL aɣbalu", + "Notification settings": "Iɣewwaren n yilɣa", "Leave": "Ffeɣ", - "Set status": "Sbadu addad", + "Set status": "Sbadu addaden", "Hide": "Ffer", "Home": "Agejdan", "Sign in": "Qqen", - "Help": "Tallelt", + "Help": "Tallalt", "Reload": "Smiren", "powered by Matrix": "s lmendad n Matrix", "Custom Server Options": "Iɣewwaren n uqeddac udmawan", @@ -250,40 +250,40 @@ "Email": "Imayl", "Username": "Isem n useqdac", "Phone": "Tiliɣri", - "Passwords don't match": "Awal uffiren ur menṭaḍen ara", + "Passwords don't match": "Awalen uffiren ur mṣadan ara", "Email (optional)": "Imayl (Afrayan)", "Register": "Jerred", "Free": "Ilelli", - "Failed to upload image": "Ur yezmir ad yessali tugna", - "Description": "Aseglem", + "Failed to upload image": "Tegguma ad d-tali tugna", + "Description": "Aglam", "Explore": "Snirem", "Filter": "Imsizdeg", "Explore rooms": "Snirem tixxamin", - "Unknown error": "Erreur inconnue", - "Logout": "Tufɣa", - "Preview": "Timeẓriwt", - "View": "Ɣeṛ", - "Guest": "Inebgi", - "Your profile": "Amaɣnu-ik", - "Feedback": "Tikti", - "Your password has been reset.": "Awal n uɛeddi inek yules awennez.", - "Syncing...": "Amtawi", + "Unknown error": "Tuccḍa tarussint", + "Logout": "Tuffɣa", + "Preview": "Taskant", + "View": "Sken", + "Guest": "Anerzaf", + "Your profile": "Amaɣnu-ik/im", + "Feedback": "Takti", + "Your password has been reset.": "Awal uffir-inek/inem yettuwennez.", + "Syncing...": "Amtawi...", "Create account": "Rnu amiḍan", - "Create your account": "Rnu amiḍan-ik", - "Go Back": "Précédent", + "Create your account": "Rnu amiḍan-ik/im", + "Go Back": "Uɣal ɣer deffir", "Commands": "Tiludna", "Users": "Iseqdacen", "Export": "Sifeḍ", "Import": "Kter", "Restore": "Err-d", - "Copy": "Nγel", - "Download": "Sider", - "Retry": "Ɛreḍ tikkelt nniḍen", + "Copy": "Nɣel", + "Download": "Sader", + "Retry": "Ɛreḍ tikkelt-nniḍen", "Starting backup...": "Asenker n uḥraz...", "Success!": "Akka d rrbeḥ !", - "Disable": "Désactiver", + "Disable": "Sens", "Navigation": "Tunigin", - "Calls": "Appels", + "Calls": "isawalen", "Alt": "Alt", "Shift": "Shift", "New line": "Izirig amaynut", @@ -386,5 +386,69 @@ "Invite to Community": "Ɛreḍ-d ɣer temɣiwent", "Room name or address": "Isem neɣ tansa n texxamt", "Add to community": "Rnu ɣer temɣiwent", - "Unnamed Room": "Taxxamt war isem" + "Unnamed Room": "Taxxamt war isem", + "The server does not support the room version specified.": "Aqeddac ur issefrek ara lqem n texxamt yettwafernen.", + "If you cancel now, you won't complete verifying the other user.": "Ma yella teffɣeḍ tura, asenqed n yiseqdacen-nniḍen ur ittemmed ara.", + "Cancel entering passphrase?": "Sefsex tafyirt tuffirt n uεeddi?", + "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Γur-k: yal amdan ara ternuḍ ɣer temɣiwent ad d-iban s wudem azayaz i yal yiwen yessnen asulay n temɣiwent", + "Invite new community members": "Nced-d imttekkiyen imaynuten ɣer temɣiwent", + "Which rooms would you like to add to this community?": "Anti tixxamin i tebɣiḍ adternuḍ i temɣiwent-a?", + "Add rooms to the community": "Rnu tixxamin ɣer temɣiwent", + "Failed to invite the following users to %(groupId)s:": "Ancad n yiseqdacen i d-iteddun %(groupId)s ur yeddi ara:", + "Failed to invite users to community": "Ancad n yiseqdacen ɣer temɣiwent ur yeddi ara", + "Failed to invite users to %(groupId)s": "Ancad n yiseqdacen ɣer %(groupId)s ur yedi ara", + "Failed to add the following rooms to %(groupId)s:": "Timerna n texxamin i d-iteddun ɣer %(groupId)s ur yedi ara:", + "Identity server has no terms of service": "Timagit n uqeddac ulac ɣer-sen iferdisen n umeẓlu", + "%(name)s is requesting verification": "%(name)s yesra asenqed", + "Riot does not have permission to send you notifications - please check your browser settings": "Riot ulac ɣer-s tisirag i tuzna n yilɣa - ttxil-k/m senqed iɣewwaren n yiminig-ik/im", + "Riot was not given permission to send notifications - please try again": "Riot ur d-yefk ara tisirag i tuzna n yilɣa - ttxil-k/m εreḍ tikkelt-nniḍen", + "Unable to enable Notifications": "Sens irmad n yilɣa", + "This email address was not found": "Tansa-a n yimayl ulac-it", + "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Tansa-ik/im n yimayl ur d-tban ara akken ad tettwacudd d usulay Matrix deg usebter-a agejdan.", + "Sign In or Create Account": "Kcem ɣer neɣ rnu amiḍan", + "Use your account or create a new one to continue.": "Seqdec amiḍan-ik/im neɣ snulfu-d yiwen akken ad tkemmleḍ.", + "Custom (%(level)s)": "Sagen (%(level)s)", + "Failed to invite": "Ulamek i d-tnecdeḍ", + "You need to be able to invite users to do that.": "Tesriḍ ad tizmireḍ ad d-tnecdeḍ iseqdacen ad gen ayagi.", + "Failed to send request.": "Tuzna n usuter ur teddi ara.", + "This room is not recognised.": "Taxxamt-a ur tṣeggem ara.", + "You are not in this room.": "Ulac-ik/ikem deg texxamt-a.", + "You do not have permission to do that in this room.": "Ur tesεiḍ ara tasiregt ad tgeḍ ayagi deg texxamt-a.", + "Missing room_id in request": "Ixuṣṣ taxxamt_asulay deg usuter", + "Room %(roomId)s not visible": "Taxxamt %(roomId)s ur d-tban ara", + "Missing user_id in request": "Ixuṣṣ useqdac_asulay deg usuter", + "Command error": "Tuccḍa n tladna", + "/ddg is not a command": "/ddg mačči d taladna", + "Upgrades a room to a new version": "Leqqem taxxamt ɣer lqem amaynut", + "Error upgrading room": "Tuccḍa deg uleqqem n texxamt", + "Changes your avatar in this current room only": "Snifel avatar-ik/im deg texxamat-agi kan tamirant", + "Changes your avatar in all rooms": "Snifel avatar/ik/om deg yixxamin", + "Use an identity server": "Seqdec timagit n uqeddac", + "Joins room with given address": "Kcem ɣer texxamt s tansa i d-yettunefken", + "Leave room": "Ffeɣ seg texxamt", + "Ignores a user, hiding their messages from you": "Anef iuseqdac, ffer iznan-ines sɣur-k", + "Ignored user": "Aseqdac yettunfen", + "You are now ignoring %(userId)s": "Aql-ak tura tunfeḍ i %(userId)s", + "Command failed": "Taladna ur teddi ara", + "Could not find user in room": "Ur yettwaf ara useqdac deg texxamt", + "(no answer)": "(ulac tiririt)", + "New login. Was this you?": "Anekcam amaynut. D kečč/kemm?", + "Verify the new login accessing your account: %(name)s": "Senqed anekcam amaynut i ikecmen ɣer umiḍan-ik/im: %(name)s", + "What's new?": "D acu-t umaynut?", + "Upgrade your Riot": "Leqqem Riot inek/inem", + "A new version of Riot is available!": "Lqem amaynut n Riot yella!", + "You: %(message)s": "Kečč/kemm: %(message)s", + "There was an error joining the room": "Tella-d tuccḍa deg unekcum ɣer texxamt", + "Sorry, your homeserver is too old to participate in this room.": "Suref-aɣ, asebter-ik/im agejdan d aqbur aṭas akken ad yettekki deg texxamt-a.", + "Please contact your homeserver administrator.": "Ttxil-k/m nermes anedbal-ik/im n usebter agejdan.", + "Failed to join room": "Anekcum ɣer texxamt ur yeddi ara", + "Custom user status messages": "Sagen addaden n yiznan n useqdac", + "Support adding custom themes": "Tallalt n tmerna n yisental udmawanen", + "Use custom size": "Seqdec teɣzi tudmawant", + "Show avatar changes": "Sken isnifal n avatar", + "Always show encryption icons": "Sken yal tikkelt tignitin tiwgelhanen", + "Send typing notifications": "Azen ilɣa yettuszemlen", + "Show typing notifications": "Azen ilɣa yettuszemlen", + "Room Colour": "Initen n texxamt", + "Show developer tools": "Sken ifecka n uneflay" } From cc60fff19848a5ddff74f7b369fcde421bc3b9b9 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Tue, 23 Jun 2020 15:15:02 +0000 Subject: [PATCH 13/91] Translated using Weblate (Albanian) Currently translated at 99.9% (2288 of 2290 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 34507b1e3d..2656744f93 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -2524,5 +2524,7 @@ "Hey you. You're the best!": "Hej, ju. S’u ka kush shokun!", "Message layout": "Skemë mesazhesh", "Compact": "Kompakte", - "Modern": "Moderne" + "Modern": "Moderne", + "Use a system font": "Përdor një palë shkronja sistemi", + "System font name": "Emër shkronjash sistemi" } From a915da650a21fa909eb773a27113bb14809c27e0 Mon Sep 17 00:00:00 2001 From: XoseM Date: Tue, 23 Jun 2020 14:57:27 +0000 Subject: [PATCH 14/91] Translated using Weblate (Galician) Currently translated at 84.0% (1924 of 2290 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 41 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 9bd477f696..2e5678f266 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -1962,5 +1962,44 @@ "View Servers in Room": "Ver Servidores na Sala", "Verification Requests": "Solicitudes de Verificación", "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Verifica esta usuaria para marcala como confiable. Ao confiar nas usuarias proporcionache tranquilidade extra cando usas cifrado de extremo-a-extremo.", - "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Ao verificar esta usuaria marcarás a súa sesión como confiable, e tamén marcará a túa sesión como confiable para elas." + "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Ao verificar esta usuaria marcarás a súa sesión como confiable, e tamén marcará a túa sesión como confiable para elas.", + "Enable IRC layout option in the appearance tab": "Activar opción de disposición IRC na pestana de aparencia", + "Use custom size": "Usar tamaño personalizado", + "Use a system font": "Usar tipo de letra do sistema", + "System font name": "Nome da letra do sistema", + "Hey you. You're the best!": "Ei ti. Es grande!", + "Message layout": "Disposición da mensaxe", + "Compact": "Compacta", + "Modern": "Moderna", + "Power level": "Poderío", + "Verify this device to mark it as trusted. Trusting this device gives you and other users extra peace of mind when using end-to-end encrypted messages.": "Verifica este dispositivo para marcalo como confiable. Confiando neste dispositivo permite que ti e outras usuarias estedes máis tranquilas ao utilizar mensaxes cifradas.", + "Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Ao verificar este dispositivo marcaralo como confiable, e as usuarias que confiaron en ti tamén confiarán nel.", + "Waiting for partner to confirm...": "Agardando a que o compañeiro confirme...", + "Incoming Verification Request": "Solicitude entrante de verificación", + "Integrations are disabled": "As Integracións están desactivadas", + "Enable 'Manage Integrations' in Settings to do this.": "Activa 'Xestionar Integracións' nos Axustes para facer esto.", + "Integrations not allowed": "Non se permiten Integracións", + "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "O teu Riot non permite que uses o Xestor de Integracións, contacta coa administración.", + "Confirm to continue": "Confirma para continuar", + "Click the button below to confirm your identity.": "Preme no botón inferior para confirmar a túa identidade.", + "Failed to invite the following users to chat: %(csvUsers)s": "Fallo ao convidar as seguintes usuarias a conversa: %(csvUsers)s", + "We couldn't create your DM. Please check the users you want to invite and try again.": "Non puidemos crear o teu MD. Comproba as usuarias que queres convidar e inténtao outra vez.", + "Something went wrong trying to invite the users.": "Algo fallou ao convidar as usuarias.", + "We couldn't invite those users. Please check the users you want to invite and try again.": "Non puidemos invitar esas usuarias. Comprobas que son correctas e intenta convidalas outra vez.", + "Failed to find the following users": "Non atopamos as seguintes usuarias", + "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "As seguintes usuarias poderían non existir ou non son válidas, e non se poden convidar: %(csvNames)s", + "Recent Conversations": "Conversas recentes", + "Suggestions": "Suxestións", + "Recently Direct Messaged": "Mensaxes Directas recentes", + "Start a conversation with someone using their name, username (like ) or email address.": "Inicia a conversa con alguén usando o seu nome, nome de usuaria (como ) ou enderezo de email.", + "Go": "Ir", + "Invite someone using their name, username (like ), email address or share this room.": "Convida alguén usando o seu nome, nome de usuaria (como ), enderezo de email ou comparte esta sala.", + "a new master key signature": "unha nova firma con chave mestra", + "a new cross-signing key signature": "unha nova firma con chave de sinatura-cruzada", + "a device cross-signing signature": "unha sinatura sinatura-cruzada de dispositivo", + "a key signature": "unha chave de sinatura", + "Riot encountered an error during upload of:": "Riot atopou un fallo ao subir:", + "Upload completed": "Subida completa", + "Cancelled signature upload": "Cancelada a subida da sinatura", + "Unable to upload": "Non foi posible a subida" } From dd8109f77af74c65f46774ebd8bec6961297782b Mon Sep 17 00:00:00 2001 From: Slavi Pantaleev Date: Wed, 24 Jun 2020 07:44:19 +0000 Subject: [PATCH 15/91] Translated using Weblate (Bulgarian) Currently translated at 100.0% (2291 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/bg/ --- src/i18n/strings/bg.json | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/bg.json b/src/i18n/strings/bg.json index 89edf90c8b..1b67bb7ced 100644 --- a/src/i18n/strings/bg.json +++ b/src/i18n/strings/bg.json @@ -2325,7 +2325,7 @@ "Verify this login": "Потвърди тази сесия", "Session verified": "Сесията беше потвърдена", "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Промяната на паролата ще нулира всички ключове за шифроване от-край-до-край по всички ваши сесии, правейки шифрованата история на чата нечетима. Настройте резервно копие на ключовете или експортирайте ключовете на стаите от друга сесия преди да промените паролата си.", - "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "Администраторът на сървъра е изключиш шифроване от край-до-край по подразбиране за лични стаи и за директни съобщения.", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "Администраторът на сървъра е изключил шифроване от край-до-край по подразбиране за лични стаи и за директни съобщения.", "Emoji picker": "Избор на емоджи", "People": "Хора", "Show %(n)s more": "Покажи още %(n)s", @@ -2446,5 +2446,27 @@ "A-Z": "Азбучен ред", "Unread rooms": "Непрочетени стаи", "Show %(count)s more|other": "Покажи още %(count)s", - "Show %(count)s more|one": "Покажи още %(count)s" + "Show %(count)s more|one": "Покажи още %(count)s", + "Light": "Светла", + "Dark": "Тъмна", + "Use the improved room list (will refresh to apply changes)": "Използвай подобрения списък със стаи (ще презареди за да се приложи промяната)", + "Enable IRC layout option in the appearance tab": "Включи опцията за IRC изглед в раздел Изглед", + "Use custom size": "Използвай собствен размер", + "Use a system font": "Използвай системния шрифт", + "System font name": "Име на системния шрифт", + "Hey you. You're the best!": "Хей, ти. Върхът си!", + "Message layout": "Изглед на съобщенията", + "Compact": "Компактен", + "Modern": "Модерен", + "Customise your appearance": "Настройте изгледа", + "Appearance Settings only affect this Riot session.": "Настройките на изгледа влияят само на тази Riot сесия.", + "The authenticity of this encrypted message can't be guaranteed on this device.": "Автентичността на това шифровано съобщение не може да бъде гарантирана на това устройство.", + "Always show first": "Винаги показвай първо", + "Show": "Покажи", + "Message preview": "Преглед на съобщението", + "List options": "Опции на списъка", + "Leave Room": "Напусни стаята", + "Room options": "Настройки на стаята", + "Use Recovery Key or Passphrase": "Използвай ключ за възстановяване или парола", + "Use Recovery Key": "Използвай ключ за възстановяване" } From bf34d37606771ae1969da6f7e092be10f872aaa4 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Wed, 24 Jun 2020 01:12:53 +0000 Subject: [PATCH 16/91] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2291 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index b5bfcb4875..325f657af1 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2533,5 +2533,8 @@ "Hey you. You're the best!": "你是最棒的!", "Message layout": "訊息佈局", "Compact": "簡潔", - "Modern": "現代" + "Modern": "現代", + "Use a system font": "使用系統字型", + "System font name": "系統字型名稱", + "The authenticity of this encrypted message can't be guaranteed on this device.": "無法在此裝置上保證加密訊息的真實性。" } From 7cb48aac9bd0123b4ae730a88eb8ba269935ad94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Wed, 24 Jun 2020 07:01:40 +0000 Subject: [PATCH 17/91] Translated using Weblate (French) Currently translated at 100.0% (2291 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 1a89f1be6d..e6762eee32 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2534,5 +2534,8 @@ "Hey you. You're the best!": "Eh vous. Vous êtes les meilleurs !", "Message layout": "Mise en page des messages", "Compact": "Compacte", - "Modern": "Moderne" + "Modern": "Moderne", + "Use a system font": "Utiliser une police du système", + "System font name": "Nom de la police du système", + "The authenticity of this encrypted message can't be guaranteed on this device.": "L’authenticité de ce message chiffré ne peut pas être garantie sur cet appareil." } From f1fc81be69de1a52531d2cf40fa19d53f8578d0b Mon Sep 17 00:00:00 2001 From: XoseM Date: Wed, 24 Jun 2020 07:16:08 +0000 Subject: [PATCH 18/91] Translated using Weblate (Galician) Currently translated at 84.8% (1943 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 2e5678f266..55b3f021bb 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -2001,5 +2001,24 @@ "Riot encountered an error during upload of:": "Riot atopou un fallo ao subir:", "Upload completed": "Subida completa", "Cancelled signature upload": "Cancelada a subida da sinatura", - "Unable to upload": "Non foi posible a subida" + "Unable to upload": "Non foi posible a subida", + "The authenticity of this encrypted message can't be guaranteed on this device.": "A autenticidade desta mensaxe cifrada non está garantida neste dispositivo.", + "Signature upload success": "Subeuse correctamente a sinatura", + "Signature upload failed": "Fallou a subida da sinatura", + "You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "Anteriormente utilizaches Riot en %(host)s con carga preguiceira de membros. Nesta versión a carga preguiceira está desactivada. Como a caché local non é compatible entre as dúas configuracións, Riot precisa voltar a sincronizar a conta.", + "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Se a outra versión de Riot aínda está aberta noutra lapela, péchaa por favor, pois podería haber fallos ao estar as dúas sesións traballando simultáneamente.", + "Incompatible local cache": "Caché local incompatible", + "Clear cache and resync": "Baleirar caché e sincronizar", + "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot utiliza agora entre 3 e 5 veces menos memoria, cargando só información sobre as usuarias cando é preciso. Agarda mentras se sincroniza co servidor!", + "Updating Riot": "Actualizando Riot", + "I don't want my encrypted messages": "Non quero as miñas mensaxes cifradas", + "Manually export keys": "Exportar manualmente as chaves", + "You'll lose access to your encrypted messages": "Perderás o acceso as túas mensaxes cifradas", + "Confirm by comparing the following with the User Settings in your other session:": "Corfirma comparando o seguinte cos Axustes de Usuaria na outra sesión:", + "Confirm this user's session by comparing the following with their User Settings:": "Confirma a sesión desta usuaria comparando o seguinte cos seus Axustes de Usuaria:", + "Session name": "Nome da sesión", + "Session key": "Chave da sesión", + "If they don't match, the security of your communication may be compromised.": "Se non concordan, a seguridade da comunicación podería estar comprometida.", + "Verify session": "Verificar sesión", + "Your homeserver doesn't seem to support this feature.": "O servidor non semella soportar esta característica." } From 354e31e7db9cefbba1bf95414cf713291d4525bb Mon Sep 17 00:00:00 2001 From: Szimszon Date: Wed, 24 Jun 2020 06:48:24 +0000 Subject: [PATCH 19/91] Translated using Weblate (Hungarian) Currently translated at 100.0% (2291 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index ea830bc38e..05d68fd890 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2516,5 +2516,14 @@ "Upgrade your Recovery Key": "A Visszaállítási kulcs fejlesztése", "Store your Recovery Key": "Visszaállítási kulcs tárolása", "Use the improved room list (in development - will refresh to apply changes)": "Használd a fejlesztett szoba listát (fejlesztés alatt - a változások a frissítés után aktiválódnak)", - "Use the improved room list (will refresh to apply changes)": "Használd a fejlesztett szoba listát (a változások életbe lépéséhez újra fog tölteni)" + "Use the improved room list (will refresh to apply changes)": "Használd a fejlesztett szoba listát (a változások életbe lépéséhez újra fog tölteni)", + "Enable IRC layout option in the appearance tab": "IRC kinézet lehetőségének megjelenítése a kinézet fülön", + "Use custom size": "Egyedi méret használata", + "Use a system font": "Rendszer betűtípus használata", + "System font name": "Rendszer betűtípus neve", + "Hey you. You're the best!": "Hé te! Te vagy a legjobb!", + "Message layout": "Üzenet kinézete", + "Compact": "Egyszerű", + "Modern": "Modern", + "The authenticity of this encrypted message can't be guaranteed on this device.": "A titkosított üzenetek valódiságát ezen az eszközön nem lehet garantálni." } From bced9346130d0f7c72dd7d8863ef80b7b2e24bc5 Mon Sep 17 00:00:00 2001 From: ziriSut Date: Wed, 24 Jun 2020 00:52:10 +0000 Subject: [PATCH 20/91] Translated using Weblate (Kabyle) Currently translated at 19.6% (449 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/kab/ --- src/i18n/strings/kab.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/kab.json b/src/i18n/strings/kab.json index ad1b2ed516..7180e35b1f 100644 --- a/src/i18n/strings/kab.json +++ b/src/i18n/strings/kab.json @@ -450,5 +450,6 @@ "Send typing notifications": "Azen ilɣa yettuszemlen", "Show typing notifications": "Azen ilɣa yettuszemlen", "Room Colour": "Initen n texxamt", - "Show developer tools": "Sken ifecka n uneflay" + "Show developer tools": "Sken ifecka n uneflay", + "Whether or not you're using the Richtext mode of the Rich Text Editor": "Ma yella tseqdaceḍ askar n Richtext n umaẓrag n uḍris anesbaɣur" } From 1aef7cdfeab8e0a59d82072dbda0f7098c5d9ab7 Mon Sep 17 00:00:00 2001 From: XoseM Date: Wed, 24 Jun 2020 14:42:49 +0000 Subject: [PATCH 21/91] Translated using Weblate (Galician) Currently translated at 91.4% (2095 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 154 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 153 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 55b3f021bb..2a4bf15b89 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -2020,5 +2020,157 @@ "Session key": "Chave da sesión", "If they don't match, the security of your communication may be compromised.": "Se non concordan, a seguridade da comunicación podería estar comprometida.", "Verify session": "Verificar sesión", - "Your homeserver doesn't seem to support this feature.": "O servidor non semella soportar esta característica." + "Your homeserver doesn't seem to support this feature.": "O servidor non semella soportar esta característica.", + "Guest": "Convidada", + "Message edits": "Edicións da mensaxe", + "Your account is not secure": "A túa conta non é segura", + "Your password": "O teu contrasinal", + "This session, or the other session": "Esta sesión, ou a outra sesión", + "The internet connection either session is using": "A conexión a internet que está a usar cada sesión", + "We recommend you change your password and recovery key in Settings immediately": "Recomendámosche cambiar inmediatamente o contrasinal e chave de recuperación nos Axustes", + "New session": "Nova sesión", + "Use this session to verify your new one, granting it access to encrypted messages:": "Usa esta seseión para verificar a nova, dándolle acceso ás mensaxes cifradas:", + "This wasn't me": "Non fun eu", + "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "Se atopas fallos ou queres compartir a túa experiencia, compárteos con nós en GitHub.", + "Report bugs & give feedback": "Informe de fallos & opinión", + "Please fill why you're reporting.": "Escribe a razón do informe.", + "Report Content to Your Homeserver Administrator": "Denuncia sobre contido á Administración do teu servidor", + "Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "Ao denunciar esta mensaxe vasnos enviar o seu 'event ID' único á administración do servidor. Se as mensaxes da sala están cifradas, a administración do servidor non poderá ler o texto da mensaxe ou ver imaxes ou ficheiros.", + "Send report": "Enviar denuncia", + "Failed to upgrade room": "Fallou a actualización da sala", + "The room upgrade could not be completed": "A actualización da sala non se completou", + "Upgrade this room to version %(version)s": "Actualiza esta sala á versión %(version)s", + "Upgrade Room Version": "Actualiza a Versión da Sala", + "Upgrading this room requires closing down the current instance of the room and creating a new room in its place. To give room members the best possible experience, we will:": "Para actualizar a sala debes pechar a instancia actual da sala e crear unha nova sala no seu lugar. Para proporcionar a mellor experiencia de usuaria, imos:", + "Create a new room with the same name, description and avatar": "Crear unha nova sala co mesmo nome, descrición e avatar", + "Update any local room aliases to point to the new room": "Actualizar calquera alias local da sala para que apunte á nova sala", + "Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "Evitar que as usuarias conversen na sala antiga e publicar unha mensaxe avisando ás usuarias para que veñan á nova sala", + "Put a link back to the old room at the start of the new room so people can see old messages": "Poñer unha ligazón na nova sala cara a antiga para que as persoas poidan ver as mensaxes antigas", + "Automatically invite users": "Convidar automáticamente ás usuarias", + "Upgrade private room": "Actualizar sala privada", + "Upgrade public room": "Actualizar sala pública", + "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "A actualización da sala é unha acción avanzada e recomendada cando unha sala se volta inestable debido aos fallos, características obsoletas e vulnerabilidades da seguridade.", + "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug.": "Esto normalmente só afecta ao xeito en que a sala se procesa no servidor. Se tes problemas con Riot, informa do problema.", + "You'll upgrade this room from to .": "Vas actualizar a sala da versión á .", + "A username can only contain lower case letters, numbers and '=_-./'": "Un nome de usuaria só pode ter minúsculas, números e '=_-./'", + "Checking...": "Comprobando...", + "Missing session data": "Faltan datos da sesión", + "Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Faltan algúns datos da sesión, incluíndo chaves de mensaxes cifradas. Desconecta e volve a conectar para arranxalo, restaurando as chaves desde a copia.", + "Your browser likely removed this data when running low on disk space.": "O navegador probablemente eliminou estos datos ao quedar con pouco espazo de disco.", + "Integration Manager": "Xestor de Integracións", + "Find others by phone or email": "Atopa a outras por teléfono ou email", + "Be found by phone or email": "Permite ser atopada polo email ou teléfono", + "Use bots, bridges, widgets and sticker packs": "Usa bots, pontes, widgets e paquetes de adhesivos", + "Terms of Service": "Termos do Servizo", + "To continue you need to accept the terms of this service.": "Para continuar tes que aceptar os termos deste servizo.", + "Service": "Servizo", + "Summary": "Resumo", + "Document": "Documento", + "Next": "Seguinte", + "Upload files (%(current)s of %(total)s)": "Subir ficheiros (%(current)s de %(total)s)", + "Upload files": "Subir ficheiros", + "Upload all": "Subir todo", + "This file is too large to upload. The file size limit is %(limit)s but this file is %(sizeOfThisFile)s.": "Este ficheiro é demasiado grande para subilo. O límite é %(limit)s mais o ficheiro é %(sizeOfThisFile)s.", + "These files are too large to upload. The file size limit is %(limit)s.": "Estes ficheiros son demasiado grandes para subilos. O límite é %(limit)s.", + "Some files are too large to be uploaded. The file size limit is %(limit)s.": "Algúns ficheiros son demasiado grandes para subilos. O límite é %(limit)s.", + "Upload %(count)s other files|other": "Subir outros %(count)s ficheiros", + "Upload %(count)s other files|one": "Subir %(count)s ficheiro máis", + "Cancel All": "Cancelar todo", + "Upload Error": "Fallo ao subir", + "Verify other session": "Verificar outra sesión", + "Verification Request": "Solicitude de Verificación", + "A widget would like to verify your identity": "Un widget quere verificar a túa indentidade", + "A widget located at %(widgetUrl)s would like to verify your identity. By allowing this, the widget will be able to verify your user ID, but not perform actions as you.": "Un widget localizado en %(widgetUrl)s quere verificar a túa identidade. Se o permites, o widget poderá verificar o teu ID de usuaria, pero non realizar accións por ti.", + "Remember my selection for this widget": "Lembrar a miña decisión para este widget", + "Deny": "Denegar", + "Enter recovery passphrase": "Escribe a frase de paso de recuperación", + "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Non se pode acceder ao almacenaxe segredo. Verifica que escribiches a frase de paso correta.", + "Warning: You should only do this on a trusted computer.": "Aviso: Só deberías facer esto nunha computadora de confianza.", + "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Accede ó teu historial seguro de mensaxes e á túa identidade de sinatura-cruzada para verificar outras sesión escribindo a frase de paso de recuperación.", + "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Se esqueceches a túa frase de paso de recuperación podes usar a chave de recuperación ou establecer novas opcións de recuperación.", + "Enter recovery key": "Escribe a chave de recuperación", + "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Non se accedeu ó almacenaxe segredo. Verifica que escribiches a chave de recuperación correcta.", + "This looks like a valid recovery key!": "Semella unha chave de recuperación válida!", + "Not a valid recovery key": "Non é unha chave de recuperación válida", + "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Accede ó teu historial de mensaxes seguras e á identidade de sinatura-cruzada para verificar outras sesión escribindo a achave de recuperación.", + "If you've forgotten your recovery key you can .": "Se esqueceches a chave de recuperación podes .", + "Restoring keys from backup": "Restablecendo chaves desde a copia", + "Fetching keys from server...": "Obtendo chaves desde o servidor...", + "%(completed)s of %(total)s keys restored": "%(completed)s de %(total)s chaves restablecidas", + "Unable to load backup status": "Non cargou o estado da copia", + "Recovery key mismatch": "A chave de recuperación non concorda", + "Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.": "A copia non se puido descifrar con esta chave de recuperación: comproba que introduciches a chave de recuperación correcta.", + "Incorrect recovery passphrase": "Frase da paso de recuperación incorrecta", + "Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "A copia non se descifrou con esta frase de paso: comproba que escribiches a frase de paso correcta.", + "Unable to restore backup": "Non se restableceu a copia", + "No backup found!": "Non se atopou copia!", + "Keys restored": "Chaves restablecidas", + "Failed to decrypt %(failedCount)s sessions!": "Fallo ao descifrar %(failedCount)s sesións!", + "Successfully restored %(sessionCount)s keys": "Restablecidas correctamente %(sessionCount)s chaves", + "Warning: you should only set up key backup from a trusted computer.": "Aviso: só deberías realizar a copia de apoio desde un ordenador de confianza.", + "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Accede ó historial de mensaxes seguras escribindo a frase de paso de recuperación.", + "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Se esqueceches a frase de paso de recuperación pode usar a chave de recuperación ou establecer novas opcións de recuperación", + "Warning: You should only set up key backup from a trusted computer.": "Aviso: só deberías configurar a copia das chaves desde un ordenador de confianza.", + "Access your secure message history and set up secure messaging by entering your recovery key.": "Accede ó teu historial de mensaxes seguras e configura a comunicación segura escribindo a chave de recuperación.", + "If you've forgotten your recovery key you can ": "Se esqueceches a chave de recuperación podes ", + "Address (optional)": "Enderezo (optativo)", + "Resend edit": "Editar reenvío", + "Resend %(unsentCount)s reaction(s)": "Reenviar %(unsentCount)s reacción(s)", + "Resend removal": "Reenviar retirada", + "Share Permalink": "Comparte ligazón permanente", + "Report Content": "Denunciar contido", + "Notification settings": "Axustes de notificacións", + "Clear status": "Baleirar estado", + "Update status": "Actualizar estado", + "Set status": "Establecer estado", + "Set a new status...": "Establecer novo estado...", + "Hide": "Agochar", + "Reload": "Recargar", + "Take picture": "Tomar foto", + "Remove for everyone": "Eliminar para todas", + "Remove for me": "Eliminar para min", + "User Status": "Estado da usuaria", + "This homeserver would like to make sure you are not a robot.": "Este servidor quere asegurarse de que non es un robot.", + "Country Dropdown": "Despregable de países", + "You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "Podes usar as opcións dun servidor personalizado para conectarte a outros servidores Matrix indicando o URL do servidor. Así poderás usar esta app cunha conta Matrix dun servidor diferente.", + "Confirm your identity by entering your account password below.": "Confirma a túa identidade escribindo o contrasinal da conta embaixo.", + "Missing captcha public key in homeserver configuration. Please report this to your homeserver administrator.": "Falta a chave pública do captcha na configuración do servidor. Informa desto á administración do teu servidor.", + "Please review and accept all of the homeserver's policies": "Revisa e acepta todas as cláusulas do servidor", + "Please review and accept the policies of this homeserver:": "Revisa e acepta as cláusulas deste servidor:", + "Unable to validate homeserver/identity server": "Non se puido validar o servidor/servidor de identidade", + "Your Modular server": "O teu servidor Modular", + "Enter the location of your Modular homeserver. It may use your own domain name or be a subdomain of modular.im.": "Escribe a localización do teu servidor Modular. Podería utilizar o teu propio nome de dominio ou ser un subdominio de modular.im.", + "Server Name": "Nome do Servidor", + "Enter password": "Escribe contrasinal", + "Nice, strong password!": "Ben, bo contrasinal!", + "Password is allowed, but unsafe": "O contrasinal é admisible, pero inseguro", + "Keep going...": "Segue intentándoo...", + "The username field must not be blank.": "O campo de nome de usuaria non pode estar baleiro.", + "Username": "Nome de usuaria", + "Not sure of your password? Set a new one": "¿Non estás segura do contrasinal? Crea un novo", + "No identity server is configured so you cannot add an email address in order to reset your password in the future.": "Non hai un servidor de identidade configurado polo que non poderás engadir enderezos de email para poder restablecer o contrasinal no futuro.", + "Use an email address to recover your account": "Usa un enderezo de email para recuperar a túa conta", + "Enter email address (required on this homeserver)": "Escribe o enderzo de email (requerido neste servidor)", + "Doesn't look like a valid email address": "Non semella un enderezo válido", + "Passwords don't match": "Non concordan os contrasinais", + "Other users can invite you to rooms using your contact details": "Outras usuarias poden convidarte ás salas usando os teus detalles de contacto", + "Enter phone number (required on this homeserver)": "Escribe un número de teléfono (requerido neste servidor)", + "Doesn't look like a valid phone number": "Non semella un número de teléfono válido", + "Use lowercase letters, numbers, dashes and underscores only": "Usa só minúsculas, números, trazos e trazos baixos", + "Enter username": "Escribe nome de usuaria", + "Email (optional)": "Email (optativo)", + "Phone (optional)": "Teléfono (optativo)", + "Create your Matrix account on %(serverName)s": "Crea a conta Matrix en %(serverName)s", + "Create your Matrix account on ": "Crea a túa conta Matrix en ", + "Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Establece un email para recuperación da conta. Usa un email ou teléfono de xeito optativo para que poidan atoparte os contactos.", + "Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "Establece un email para recuperación da conta. Optativamente usa un email para que poidan atoparte os contactos existentes.", + "Enter your custom homeserver URL What does this mean?": "Escribe o URL do servidor personalizado ¿Qué significa esto?", + "Homeserver URL": "URL do servidor", + "Enter your custom identity server URL What does this mean?": "Escribe o URL do servidor de identidade personalizado ¿Que significa esto?", + "Identity Server URL": "URL do servidor de identidade", + "Other servers": "Outros servidores", + "Free": "Gratuíto", + "Premium": "Premium", + "Premium hosting for organisations Learn more": "Hospedaxe Premium para organizacións Saber máis", + "Find other public servers or use a custom server": "Atopa outros servidores públicos ou usa un servidor personalizado" } From b4ab15f91f4d7f85444d5a1531bc5d8c82d56e0f Mon Sep 17 00:00:00 2001 From: random Date: Wed, 24 Jun 2020 13:32:40 +0000 Subject: [PATCH 22/91] Translated using Weblate (Italian) Currently translated at 99.9% (2290 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index bf54e484bc..1e7f6d0957 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2528,5 +2528,8 @@ "Hey you. You're the best!": "Ehi tu. Sei il migliore!", "Message layout": "Layout messaggio", "Compact": "Compatto", - "Modern": "Moderno" + "Modern": "Moderno", + "Use a system font": "Usa un carattere di sistema", + "System font name": "Nome carattere di sistema", + "The authenticity of this encrypted message can't be guaranteed on this device.": "L'autenticità di questo messaggio cifrato non può essere garantita su questo dispositivo." } From aaff3e0bec17e5139297aa2f93fadd70084a4229 Mon Sep 17 00:00:00 2001 From: XoseM Date: Thu, 25 Jun 2020 13:01:31 +0000 Subject: [PATCH 23/91] Translated using Weblate (Galician) Currently translated at 92.9% (2128 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 2a4bf15b89..192d7744fa 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -2172,5 +2172,38 @@ "Free": "Gratuíto", "Premium": "Premium", "Premium hosting for organisations Learn more": "Hospedaxe Premium para organizacións Saber máis", - "Find other public servers or use a custom server": "Atopa outros servidores públicos ou usa un servidor personalizado" + "Find other public servers or use a custom server": "Atopa outros servidores públicos ou usa un servidor personalizado", + "Couldn't load page": "Non se puido cargar a páxina", + "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Administras esta comunidade. Non poderás voltar a unirte sen un convite doutra persoa administradora.", + "Want more than a community? Get your own server": "¿Queres algo máis que unha comunidade? Monta o teu propio servidor", + "This homeserver does not support communities": "Este servidor non soporta comunidades", + "Welcome to %(appName)s": "Benvida a %(appName)s", + "Liberate your communication": "Libera as túas comunicacións", + "Send a Direct Message": "Envía unha Mensaxe Directa", + "Create a Group Chat": "Crear unha Conversa en Grupo", + "Self-verification request": "Solicitude de auto-verificación", + "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot non puido obter a lista de protocolos desde o servidor. O servidor podería ser moi antigo para soportar redes de terceiros.", + "Riot failed to get the public room list.": "Riot non puido obter a lista de salas públicas.", + "The homeserver may be unavailable or overloaded.": "O servidor podería non estar dispoñible ou con sobrecarga.", + "delete the address.": "eliminar o enderezo.", + "Preview": "Vista previa", + "View": "Vista", + "Find a room…": "Atopa unha sala…", + "Find a room… (e.g. %(exampleRoom)s)": "Atopa unha sala... (ex. %(exampleRoom)s)", + "Jump to first unread room.": "Vaite a primeira sala non lida.", + "Jump to first invite.": "Vai ó primeiro convite.", + "You have %(count)s unread notifications in a prior version of this room.|other": "Tes %(count)s notificacións non lidas nunha versión previa desta sala.", + "You have %(count)s unread notifications in a prior version of this room.|one": "Tes %(count)s notificacións non lidas nunha versión previa desta sala.", + "Your profile": "Perfil", + "Switch to light mode": "Cambiar a decorado claro", + "Switch to dark mode": "Cambiar a decorado escuro", + "Switch theme": "Cambiar decorado", + "Security & privacy": "Seguridade & privacidade", + "All settings": "Todos os axustes", + "Archived rooms": "Salas arquivadas", + "Feedback": "Comenta", + "Account settings": "Axustes da conta", + "Could not load user profile": "Non se cargou o perfil da usuaria", + "Verify this login": "Verifcar esta conexión", + "Session verified": "Sesión verificada" } From fa3cc28dccb06e31832c0faa96c9690a151dd222 Mon Sep 17 00:00:00 2001 From: Michael Albert Date: Thu, 25 Jun 2020 06:46:04 +0000 Subject: [PATCH 24/91] Translated using Weblate (German) Currently translated at 99.9% (2289 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index ee5eb489bc..20ed28be1d 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -2428,8 +2428,8 @@ "Set a room address to easily share your room with other people.": "Vergebe eine Raum-Adresse, um diesen Raum auf einfache Weise mit anderen Personen teilen zu können.", "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Du hast für diese Sitzung zuvor eine neuere Version von Riot verwendet. Um diese Version mit Ende-zu-Ende-Verschlüsselung wieder zu benutzen, musst du dich erst ab- und dann wieder anmelden.", "Delete the room address %(alias)s and remove %(name)s from the directory?": "Soll die Raum-Adresse %(alias)s gelöscht und %(name)s aus dem Raum-Verzeichnis entfernt werden?", - "Switch to light mode": "Zum Light Mode wechseln", - "Switch to dark mode": "Zum Dark Mode wechseln", + "Switch to light mode": "Zum hellen Thema wechseln", + "Switch to dark mode": "Zum dunklen Thema wechseln", "Switch theme": "Design ändern", "Security & privacy": "Sicherheit & Datenschutz", "All settings": "Alle Einstellungen", @@ -2470,5 +2470,11 @@ "Hey you. You're the best!": "Hey du. Du bist der Beste!", "Message layout": "Nachrichtenlayout", "Compact": "Kompakt", - "Modern": "Modern" + "Modern": "Modern", + "Enable IRC layout option in the appearance tab": "Option für IRC Layout in den Erscheinungsbild-Einstellungen aktivieren", + "Use a system font": "Verwende die System-Schriftart", + "System font name": "System-Schriftart", + "Customise your appearance": "Verändere das Erscheinungsbild", + "Appearance Settings only affect this Riot session.": "Einstellungen zum Erscheinungsbild wirken sich nur auf diese Riot Sitzung aus.", + "The authenticity of this encrypted message can't be guaranteed on this device.": "Die Echtheit dieser verschlüsselten Nachricht kann auf diesem Gerät nicht garantiert werden." } From 2ef2f76de9ab2d6864335b755413d5a3510f191b Mon Sep 17 00:00:00 2001 From: ziriSut Date: Thu, 25 Jun 2020 09:04:25 +0000 Subject: [PATCH 25/91] Translated using Weblate (Kabyle) Currently translated at 20.1% (460 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/kab/ --- src/i18n/strings/kab.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/kab.json b/src/i18n/strings/kab.json index 7180e35b1f..b7cf066a21 100644 --- a/src/i18n/strings/kab.json +++ b/src/i18n/strings/kab.json @@ -451,5 +451,15 @@ "Show typing notifications": "Azen ilɣa yettuszemlen", "Room Colour": "Initen n texxamt", "Show developer tools": "Sken ifecka n uneflay", - "Whether or not you're using the Richtext mode of the Rich Text Editor": "Ma yella tseqdaceḍ askar n Richtext n umaẓrag n uḍris anesbaɣur" + "Whether or not you're using the Richtext mode of the Rich Text Editor": "Ama tseqdaceḍ askar-inek.inem n umaẓrag n uḍris anesbaɣur neɣ xaṭi", + "Whether you're using Riot on a device where touch is the primary input mechanism": "Γas ma tseqdaceḍ Riot inek.inem deg yibenk anida asami d ametwi agejdan n unekcum", + "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Γas ma tseqdaceḍ tamahilt 'breadcrumbs' neɣ xaṭi(avatar nnig tebdert n texxamt)", + "Whether you're using Riot as an installed Progressive Web App": "Γas ma tseqdaceḍ Riot d asnas web n usfari i ibedden", + "The information being sent to us to help make Riot better includes:": "Talɣut i aɣ-d-yettwaznen ɣef tallalt n usnerni n Riot deg-s:", + "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Ma yili asebter-a degs talɣut tummilt, am texxamt neɣ aseqdac neɣ asulay n ugraw, isefka-a ad ttwakksen send ad ttwaznen i uqeddac.", + "Unable to load! Check your network connectivity and try again.": "Yegguma ad d-yali! Senqed tuqqna-inek.inem ɣer uzeṭṭa syen tεerḍeḍ tikkelt-nniḍen.", + "Failure to create room": "Timerna n texxamt ur teddi ara", + "If you cancel now, you won't complete verifying your other session.": "Ma yella teffɣeḍ tura, ur tessawaḍeḍ ara ad tesneqdeḍ akk tiɣimiyin-inek.inem.", + "If you cancel now, you won't complete your operation.": "Ma yella teffɣeḍ tura, tamhelt-ik.im ur tettemmed ara.", + "Show these rooms to non-members on the community page and room list?": "Sken tixxamin-a i wid ur nettekka ara deg usebter n temɣiwent d tebdert n texxamt?" } From 5045c0b135c481950b74d19cdca3c633b7c1387d Mon Sep 17 00:00:00 2001 From: XoseM Date: Thu, 25 Jun 2020 13:12:19 +0000 Subject: [PATCH 26/91] Translated using Weblate (Galician) Currently translated at 93.6% (2145 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 192d7744fa..8c60398efd 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -2205,5 +2205,22 @@ "Account settings": "Axustes da conta", "Could not load user profile": "Non se cargou o perfil da usuaria", "Verify this login": "Verifcar esta conexión", - "Session verified": "Sesión verificada" + "Session verified": "Sesión verificada", + "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Ao cambiar o contrasinal vas restablecer todas as chaves de cifrado das túas sesións, impedindo ler o historial de conversa. Configura a Copia de Apoio das Chaves ou exporta as chaves da sala desde outra sesión antes de restablecer o contrasinal.", + "Your Matrix account on %(serverName)s": "A túa conta Matrix en %(serverName)s", + "Your Matrix account on ": "A túa conta Matrix en ", + "No identity server is configured: add one in server settings to reset your password.": "Non hai un Servidor de Identidade configurado: engade un nos axustes para restablecer o contrasinal.", + "You have been logged out of all sessions and will no longer receive push notifications. To re-enable notifications, sign in again on each device.": "Desconectaches todas as sesións e non recibirás notificacións push. Para reactivalas, conéctate outra vez nos dispositivos.", + "Set a new password": "Novo contrasinal", + "Invalid homeserver discovery response": "Resposta de descubrimento do servidor non válida", + "Failed to get autodiscovery configuration from server": "Fallo ó obter a configuración de autodescubrimento desde o servidor", + "Invalid base_url for m.homeserver": "base_url non válido para m.homeserver", + "Homeserver URL does not appear to be a valid Matrix homeserver": "O URL do servidor non semella ser un servidor Matrix válido", + "Invalid identity server discovery response": "Resposta de descubrimento de identidade do servidor non válida", + "Invalid base_url for m.identity_server": "base_url para m.identity_server non válida", + "Identity server URL does not appear to be a valid identity server": "O URL do servidor de identidade non semella ser un servidor de identidade válido", + "This account has been deactivated.": "Esta conta foi desactivada.", + "Failed to perform homeserver discovery": "Fallo ao intentar o descubrimento do servidor", + "Syncing...": "Sincronizando...", + "Signing In...": "Conectando con..." } From d5cf4bcfa202d7550085dcde7df608dfbebe2edc Mon Sep 17 00:00:00 2001 From: XoseM Date: Thu, 25 Jun 2020 13:18:18 +0000 Subject: [PATCH 27/91] Translated using Weblate (Galician) Currently translated at 93.7% (2146 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 8c60398efd..9c430061a3 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -2222,5 +2222,6 @@ "This account has been deactivated.": "Esta conta foi desactivada.", "Failed to perform homeserver discovery": "Fallo ao intentar o descubrimento do servidor", "Syncing...": "Sincronizando...", - "Signing In...": "Conectando con..." + "Signing In...": "Conectando con...", + "If you've joined lots of rooms, this might take a while": "Se te uniches a moitas salas, esto podería levarnos un anaco" } From 4b952737dcd08988201d7a024604ab992b5d1de9 Mon Sep 17 00:00:00 2001 From: XoseM Date: Thu, 25 Jun 2020 13:18:32 +0000 Subject: [PATCH 28/91] Translated using Weblate (Galician) Currently translated at 93.7% (2147 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 9c430061a3..6844317dbe 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -2223,5 +2223,6 @@ "Failed to perform homeserver discovery": "Fallo ao intentar o descubrimento do servidor", "Syncing...": "Sincronizando...", "Signing In...": "Conectando con...", - "If you've joined lots of rooms, this might take a while": "Se te uniches a moitas salas, esto podería levarnos un anaco" + "If you've joined lots of rooms, this might take a while": "Se te uniches a moitas salas, esto podería levarnos un anaco", + "Create account": "Crea unha conta" } From b1b15248662026d79c5d6ca9678ddbfc0b9a77e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Fri, 26 Jun 2020 06:23:00 +0000 Subject: [PATCH 29/91] Translated using Weblate (French) Currently translated at 100.0% (2291 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index e6762eee32..fa66048da0 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2537,5 +2537,6 @@ "Modern": "Moderne", "Use a system font": "Utiliser une police du système", "System font name": "Nom de la police du système", - "The authenticity of this encrypted message can't be guaranteed on this device.": "L’authenticité de ce message chiffré ne peut pas être garantie sur cet appareil." + "The authenticity of this encrypted message can't be guaranteed on this device.": "L’authenticité de ce message chiffré ne peut pas être garantie sur cet appareil.", + "Use a more compact ‘Modern’ layout": "Utiliser une mise en page « moderne » plus compacte" } From 2aa791d20a75f3c2f7ebbc9380991574d6076a88 Mon Sep 17 00:00:00 2001 From: XoseM Date: Fri, 26 Jun 2020 07:07:23 +0000 Subject: [PATCH 30/91] Translated using Weblate (Galician) Currently translated at 98.1% (2247 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 103 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 102 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index 6844317dbe..e73d7e879e 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -2224,5 +2224,106 @@ "Syncing...": "Sincronizando...", "Signing In...": "Conectando con...", "If you've joined lots of rooms, this might take a while": "Se te uniches a moitas salas, esto podería levarnos un anaco", - "Create account": "Crea unha conta" + "Create account": "Crea unha conta", + "Use a more compact ‘Modern’ layout": "Usa o deseño compacto 'Moderno'", + "Unable to query for supported registration methods.": "Non se puido consultar os métodos de rexistro soportados.", + "Registration has been disabled on this homeserver.": "O rexistro está desactivado neste servidor.", + "Your new account (%(newAccountId)s) is registered, but you're already logged into a different account (%(loggedInUserId)s).": "A tú conta (%(newAccountId)s) foi rexistrada, pero estás conectada usando outra conta (%(loggedInUserId)s).", + "Continue with previous account": "Continúa coa conta anterior", + "Log in to your new account.": "Conecta usando a conta nova.", + "You can now close this window or log in to your new account.": "Podes pechar esta ventá ou conectar usando a conta nova.", + "Registration Successful": "Rexistro correcto", + "Create your account": "Crea a túa conta", + "Use Recovery Key or Passphrase": "Usa a Chave de recuperación ou Frase de paso", + "Use Recovery Key": "Usa chave de recuperación", + "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Confirma a túa identidade verificando esta conexión desde unha das outras sesións, permitindo así acceder ás mensaxes cifradas.", + "This requires the latest Riot on your other devices:": "Require a última versión de Riot nos outros dispositivos:", + "or another cross-signing capable Matrix client": "ou outro cliente Matrix que permita a sinatura-cruzada", + "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "A nova sesión foi verificada. Tes acceso ás mensaxes cifradas, e outras persoas verante como confiable.", + "Your new session is now verified. Other users will see it as trusted.": "A nova sesión foi verificada. Outras persoas verante como confiable.", + "Without completing security on this session, it won’t have access to encrypted messages.": "Sen non garantes a seguridade para esta sesión non poderá acceder a mensaxes cifradas.", + "Go Back": "Atrás", + "Failed to re-authenticate due to a homeserver problem": "Fallo ó reautenticar debido a un problema no servidor", + "Failed to re-authenticate": "Fallo na reautenticación", + "Regain access to your account and recover encryption keys stored in this session. Without them, you won’t be able to read all of your secure messages in any session.": "Recupera o acceso á túa conta e recupera as chaves de cifrado gardadas nesta sesión. Sen elas, non poderás ler as mensaxes seguras en calquera das sesións.", + "Forgotten your password?": "¿Esqueceches o contrasinal?", + "You're signed out": "Estás desconectada", + "Clear personal data": "Baleirar datos personais", + "Command Autocomplete": "Autocompletado de comandos", + "Community Autocomplete": "Autocompletado de comunidade", + "DuckDuckGo Results": "Resultados DuckDuckGo", + "Emoji Autocomplete": "Autocompletado emoticonas", + "Notification Autocomplete": "Autocompletado de notificacións", + "Room Autocomplete": "Autocompletado de Salas", + "User Autocomplete": "Autocompletados de Usuaria", + "Confirm encryption setup": "Confirma os axustes de cifrado", + "Click the button below to confirm setting up encryption.": "Preme no botón inferior para confirmar os axustes do cifrado.", + "Enter your account password to confirm the upgrade:": "Escribe o contrasinal para confirmar a actualización:", + "Restore your key backup to upgrade your encryption": "Restablece a copia das chaves para actualizar o cifrado", + "Restore": "Restablecer", + "You'll need to authenticate with the server to confirm the upgrade.": "Debes autenticarte no servidor para confirmar a actualización.", + "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Actualiza esta sesión para permitirlle que verifique as outras sesións, outorgándolles acceso ás mensaxes cifradas e marcándoas como confiables para outras usuarias.", + "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Establece unha frase de paso de recuperación para asegurar a información cifrada e recuperala se te desconectas. Esta frase debería ser diferente ó contrasinal da conta:", + "Enter a recovery passphrase": "Escribe a frase de paso de recuperación", + "Great! This recovery passphrase looks strong enough.": "Ben! Esta frase de paso de recuperación semella ser forte.", + "Back up encrypted message keys": "Fai copia das chaves das mensaxes cifradas", + "Set up with a recovery key": "Configura cunha chave de recuperación", + "That matches!": "Concorda!", + "Use a different passphrase?": "¿Usar unha frase de paso diferente?", + "That doesn't match.": "Non concorda.", + "Go back to set it again.": "Vai atrás e volve a escribila.", + "Enter your recovery passphrase a second time to confirm it.": "Escribe a frase de paso de recuperación por segunda vez para confirmala.", + "Confirm your recovery passphrase": "Confirma a frase de paso de recuperación", + "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "A chave de recuperación é unha rede de seguridade - podes usala para recuperar o acceso ás mensaxes cifradas se esqueces a frase de paso de recuperación.", + "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Garda unha copia nun lugar seguro, como un xestor de contrasinais ou nun lugar aínda máis seguro.", + "Your recovery key": "A chave de recuperación", + "Copy": "Copiar", + "Download": "Descargar", + "Your recovery key has been copied to your clipboard, paste it to:": "A chave de recuperación foi copiada no portapapeis, pégaa en:", + "Your recovery key is in your Downloads folder.": "A chave de recuperación está no teu cartafol de Descargas.", + "Print it and store it somewhere safe": "Imprímea e gárdaa nun lugar seguro", + "Save it on a USB key or backup drive": "Gárdaa nunha memoria USB ou disco duro", + "Copy it to your personal cloud storage": "Copiaa no almacenaxe personal na nube", + "Unable to query secret storage status": "Non se obtivo o estado do almacenaxe segredo", + "Retry": "Reintentar", + "You can now verify your other devices, and other users to keep your chats safe.": "Xa podes verificar os teus outros dispositivos e a outras usuarias para manter conversas seguras.", + "Upgrade your encryption": "Mellora o teu cifrado", + "Confirm recovery passphrase": "Confirma a frase de paso de recuperación", + "Make a copy of your recovery key": "Fai unha copia da túa chave de recuperación", + "You're done!": "Feito!", + "Unable to set up secret storage": "Non se configurou un almacenaxe segredo", + "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "Imos gardar unha copia cifrada das túas chaves no noso servidor. Asegura a copia cunha frase de paso de recuperación.", + "For maximum security, this should be different from your account password.": "Para máxima seguridade, esta debería ser diferente ó contrasinal da túa conta.", + "Please enter your recovery passphrase a second time to confirm.": "Escribe a frase de paso de recuperación outra vez para confirmala.", + "Repeat your recovery passphrase...": "Repite a frase de paso de recuperación...", + "Your keys are being backed up (the first backup could take a few minutes).": "As chaves estanse a copiar (a primeira copia podería tardar un anaco).", + "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another session.": "Se non configuras Recuperación de Mensaxes Seguras, non poderás restablecer o historial de mensaxes cifradas se te desconectas ou usas outra sesión.", + "Set up Secure Message Recovery": "Cofigurar Recuperación de Mensaxes Seguras", + "Secure your backup with a recovery passphrase": "Asegura a túa copia cunha frase de paso de recuperación", + "Starting backup...": "Iniciando a copia...", + "Success!": "Feito!", + "Create key backup": "Crear copia da chave", + "Unable to create key backup": "Non se creou a copia da chave", + "Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "Se non configuras a Recuperación de Mensaxes Seguras, perderás o acceso ó historial de mensaxes seguras cando te desconectes.", + "If you don't want to set this up now, you can later in Settings.": "Se non queres configurar esto agora, pódelo facer posteriormente nos Axustes.", + "Don't ask again": "Non preguntar outra vez", + "New Recovery Method": "Novo Método de Recuperación", + "A new recovery passphrase and key for Secure Messages have been detected.": "Detectouse un novo método de chave e frase de paso de recuperación para Mensaxes Seguras.", + "If you didn't set the new recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Se non configuras o novo método de recuperación, un atacante podería intentar o acceso á túa conta. Cambia inmediatamente o contrasinal da conta e configura un novo método de recuperación nos Axustes.", + "This session is encrypting history using the new recovery method.": "Esta sesión está cifrando o historial usando o novo método de recuperación.", + "Go to Settings": "Ir a Axustes", + "Set up Secure Messages": "Configurar Mensaxes Seguras", + "Recovery Method Removed": "Método de Recuperación eliminado", + "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Esta sesión detectou que a túa frase de paso de recuperación e chave para Mensaxes Seguras foron eliminadas.", + "If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.": "Se fixeches esto sen querer, podes configurar Mensaxes Seguras nesta sesión e volverá a cifrar as mensaxes da sesión cun novo método de recuperación.", + "If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Se non eliminaches o método de recuperación, un atacante podería estar a intentar acceder á túa conta. Cambia inmediatamente o contrasinal da conta e establece un novo método de recuperación nos Axustes.", + "If disabled, messages from encrypted rooms won't appear in search results.": "Se está desactivado, as mensaxes das salas cifradas non aparecerán nos resultados das buscas.", + "Disable": "Desactivar", + "Not currently indexing messages for any room.": "Non se están indexando as mensaxes de ningunha sala.", + "Currently indexing: %(currentRoom)s": "Indexando actualmente: %(currentRoom)s", + "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot está gardando de xeito seguro na caché local mensaxes cifradas para que aparezan nos resultados das buscas:", + "Space used:": "Espazo utilizado:", + "Indexed messages:": "Mensaxes indexadas:", + "Indexed rooms:": "Salas indexadas:", + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s de %(totalRooms)s" } From b16344582a45e91dfe6979ddc3bb7d65853b4f31 Mon Sep 17 00:00:00 2001 From: aWeinzierl Date: Fri, 26 Jun 2020 01:35:15 +0000 Subject: [PATCH 31/91] Translated using Weblate (Spanish) Currently translated at 89.4% (2048 of 2291 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/es/ --- src/i18n/strings/es.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 8004e5cd88..2b3cb7b1b9 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -1556,7 +1556,7 @@ "Sign In or Create Account": "Iniciar sesión o Crear una cuenta", "Use your account or create a new one to continue.": "Usa tu cuenta existente o crea una nueva para continuar.", "Create Account": "Crear cuenta", - "Sign In": "Registrarse", + "Sign In": "Iniciar sesión", "Sends a message as html, without interpreting it as markdown": "Envía un mensaje como html, sin interpretarlo en markdown", "Failed to set topic": "No se ha podido establecer el tema", "Command failed": "El comando falló", From c0ad857e5ca44d3f43ddba358a2e5ea480f29178 Mon Sep 17 00:00:00 2001 From: XoseM Date: Fri, 26 Jun 2020 11:39:48 +0000 Subject: [PATCH 32/91] Translated using Weblate (Galician) Currently translated at 100.0% (2292 of 2292 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 47 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index e73d7e879e..d88c3e95c6 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -2325,5 +2325,50 @@ "Space used:": "Espazo utilizado:", "Indexed messages:": "Mensaxes indexadas:", "Indexed rooms:": "Salas indexadas:", - "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s de %(totalRooms)s" + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s de %(totalRooms)s", + "New spinner design": "Novo deseño da roda", + "Message downloading sleep time(ms)": "Tempo de espera da mensaxe de descarga(ms)", + "Navigation": "Navegación", + "Calls": "Chamadas", + "Room List": "Lista de Salas", + "Autocomplete": "Autocompletado", + "Alt": "Alt", + "Alt Gr": "Alt Gr", + "Shift": "Maiús.", + "Super": "Super", + "Ctrl": "Ctrl", + "Toggle Bold": "Activa Resaltar", + "Toggle Italics": "Activa Cursiva", + "Toggle Quote": "Activa Citación", + "New line": "Nova liña", + "Navigate recent messages to edit": "Mira nas mensaxes recentes para editar", + "Jump to start/end of the composer": "Vai ó inicio/fin no editor", + "Navigate composer history": "Vai ó historial do editor", + "Cancel replying to a message": "Cancelar a resposta a mensaxe", + "Toggle microphone mute": "Acalar micrófono", + "Toggle video on/off": "Activar vídeo on/off", + "Scroll up/down in the timeline": "Desprazarse arriba/abaixo na cronoloxía", + "Dismiss read marker and jump to bottom": "Ignorar marcador de lectura e ir ó final", + "Jump to oldest unread message": "Ir á mensaxe máis antiga non lida", + "Upload a file": "Subir ficheiro", + "Jump to room search": "Ir a busca na sala", + "Navigate up/down in the room list": "Ir arriba/abaixo na lista de salas", + "Select room from the room list": "Escoller sala da lista de salas", + "Collapse room list section": "Contraer a sección de lista de salas", + "Expand room list section": "Expandir a sección da lista de salas", + "Previous/next unread room or DM": "Anterior/seguinte para salas non lidas ou MD", + "Previous/next room or DM": "Anterior/seguinte para sala ou MD", + "Toggle the top left menu": "Activar o menú superior esquerdo", + "Close dialog or context menu": "Pechar o diálogo ou menú contextual", + "Activate selected button": "Activar o botón seleccionado", + "Toggle right panel": "Activar panel dereito", + "Toggle this dialog": "Activar este diálogo", + "Move autocomplete selection up/down": "Mover selección autocompletado arriba/abaixo", + "Cancel autocomplete": "Cancelar autocompletado", + "Page Up": "Páxina superior", + "Page Down": "Páxina inferior", + "Esc": "Esc", + "Enter": "Intro", + "Space": "Espazo", + "End": "Fin" } From d53535c0892b4bb55e7a4b27be6855fe5d3bf9c7 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Sun, 28 Jun 2020 03:35:39 +0000 Subject: [PATCH 33/91] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2344 of 2344 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 58 ++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 325f657af1..9384e8846a 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2536,5 +2536,61 @@ "Modern": "現代", "Use a system font": "使用系統字型", "System font name": "系統字型名稱", - "The authenticity of this encrypted message can't be guaranteed on this device.": "無法在此裝置上保證加密訊息的真實性。" + "The authenticity of this encrypted message can't be guaranteed on this device.": "無法在此裝置上保證加密訊息的真實性。", + "You joined the call": "您加入了通話", + "%(senderName)s joined the call": "%(senderName)s 加入了通話", + "Call in progress": "通話進行中", + "You left the call": "您離開了通話", + "%(senderName)s left the call": "%(senderName)s 離開了通話", + "Call ended": "通話結束", + "You started a call": "您開始了通話", + "%(senderName)s started a call": "%(senderName)s 開始了通話", + "Waiting for answer": "正在等待回應", + "%(senderName)s is calling": "%(senderName)s 正在通話", + "You created the room": "您建立了聊天室", + "%(senderName)s created the room": "%(senderName)s 建立了聊天室", + "You made the chat encrypted": "您讓聊天加密", + "%(senderName)s made the chat encrypted": "%(senderName)s 讓聊天加密", + "You made history visible to new members": "您讓歷史紀錄對新成員可見", + "%(senderName)s made history visible to new members": "%(senderName)s 讓歷史紀錄對新成員可見", + "You made history visible to anyone": "您讓歷史紀錄對所有人可見", + "%(senderName)s made history visible to anyone": "%(senderName)s 讓歷史紀錄對所有人可見", + "You made history visible to future members": "您讓歷史紀錄對未來成員可見", + "%(senderName)s made history visible to future members": "%(senderName)s 讓歷史紀錄對未來成員可見", + "You were invited": "您被邀請", + "%(targetName)s was invited": "%(targetName)s 被邀請", + "You left": "您離開", + "%(targetName)s left": "%(targetName)s 離開", + "You were kicked (%(reason)s)": "您被踢除(%(reason)s)", + "%(targetName)s was kicked (%(reason)s)": "%(targetName)s 被踢除(%(reason)s)", + "You were kicked": "您被踢除", + "%(targetName)s was kicked": "%(targetName)s 被踢除", + "You rejected the invite": "您回絕了邀請", + "%(targetName)s rejected the invite": "%(targetName)s 回絕了邀請", + "You were uninvited": "您被取消邀請", + "%(targetName)s was uninvited": "%(targetName)s 被取消邀請", + "You were banned (%(reason)s)": "您被封鎖(%(reason)s)", + "%(targetName)s was banned (%(reason)s)": "%(targetName)s 被封鎖(%(reason)s)", + "You were banned": "您被封鎖", + "%(targetName)s was banned": "%(targetName)s 被封鎖", + "You joined": "您加入", + "%(targetName)s joined": "%(targetName)s 加入", + "You changed your name": "您變更了您的名稱", + "%(targetName)s changed their name": "%(targetName)s 變更了他們的名稱", + "You changed your avatar": "您變更了您的大頭貼", + "%(targetName)s changed their avatar": "%(targetName)s 變更了他們的大頭貼", + "%(senderName)s %(emote)s": "%(senderName)s %(emote)s", + "%(senderName)s: %(message)s": "%(senderName)s: %(message)s", + "You changed the room name": "您變更了聊天室名稱", + "%(senderName)s changed the room name": "%(senderName)s 變更了聊天室名稱", + "%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s", + "%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s", + "You uninvited %(targetName)s": "您取消邀請了 %(targetName)s", + "%(senderName)s uninvited %(targetName)s": "%(senderName)s 取消邀請了 %(targetName)s", + "You invited %(targetName)s": "您邀請了 %(targetName)s", + "%(senderName)s invited %(targetName)s": "%(senderName)s 邀請了 %(targetName)s", + "You changed the room topic": "您變更了聊天室主題", + "%(senderName)s changed the room topic": "%(senderName)s 變更了聊天室主題", + "New spinner design": "新的微調器設計", + "Use a more compact ‘Modern’ layout": "使用更簡潔的「現代」佈局" } From 2f5fdd045bdd03fa340849d74b644b52082066fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Fri, 26 Jun 2020 16:26:31 +0000 Subject: [PATCH 34/91] Translated using Weblate (Estonian) Currently translated at 73.8% (1731 of 2344 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 130 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 129 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 32c069f6c1..7f029f9328 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -1685,5 +1685,133 @@ "All settings": "Kõik seadistused", "Archived rooms": "Arhiveeritud jututoad", "Feedback": "Tagasiside", - "Account settings": "Kasutajakonto seadistused" + "Account settings": "Kasutajakonto seadistused", + "Use Single Sign On to continue": "Jätkamiseks kasuta ühekordset sisselogimist", + "Confirm adding this email address by using Single Sign On to prove your identity.": "Kinnita selle e-posti aadressi lisamine kasutades ühekordset sisselogimist oma isiku tuvastamiseks.", + "Single Sign On": "SSO Ühekordne sisselogimine", + "Confirm adding email": "Kinnita e-posti aadressi lisamine", + "Click the button below to confirm adding this email address.": "Klõpsi järgnevat nuppu e-posti aadressi lisamise kinnitamiseks.", + "Confirm adding this phone number by using Single Sign On to prove your identity.": "Kinnita selle telefoninumbri lisamine kasutades ühekordset sisselogimist oma isiku tuvastamiseks.", + "Confirm adding phone number": "Kinnita telefoninumbri lisamine", + "Click the button below to confirm adding this phone number.": "Klõpsi järgnevat nuppu telefoninumbri lisamise kinnitamiseks.", + "Add Phone Number": "Lisa telefoninumber", + "Default": "Tavakasutaja", + "Restricted": "Piiratud õigustega kasutaja", + "Moderator": "Moderaator", + "Admin": "Peakasutaja", + "Custom (%(level)s)": "Kohandatud õigused (%(level)s)", + "Failed to invite": "Kutse saatmine ei õnnestunud", + "Operation failed": "Toiming ei õnnestunud", + "Failed to invite users to the room:": "Kasutajate kutsumine jututuppa ei õnnestunud:", + "Failed to invite the following users to the %(roomName)s room:": "Järgnevate kasutajate kutsumine %(roomName)s jututuppa ei õnnestunud:", + "You need to be logged in.": "Sa peaksid olema sisse loginud.", + "You need to be able to invite users to do that.": "Selle tegevuse jaoks peaks sul olema õigus teistele kasutajatele kutse saatmiseks.", + "Unable to create widget.": "Vidina loomine ei õnnestunud.", + "Missing roomId.": "Jututoa tunnus ehk roomId on puudu.", + "Failed to send request.": "Päringu saatmine ei õnnestunud.", + "This room is not recognised.": "Seda jututuba ei õnnestu ära tunda.", + "Power level must be positive integer.": "Õiguste tase peab olema positiivne täisarv.", + "You are not in this room.": "Sa ei asu selles jututoas.", + "You do not have permission to do that in this room.": "Sinul pole selle toimingu jaoks selles jututoas õigusi.", + "Missing room_id in request": "Päringus puudub jututoa tunnus ehk room_id", + "Room %(roomId)s not visible": "Jututuba %(roomId)s ei ole nähtav", + "Missing user_id in request": "Päringus puudub kasutaja tunnus ehk user_id", + "Messages": "Sõnumid", + "Actions": "Tegevused", + "Other": "Muud", + "Usage": "Kasutus", + "Prepends ¯\\_(ツ)_/¯ to a plain-text message": "Lisa ¯\\_(ツ)_/¯ smaili vormindamata teksti algusesse", + "Sends a message as plain text, without interpreting it as markdown": "Saadab sõnumi vormindamata tekstina ega tõlgenda seda markdown-vormindusena", + "Sends a message as html, without interpreting it as markdown": "Saadab sõnumi html'ina ega tõlgenda seda markdown-vormindusena", + "/ddg is not a command": "/ddg ei ole käsk", + "You joined the call": "Sina liitusid kõnega", + "%(senderName)s joined the call": "%(senderName)s liitus kõnega", + "Call in progress": "Kõne on pooleli", + "You left the call": "Sa lahkusid kõnest", + "%(senderName)s left the call": "%(senderName)s lahkus kõnest", + "Call ended": "Kõne lõppes", + "You started a call": "Sa alustasid kõnet", + "%(senderName)s started a call": "%(senderName)s alustas kõnet", + "Waiting for answer": "Ootan kõnele vastamist", + "%(senderName)s is calling": "%(senderName)s helistab", + "You created the room": "Sa lõid jututoa", + "%(senderName)s created the room": "%(senderName)s lõi jututoa", + "You made the chat encrypted": "Sina võtsid vestlusel kasutuse krüptimise", + "%(senderName)s made the chat encrypted": "%(senderName)s võttis vestlusel kasutuse krüptimise", + "You made history visible to new members": "Sina tegid jututoa ajaloo loetavaks uuetele liikmetele", + "%(senderName)s made history visible to new members": "%(senderName)s tegi jututoa ajaloo loetavaks uuetele liikmetele", + "You made history visible to anyone": "Sina tegi jututoa ajaloo loetavaks kõikidele", + "%(senderName)s made history visible to anyone": "%(senderName)s tegi jututoa ajaloo loetavaks kõikidele", + "You made history visible to future members": "Sina tegid jututoa ajaloo loetavaks tulevastele liikmetele", + "%(senderName)s made history visible to future members": "%(senderName)s tegi jututoa ajaloo loetavaks tulevastele liikmetele", + "You were invited": "Sina said kutse", + "%(targetName)s was invited": "%(targetName)s sai kutse", + "You left": "Sina lahkusid", + "%(targetName)s left": "%(targetName)s lahkus", + "You were kicked (%(reason)s)": "Sind müksati jututoast välja (%(reason)s)", + "%(targetName)s was kicked (%(reason)s)": "%(targetName)s müksati jututoast välja (%(reason)s)", + "You were kicked": "Sind müksati jututoast välja", + "%(targetName)s was kicked": "%(targetName)s müksati jututoast välja", + "You rejected the invite": "Sa lükkasid kutse tagasi", + "%(targetName)s rejected the invite": "%(targetName)s lükkas kutse tagasi", + "You were uninvited": "Sinult võeti kutse tagasi", + "%(targetName)s was uninvited": "%(targetName)s'lt võeti kutse tagasi", + "You joined": "Sina liitusid", + "%(targetName)s joined": "%(targetName)s liitus", + "You changed your name": "Sa muutsid oma nime", + "%(targetName)s changed their name": "%(targetName)s muutis oma nime", + "You changed your avatar": "Sa muutsid oma tunnuspilti", + "%(targetName)s changed their avatar": "%(targetName)s muutis oma tunnuspilti", + "%(senderName)s %(emote)s": "%(senderName)s %(emote)s", + "%(senderName)s: %(message)s": "%(senderName)s: %(message)s", + "You changed the room name": "Sina muutsid jututoa nime", + "%(senderName)s changed the room name": "%(senderName)s muutis jututoa nime", + "%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s", + "%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s", + "You uninvited %(targetName)s": "Sina võtsid tagasi kutse kasutajalt %(targetName)s", + "%(senderName)s uninvited %(targetName)s": "%(senderName)s võttis kutse tagasi kasutajalt %(targetName)s", + "You invited %(targetName)s": "Sina kutsusid kasutajat %(targetName)s", + "%(senderName)s invited %(targetName)s": "%(senderName)s kutsus kasutajat %(targetName)s", + "You changed the room topic": "Sina muutsid jututoa teemat", + "%(senderName)s changed the room topic": "%(senderName)s muutis jututoa teemat", + "Use the improved room list (will refresh to apply changes)": "Kasuta parandaatud jututubade loendit (muudatuse jõustamine eeldab andmete uuesti laadimist)", + "Enable IRC layout option in the appearance tab": "Näita välimuse seadistustes IRC-tüüpi paigutuse valikut", + "Use custom size": "Kasuta kohandatud suurust", + "Use a more compact ‘Modern’ layout": "Kasuta veel kompaktsemat \"moodsat\" paigutust", + "Cross-signing public keys:": "Avalikud võtmed risttunnustamise jaoks:", + "in memory": "on mälus", + "not found": "pole leitavad", + "Delete %(count)s sessions|other": "Kustuta %(count)s sessiooni", + "Delete %(count)s sessions|one": "Kustuta %(count)s sessioon", + "ID": "Kasutaja ID", + "Public Name": "Avalik nimi", + "Last seen": "Viimati nähtud", + "Manage": "Halda", + "Enable": "Võta kasutusele", + "Error saving email notification preferences": "E-posti teel saadetavate teavituste eelistuste salvestamisel tekkis viga", + "An error occurred whilst saving your email notification preferences.": "E-posti teel saadetavate teavituste eelistuste salvestamisel tekkis viga.", + "Keywords": "Märksõnad", + "Enter keywords separated by a comma:": "Sisesta märksõnad ja kasuta eraldajaks koma:", + "Failed to change settings": "Seadistuste muutmine ei õnnestunud", + "Can't update user notification settings": "Kasutaja teavistuste eelistusi ei õnnestunud uuendada", + "Failed to update keywords": "Märksõnade uuendamine ei õnnestunud", + "Messages containing keywords": "Sõnumid, mis sisaldavad märksõnu", + "Notify me for anything else": "Teavita mind kõigest muust", + "Enable notifications for this account": "Võta sellel kasutajakontol kasutusele teavitused", + "Clear notifications": "Eemalda kõik teavitused", + "All notifications are currently disabled for all targets.": "Kõik teavituste liigid on välja lülitatud.", + "Add an email address to configure email notifications": "E-posti teel saadetavate teavituste seadistamiseks lisa e-posti aadress", + "Enable email notifications": "Võta kasutusele e-posti teel saadetavad teavitused", + "Notifications on the following keywords follow rules which can’t be displayed here:": "Alljärgnevate märksõnadega seotud teavitused järgivad reegleid, misa siin ei saa kuvada:", + "Disinvite this user from community?": "Kas võtame sellelt kasutajalt tagasi kutse kogukonnaga liitumiseks?", + "Failed to withdraw invitation": "Kutse tühistamine ei õnnestunud", + "%(role)s in %(roomName)s": "%(role)s jututoas %(roomName)s", + "Failed to change power level": "Õiguste muutmine ei õnnestunud", + "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Sa ei saa seda muudatust hiljem tagasi pöörata, sest annad teisele kasutajale samad õigused, mis sinul on.", + "Deactivate user?": "Kas blokeerime kasutaja?", + "Deactivating this user will log them out and prevent them from logging back in. Additionally, they will leave all the rooms they are in. This action cannot be reversed. Are you sure you want to deactivate this user?": "Kasutaja blokeerimisel logitakse ta automaatselt välja ning ei lubata enam sisse logida. Lisaks lahkub ta kõikidest jututubadest, mille liige ta parasjagu on. Seda tegevust ei saa tagasi pöörata. Kas sa oled ikka kindel, et soovid selle kasutaja blokeerida?", + "Deactivate user": "Blokeeri kasutaja", + "Failed to deactivate user": "Kasutaja blokeerimine ei õnnestunud", + "This client does not support end-to-end encryption.": "See klient ei toeta läbivat krüptimist.", + "Security": "Turvalisus" } From 4acf87af0b3d5f32f514052e6e0499c27e46035c Mon Sep 17 00:00:00 2001 From: Tuomas Hietala Date: Fri, 26 Jun 2020 16:35:50 +0000 Subject: [PATCH 35/91] Translated using Weblate (Finnish) Currently translated at 94.8% (2222 of 2344 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fi/ --- src/i18n/strings/fi.json | 52 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index 1157daa260..b10366bbc9 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -2367,5 +2367,55 @@ "Use Recovery Key or Passphrase": "Käytä palautusavainta tai salalausetta", "Use Recovery Key": "Käytä palautusavainta", "Create a Recovery Key": "Luo palautusavain", - "Upgrade your Recovery Key": "Päivitä palautusavaimesi" + "Upgrade your Recovery Key": "Päivitä palautusavaimesi", + "You joined the call": "Liityit puheluun", + "%(senderName)s joined the call": "%(senderName)s liittyi puheluun", + "Call in progress": "Puhelu käynnissä", + "You left the call": "Poistuit puhelusta", + "%(senderName)s left the call": "%(senderName)s poistui puhelusta", + "Call ended": "Puhelu päättyi", + "You started a call": "Aloitit puhelun", + "%(senderName)s started a call": "%(senderName)s aloitti puhelun", + "Waiting for answer": "Odotetaan vastausta", + "%(senderName)s is calling": "%(senderName)s soittaa", + "You created the room": "Loit huoneen", + "%(senderName)s created the room": "%(senderName)s loi huoneen", + "You made the chat encrypted": "Otit salauksen käyttöön keskustelussa", + "%(senderName)s made the chat encrypted": "%(senderName)s otti salauksen käyttöön keskustelussa", + "You made history visible to new members": "Teit historiasta näkyvän uusille jäsenille", + "%(senderName)s made history visible to new members": "%(senderName)s teki historiasta näkyvän uusille jäsenille", + "You made history visible to anyone": "Teit historiasta näkyvän kaikille", + "%(senderName)s made history visible to anyone": "%(senderName)s teki historiasta näkyvän kaikille", + "You made history visible to future members": "Teit historiasta näkyvän tuleville jäsenille", + "%(senderName)s made history visible to future members": "%(senderName)s teki historiasta näkyvän tuleville jäsenille", + "You were invited": "Sinut kutsuttiin", + "%(targetName)s was invited": "%(targetName)s kutsuttiin", + "You left": "Poistuit", + "%(targetName)s left": "%(targetName)s poistui", + "You rejected the invite": "Hylkäsit kutsun", + "%(targetName)s rejected the invite": "%(targetName)s hylkäsi kutsun", + "You were banned (%(reason)s)": "Sait porttikiellon (%(reason)s)", + "%(targetName)s was banned (%(reason)s)": "%(targetName)s sai porttikiellon (%(reason)s)", + "You were banned": "Sait porttikiellon", + "%(targetName)s was banned": "%(targetName)s sai porttikiellon", + "You joined": "Liityit", + "%(targetName)s joined": "%(targetName)s liittyi", + "You changed your name": "Vaihdoit nimeäsi", + "%(targetName)s changed their name": "%(targetName)s vaihtoi nimeään", + "%(senderName)s: %(message)s": "%(senderName)s: %(message)s", + "You changed the room name": "Vaihdoit huoneen nimeä", + "%(senderName)s changed the room name": "%(senderName)s vaihtoi huoneen nimeä", + "%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s", + "%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s", + "You invited %(targetName)s": "Kutsuit käyttäjän %(targetName)s", + "%(senderName)s invited %(targetName)s": "%(senderName)s kutsui käyttäjän %(targetName)s", + "You changed the room topic": "Vaihdoit huoneen aiheen", + "%(senderName)s changed the room topic": "%(senderName)s vaihtoi huoneen aiheen", + "Use custom size": "Käytä mukautettua kokoa", + "Use a more compact ‘Modern’ layout": "Käytä tiiviimpää 'modernia' asettelua", + "Use a system font": "Käytä järjestelmän fonttia", + "System font name": "Järjestelmän fontin nimi", + "Message layout": "Viestiasettelu", + "Compact": "Tiivis", + "Modern": "Moderni" } From c16f8aaada2d7a83e0649af1a0efd3ce4db54bd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Sat, 27 Jun 2020 10:42:51 +0000 Subject: [PATCH 36/91] Translated using Weblate (French) Currently translated at 100.0% (2344 of 2344 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 57 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index fa66048da0..f781df55e2 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2538,5 +2538,60 @@ "Use a system font": "Utiliser une police du système", "System font name": "Nom de la police du système", "The authenticity of this encrypted message can't be guaranteed on this device.": "L’authenticité de ce message chiffré ne peut pas être garantie sur cet appareil.", - "Use a more compact ‘Modern’ layout": "Utiliser une mise en page « moderne » plus compacte" + "Use a more compact ‘Modern’ layout": "Utiliser une mise en page « moderne » plus compacte", + "You joined the call": "Vous avez rejoint l’appel", + "%(senderName)s joined the call": "%(senderName)s a rejoint l’appel", + "Call in progress": "Appel en cours", + "You left the call": "Vous avez quitté l’appel", + "%(senderName)s left the call": "%(senderName)s a quitté l’appel", + "Call ended": "Appel terminé", + "You started a call": "Vous avez démarré un appel", + "%(senderName)s started a call": "%(senderName)s a démarré un appel", + "Waiting for answer": "En attente d’une réponse", + "%(senderName)s is calling": "%(senderName)s appelle", + "You created the room": "Vous avez créé le salon", + "%(senderName)s created the room": "%(senderName)s a créé le salon", + "You made the chat encrypted": "Vous avez activé le chiffrement de la discussion", + "%(senderName)s made the chat encrypted": "%(senderName)s a activé le chiffrement de la discussion", + "You made history visible to new members": "Vous avez rendu l’historique visible aux nouveaux membres", + "%(senderName)s made history visible to new members": "%(senderName)s a rendu l’historique visible aux nouveaux membres", + "You made history visible to anyone": "Vous avez rendu l’historique visible à tout le monde", + "%(senderName)s made history visible to anyone": "%(senderName)s a rendu l’historique visible à tout le monde", + "You made history visible to future members": "Vous avez rendu l’historique visible aux futurs membres", + "%(senderName)s made history visible to future members": "%(senderName)s a rendu l’historique visible aux futurs membres", + "You were invited": "Vous avez été invité", + "%(targetName)s was invited": "%(targetName)s a été invité·e", + "You left": "Vous êtes parti·e", + "%(targetName)s left": "%(targetName)s est parti·e", + "You were kicked (%(reason)s)": "Vous avez été expulsé·e (%(reason)s)", + "%(targetName)s was kicked (%(reason)s)": "%(targetName)s a été expulsé·e (%(reason)s)", + "You were kicked": "Vous avez été expulsé·e", + "%(targetName)s was kicked": "%(targetName)s a été expulsé·e", + "You rejected the invite": "Vous avez rejeté l’invitation", + "%(targetName)s rejected the invite": "%(targetName)s a rejeté l’invitation", + "You were uninvited": "Votre invitation a été révoquée", + "%(targetName)s was uninvited": "L’invitation de %(targetName)s a été révoquée", + "You were banned (%(reason)s)": "Vous avez été banni·e (%(reason)s)", + "%(targetName)s was banned (%(reason)s)": "%(targetName)s a été banni·e (%(reason)s)", + "You were banned": "Vous avez été banni·e", + "%(targetName)s was banned": "%(targetName)s a été banni·e", + "You joined": "Vous avez rejoint le salon", + "%(targetName)s joined": "%(targetName)s a rejoint le salon", + "You changed your name": "Vous avez changé votre nom", + "%(targetName)s changed their name": "%(targetName)s a changé son nom", + "You changed your avatar": "Vous avez changé votre avatar", + "%(targetName)s changed their avatar": "%(targetName)s a changé son avatar", + "%(senderName)s %(emote)s": "%(senderName)s %(emote)s", + "%(senderName)s: %(message)s": "%(senderName)s : %(message)s", + "You changed the room name": "Vous avez changé le nom du salon", + "%(senderName)s changed the room name": "%(senderName)s a changé le nom du salon", + "%(senderName)s: %(reaction)s": "%(senderName)s : %(reaction)s", + "%(senderName)s: %(stickerName)s": "%(senderName)s : %(stickerName)s", + "You uninvited %(targetName)s": "Vous avez révoqué l’invitation de %(targetName)s", + "%(senderName)s uninvited %(targetName)s": "%(senderName)s a révoqué l’invitation de %(targetName)s", + "You invited %(targetName)s": "Vous avez invité %(targetName)s", + "%(senderName)s invited %(targetName)s": "%(senderName)s a invité %(targetName)s", + "You changed the room topic": "Vous avez changé le sujet du salon", + "%(senderName)s changed the room topic": "%(senderName)s a changé le sujet du salon", + "New spinner design": "Nouveau design du spinner" } From 11bc33853cef51dbd186b9e58cefdaf544e9d8a2 Mon Sep 17 00:00:00 2001 From: XoseM Date: Fri, 26 Jun 2020 13:50:42 +0000 Subject: [PATCH 37/91] Translated using Weblate (Galician) Currently translated at 100.0% (2344 of 2344 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 148 ++++++++++++++++++++++++++------------- 1 file changed, 101 insertions(+), 47 deletions(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index d88c3e95c6..b0b61e3d40 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -1,14 +1,14 @@ { - "This email address is already in use": "Xa se está a usar este correo", + "This email address is already in use": "Xa se está a usar este email", "This phone number is already in use": "Xa se está a usar este teléfono", "Failed to verify email address: make sure you clicked the link in the email": "Fallo na verificación do enderezo de correo: asegúrese de ter picado na ligazón do correo", - "The remote side failed to pick up": "O interlocutor non respondeu", + "The remote side failed to pick up": "O correspondente non respondeu", "Unable to capture screen": "Non se puido capturar a pantalla", "Existing Call": "Rexistro de chamadas", - "You are already in a call.": "Xa está nunha chamada.", + "You are already in a call.": "Xa estás nunha chamada.", "VoIP is unsupported": "Sen soporte para VoIP", - "You cannot place VoIP calls in this browser.": "Non pode establecer chamadas VoIP neste navegador.", - "You cannot place a call with yourself.": "Non pode facer unha chamada a si mesmo.", + "You cannot place VoIP calls in this browser.": "Non poden establecer chamadas VoIP neste navegador.", + "You cannot place a call with yourself.": "Non podes facer unha chamada a ti mesma.", "Warning!": "Aviso!", "Call Failed": "Fallou a chamada", "Review Devices": "Revisar dispositivos", @@ -51,9 +51,9 @@ "Add rooms to the community": "Engadir salas á comunidade", "Room name or alias": "Nome da sala ou alcume", "Add to community": "Engadir á comunidade", - "Failed to invite the following users to %(groupId)s:": "Fallo ao convidar os seguintes usuarios a %(groupId)s:", - "Failed to invite users to community": "Houbo un fallo convidando usuarios á comunidade", - "Failed to invite users to %(groupId)s": "Houbo un fallo convidando usuarios a %(groupId)s", + "Failed to invite the following users to %(groupId)s:": "Fallo ao convidar ás seguintes usuarias a %(groupId)s:", + "Failed to invite users to community": "Houbo un fallo convidando usuarias á comunidade", + "Failed to invite users to %(groupId)s": "Houbo un fallo convidando usuarias a %(groupId)s", "Failed to add the following rooms to %(groupId)s:": "Fallo ao engadir as seguintes salas a %(groupId)s:", "Riot does not have permission to send you notifications - please check your browser settings": "Riot non ten permiso para enviarlle notificacións: comprobe os axustes do navegador", "Riot was not given permission to send notifications - please try again": "Riot non ten permiso para enviar notificacións: inténteo de novo", @@ -67,7 +67,7 @@ "Start a chat": "Iniciar unha conversa", "Operation failed": "Fallou a operación", "Failed to invite": "Fallou o convite", - "Failed to invite the following users to the %(roomName)s room:": "Houbo un fallo convidando os seguintes usuarios á sala %(roomName)s:", + "Failed to invite the following users to the %(roomName)s room:": "Houbo un fallo convidando as seguintes usuarias á sala %(roomName)s:", "You need to be logged in.": "Precisa estar conectada.", "You need to be able to invite users to do that.": "Precisa autorización para convidar a outros usuarias para poder facer iso.", "Unable to create widget.": "Non se puido crear o trebello.", @@ -85,7 +85,7 @@ "Unrecognised room alias:": "Alcumes de sala non recoñecidos:", "Ignored user": "Usuaria ignorada", "You are now ignoring %(userId)s": "Agora está a ignorar %(userId)s", - "Unignored user": "Usuarios non ignorados", + "Unignored user": "Usuarias non ignoradas", "You are no longer ignoring %(userId)s": "Xa non está a ignorar a %(userId)s", "Verified key": "Chave verificada", "Reason": "Razón", @@ -147,7 +147,7 @@ "Enable automatic language detection for syntax highlighting": "Activar a detección automática de idioma para o resalte da sintaxe", "Automatically replace plain text Emoji": "Substituír automaticamente Emoji en texto plano", "Enable inline URL previews by default": "Activar por defecto as vistas previas en liña de URL", - "Enable URL previews for this room (only affects you)": "Activar avista previa de URL nesta sala (só lle afecta a vostede)", + "Enable URL previews for this room (only affects you)": "Activar avista previa de URL nesta sala (só che afesta a ti)", "Enable URL previews by default for participants in this room": "Activar a vista previa de URL por defecto para as participantes nesta sala", "Room Colour": "Cor da sala", "Active call (%(roomName)s)": "Chamada activa (%(roomName)s)", @@ -200,15 +200,15 @@ "device id: ": "id dispositivo: ", "Disinvite": "Retirar convite", "Kick": "Expulsar", - "Disinvite this user?": "Retirar convite a este usuario?", - "Kick this user?": "Expulsar este usuario?", + "Disinvite this user?": "Retirar convite a esta usuaria?", + "Kick this user?": "Expulsar esta usuaria?", "Failed to kick": "Fallo ao expulsar", "Unban": "Non bloquear", "Ban": "Bloquear", - "Unban this user?": "Non bloquear este usuario?", - "Ban this user?": "Bloquear a este usuario?", - "Failed to ban user": "Fallo ao bloquear usuario", - "Failed to mute user": "Fallo ao acalar usuario", + "Unban this user?": "¿Non bloquear esta usuaria?", + "Ban this user?": "¿Bloquear a esta usuaria?", + "Failed to ban user": "Fallo ao bloquear usuaria", + "Failed to mute user": "Fallo ó silenciar usuaria", "Failed to toggle moderator status": "Fallo ao mudar a estado de moderador", "Failed to change power level": "Fallo ao cambiar o nivel de permisos", "Are you sure?": "Está segura?", @@ -288,9 +288,9 @@ "Banned by %(displayName)s": "Non aceptado por %(displayName)s", "unknown error code": "código de fallo descoñecido", "Failed to forget room %(errCode)s": "Fallo ao esquecer sala %(errCode)s", - "Privileged Users": "Usuarios con privilexios", - "No users have specific privileges in this room": "Non hai usuarios con privilexios específicos nesta sala", - "Banned users": "Usuarios excluídos", + "Privileged Users": "Usuarias con privilexios", + "No users have specific privileges in this room": "Non hai usuarias con privilexios específicos nesta sala", + "Banned users": "Usuarias excluídas", "This room is not accessible by remote Matrix servers": "Esta sala non é accesible por servidores Matrix remotos", "Leave room": "Deixar a sala", "Favourite": "Favorita", @@ -378,9 +378,9 @@ "You're not currently a member of any communities.": "Ate o momento non é membro de ningunha comunidade.", "Unknown Address": "Enderezo descoñecido", "Allow": "Permitir", - "Delete Widget": "Eliminar trebello", - "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Quitando un trebello elimínao para todas os usuarios desta sala. Está seguro de querer eliminar este trebello?", - "Delete widget": "Eliminar trebello", + "Delete Widget": "Eliminar widget", + "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Quitando un trebello elimínalo para todas as usuarias desta sala. ¿tes certeza de querer eliminar este widget?", + "Delete widget": "Eliminar widget", "Minimize apps": "Minimizar apps", "Edit": "Editar", "Create new room": "Crear unha nova sala", @@ -459,7 +459,7 @@ "Try using one of the following valid address types: %(validTypesList)s.": "Intentar utilizar algún dos seguintes tipos de enderezo válidos: %(validTypesList)s.", "You have entered an invalid address.": "Introduciu un enderezo non válido.", "Confirm Removal": "Confirme a retirada", - "Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "Está certa de que quere quitar (eliminar) este evento? Saiba que si elimina un nome de sala ou cambia o asunto, podería desfacer o cambio.", + "Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "Estás certa de que queres quitar (eliminar) este evento? Debes saber que se eliminas un nome de sala ou cambias o asunto, poderías desfacer o cambio.", "Community IDs may only contain characters a-z, 0-9, or '=_-./'": "Os ID de comunidade só poden conter caracteres a-z, 0-9, or '=_-./'", "Community IDs cannot be empty.": "O ID de comunidade non pode quedar baldeiro.", "Something went wrong whilst creating your community": "Algo fallou mentres se creaba a súa comunidade", @@ -481,7 +481,7 @@ "Ignore request": "Ignorar petición", "Encryption key request": "Petición de chave de cifrado", "Unable to restore session": "Non se puido restaurar a sesión", - "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Si anteriormente utilizou unha versión máis recente de Riot, a súa sesión podería non ser compatible con esta versión. Peche esta ventá e volva a versión máis recente.", + "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Se anteriormente utilizaches unha versión máis recente de Riot, a túa sesión podería non ser compatible con esta versión. Pecha esta ventá e volve á versión máis recente.", "Invalid Email Address": "Enderezo de correo non válido", "This doesn't appear to be a valid email address": "Este non semella ser un enderezo de correo válido", "Verification Pending": "Verificación pendente", @@ -513,9 +513,9 @@ "Add a Room": "Engadir unha sala", "Failed to remove the room from the summary of %(groupId)s": "Algo fallou ao quitar a sala do resumo de %(groupId)s", "The room '%(roomName)s' could not be removed from the summary.": "A sala '%(roomName)s' non se puido eliminar do resumo.", - "Add users to the community summary": "Engadir usuarios ao resumo da comunidade", + "Add users to the community summary": "Engadir usuarias ó resumo da comunidade", "Who would you like to add to this summary?": "A quen desexa engadir a este resumo?", - "Failed to add the following users to the summary of %(groupId)s:": "Algo fallou ao engadir aos seguintes usuarios ao resumo de %(groupId)s:", + "Failed to add the following users to the summary of %(groupId)s:": "Algo fallou ó engadir ás seguintes usuarias ó resumo de %(groupId)s:", "Add a User": "Engadir unha usuaria", "Failed to remove a user from the summary of %(groupId)s": "Algo fallou ao eliminar a usuaria do resumo de %(groupId)s", "The user '%(displayName)s' could not be removed from the summary.": "A usuaria '%(displayName)s' non se puido eliminar do resumo.", @@ -530,9 +530,9 @@ "These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "Estas salas móstranse aos membros da comunidade na páxina da comunidade. Os participantes da comunidade poden unirse ás salas premendo nelas.", "Add rooms to this community": "Engadir salas a esta comunidade", "Featured Rooms:": "Salas destacadas:", - "Featured Users:": "Usuarios destacados:", + "Featured Users:": "Usuarias destacadas:", "%(inviter)s has invited you to join this community": "%(inviter)s convidoute a entrar nesta comunidade", - "You are an administrator of this community": "Vostede administra esta comunidade", + "You are an administrator of this community": "Administras esta comunidade", "You are a member of this community": "É membro desta comunidade", "Your community hasn't got a Long Description, a HTML page to show to community members.
Click here to open settings and give it one!": "A súa comunidade non ten unha descrición longa, ou unha páxina HTML que lle mostrar aos seus participantes.
Pulse aquí para abrir os axustes e publicar unha!", "Long Description (HTML)": "Descrición longa (HTML)", @@ -592,7 +592,7 @@ "Import E2E room keys": "Importar chaves E2E da sala", "Cryptography": "Criptografía", "Analytics": "Analytics", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot recolle información analítica anónima para permitirnos mellorar o aplicativo.", + "Riot collects anonymous analytics to allow us to improve the application.": "Riot recolle información analítica anónima para permitirnos mellorar a aplicación.", "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "A intimidade impórtanos, así que non recollemos información personal ou identificable nos datos dos nosos análises.", "Learn more about how we use analytics.": "Saber máis sobre como utilizamos analytics.", "Labs": "Labs", @@ -651,7 +651,7 @@ "Emoji": "Emoji", "Notify the whole room": "Notificar a toda a sala", "Room Notification": "Notificación da sala", - "Users": "Usuarios", + "Users": "Usuarias", "unknown device": "dispositivo descoñecido", "NOT verified": "Non validado", "verified": "validado", @@ -676,12 +676,12 @@ "Confirm passphrase": "Confirme a frase de paso", "Export": "Exportar", "Import room keys": "Importar chaves de sala", - "This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "Este proceso permítelle importar chaves de cifrado que vostede exportou de outro cliente Matrix. Así poderá descifrar calquera mensaxe que o outro cliente puidese cifrar.", + "This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "Este proceso permíteche importar chaves de cifrado que exportaches doutro cliente Matrix. Así poderás descifrar calquera mensaxe que o outro cliente puidese cifrar.", "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "O ficheiro exportado estará protexido con unha frase de paso. Debe introducir aquí esa frase de paso para descifrar o ficheiro.", "File to import": "Ficheiro a importar", "Import": "Importar", "The information being sent to us to help make Riot.im better includes:": "A información enviada a Riot.im para axudarnos a mellorar inclúe:", - "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Se esta páxina inclúe información identificable como ID de grupo, usuario ou sala, estes datos son eliminados antes de ser enviados ao servidor.", + "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Se esta páxina inclúe información identificable como ID de grupo, usuaria ou sala, estes datos son eliminados antes de ser enviados ó servidor.", "The platform you're on": "A plataforma na que está", "The version of Riot.im": "A versión de Riot.im", "Your language of choice": "A súa preferencia de idioma", @@ -703,12 +703,12 @@ "Display your community flair in rooms configured to show it.": "Mostrar a popularidade da túa comunidade nas salas configuradas para que a mostren.", "Did you know: you can use communities to filter your Riot.im experience!": "Sabías que podes usar as comunidades para filtrar a túa experiencia en Riot.im!", "To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "Para establecer un filtro, arrastra un avatar da comunidade sobre o panel de filtros na parte esquerda da pantalla. Podes premer nun avatar no panel de filtrado en calquera momento para ver só salas e xente asociada a esa comunidade.", - "Deops user with given id": "Degradar o usuario con esa ID", + "Deops user with given id": "Degradar á usuaria con ese ID", "Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "Visto por %(displayName)s(%(userName)s en %(dateTime)s", "Code": "Código", "Unable to join community": "Non te puideches unir a comunidade", "Unable to leave community": "Non se puido deixar a comunidade", - "Changes made to your community name and avatar might not be seen by other users for up to 30 minutes.": "Os cambios realizados a súa comunidade name e avatar poida que non os vexan outros usuarios ate dentro de 30 minutos.", + "Changes made to your community name and avatar might not be seen by other users for up to 30 minutes.": "Os cambios realizados á túa comunidade nome e avatar poida que non os vexan outras usuarias ate dentro de 30 minutos.", "Join this community": "Únete a esta comunidade", "Leave this community": "Deixar esta comunidade", "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Se enviaches un informe de fallo a través de GitHub, os informes poden axudarnos a examinar o problema. Os informes de fallo conteñen datos do uso da aplicación incluíndo o teu nome de usuaria, os IDs ou alcumes das salas e grupos que visitaches e os nomes de usuaria de outras persoas. Non conteñen mensaxes.", @@ -778,7 +778,7 @@ "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utiliza características avanzadas do navegador, algunhas das cales non están dispoñibles ou son experimentais no seu navegador actual.", "Developer Tools": "Ferramentas para desenvolver", "Preparing to send logs": "Preparándose para enviar informe", - "Remember, you can always set an email address in user settings if you change your mind.": "Lembre que sempre poderá poñer un enderezo de correo nos axustes de usuario se cambiase de idea.", + "Remember, you can always set an email address in user settings if you change your mind.": "Lembra que sempre poderás poñer un enderezo de email nos axustes de usuaria se cambiases de idea.", "Explore Account Data": "Ollar datos da conta", "All messages (noisy)": "Todas as mensaxes (alto)", "Saturday": "Sábado", @@ -819,7 +819,7 @@ "Back": "Atrás", "Reply": "Resposta", "Show message in desktop notification": "Mostrar mensaxe nas notificacións de escritorio", - "Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Os informes de depuración conteñen datos de utilización do aplicativo como o seu nome de usuario, os IDs ou alcumes de salas e grupos que vostede visitou e os nomes de usuarios doutras usuarias. Non conteñen mensaxes.", + "Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Os informes de depuración conteñen datos de utilización da aplicación como o teu nome de usuaria, os IDs ou alias de salas e grupos que visitachese os nomes de usuaria doutras usuarias. Non conteñen mensaxes.", "Unhide Preview": "Desagochar a vista previa", "Unable to join network": "Non se puido conectar ca rede", "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Pode que os configurases nun cliente diferente de Riot. Non podes establecelos desde Riot pero aínda así aplicaranse", @@ -845,7 +845,7 @@ "View Source": "Ver fonte", "Event Content": "Contido do evento", "Thank you!": "Grazas!", - "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Co seu navegador actual a aparencia e uso do aplicativo poderían estar totalmente falseadas, e algunhas características poderían non funcionar. Se quere pode continuar, pero debe ser consciente de que poden haber fallos!", + "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Co teu navegador actual a aparencia e uso da aplicación poderían estar totalmente falseadas, e algunhas características poderían non funcionar. Se queres podes continuar, pero debes ser consciente de que pode haber fallos!", "Checking for an update...": "Comprobando as actualizacións...", "There are advanced notifications which are not shown here": "Existen notificacións avanzadas que non se mostran aquí", "Every page you use in the app": "Cada páxina que use na aplicación", @@ -867,18 +867,18 @@ "Enable widget screenshots on supported widgets": "Activar as capturas de trebellos para aqueles que as permiten", "Share Link to User": "Compartir a ligazón coa usuaria", "Share room": "Compartir sala", - "Muted Users": "Usuarios silenciados", + "Muted Users": "Usuarias silenciadas", "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Axuda a mellorar Riot.im enviando os datos anónimos de uso. Usaremos unha cookie (le aquí a nosa Política de Cookies).", "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Axuda a mellorar Riot.im enviando datos anónimos de uso. Esto usará unha cookie.", "Yes, I want to help!": "Si, quero axudar!", - "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Iso fará que a súa deixe de ter uso de xeito permanente. Non poderá acceder e ninguén vai a poder volver a rexistrar esa mesma ID de usuario. Suporá que saía de todas as salas de conversas nas que estaba e eliminará os detalles da súa conta do servidores de identificación.Isto non se poderá desfacer", + "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Iso fará que a túa deixe de ter uso de xeito permanente. Non poderás acceder e ninguén vai a poder volver a rexistrar esa mesma ID de usuaria. Suporá que sairás de todalas salas de conversas nas que estabas e eliminarás os detalles da túa conta do servidores de identidade. Esta acción non ten volta", "Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "Desactivando a súa conta non supón que por defecto esquezamos as súas mensaxes enviadas. Se quere que nos esquezamos das súas mensaxes, prema na caixa de embaixo.", "To continue, please enter your password:": "Para continuar introduza o seu contrasinal:", - "Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "A visibilidade das mensaxes en Matrix é parecida ás dos correos electrónicos. Que esquezamos as súas mensaxes significa que as súas mensaxes non se van a compartir con ningún novo membro ou usuario que non estea rexistrado. Mais aqueles usuarios que xa tiveron acceso a estas mensaxes si que seguirán tendo acceso as súas propias copias desas mensaxes.", + "Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "A visibilidade das mensaxes en Matrix é parecida á dos correos electrónicos. Que esquezamos as túas mensaxes significa que as mensaxes non se van a compartir con ningún novo membro ou usuaria que non estea rexistrada. Mais aqueles usuarias que xa tiveron acceso a estas mensaxes si que seguirán tendo acceso as súas propias copias desas mensaxes.", "Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "Esquezan todas as mensaxes que eu enviara no momento en que elimine a miña conta. (Aviso: iso suporá que os seguintes participantes só verán unha versión incompleta das conversas.)", "Share Room": "Compartir sala", "Link to most recent message": "Ligazón ás mensaxes máis recentes", - "Share User": "Compartir usuario", + "Share User": "Compartir usuaria", "Share Community": "Compartir comunidade", "Share Room Message": "Compartir unha mensaxe da sala", "Link to selected message": "Ligazón á mensaxe escollida", @@ -893,10 +893,10 @@ "Audio Output": "Saída de audio", "Call in Progress": "Chamada en progreso", "A call is already in progress!": "Xa hai unha chamada en progreso!", - "Permission Required": "Precísase de permisos", - "You do not have permission to start a conference call in this room": "Non ten permisos para comezar unha chamada de conferencia nesta sala", + "Permission Required": "Precísanse permisos", + "You do not have permission to start a conference call in this room": "Non tes permisos para comezar unha chamada de conferencia nesta sala", "This event could not be displayed": "Non se puido amosar este evento", - "Demote yourself?": "Baixarse a si mesmo de rango?", + "Demote yourself?": "Baixarse a ti mesma de rango?", "Demote": "Baixar de rango", "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.": "Nas salas cifradas, como é esta, está desactivado por defecto a previsualización das URL co fin de asegurarse de que o servidor local (que é onde se gardan as previsualizacións) non poida recoller información sobre das ligazóns que se ven nesta sala.", "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.": "Cando alguén pon unha URL na mensaxe, esta previsualízarase para que así se coñezan xa cousas delas como o título, a descrición ou as imaxes que inclúe ese sitio web.", @@ -963,7 +963,7 @@ "Sign in and regain access to your account.": "Conéctate e recupera o acceso a túa conta.", "You cannot sign in to your account. Please contact your homeserver admin for more information.": "Non podes conectar a conta. Contacta coa administración do teu servidor para máis información.", "Warning: Your personal data (including encryption keys) is still stored in this session. Clear it if you're finished using this session, or want to sign in to another account.": "Aviso: os teus datos personais (incluíndo chaves de cifrado) aínda están gardadas nesta sesión. Pechaa se remataches de usar esta sesión, ou se quere conectar con outra conta.", - "Unable to load! Check your network connectivity and try again.": "Non cargou! Comproba a conexión a rede e volta a intentalo.", + "Unable to load! Check your network connectivity and try again.": "Non cargou! Comproba a conexión á rede e volta a intentalo.", "There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Hai sesións descoñecidas nesta sala: se continúas sen verificalas será posible para alguén fisgar na túa chamada.", "Review Sessions": "Revisar Sesións", "Call failed due to misconfigured server": "Fallou a chamada porque o servidor está mal configurado", @@ -2370,5 +2370,59 @@ "Esc": "Esc", "Enter": "Intro", "Space": "Espazo", - "End": "Fin" + "End": "Fin", + "You joined the call": "Unícheste á chamada", + "%(senderName)s joined the call": "%(senderName)s uniuse á chamada", + "Call in progress": "Chamada en curso", + "You left the call": "Deixáchela chamada", + "%(senderName)s left the call": "%(senderName)s deixou a chamada", + "Call ended": "Chamada rematada", + "You started a call": "Iniciaches unha chamada", + "%(senderName)s started a call": "%(senderName)s iniciou unha chamada", + "Waiting for answer": "Agardando resposta", + "%(senderName)s is calling": "%(senderName)s está chamando", + "You created the room": "Creaches a sala", + "%(senderName)s created the room": "%(senderName)s creou a sala", + "You made the chat encrypted": "Cifraches a conversa", + "%(senderName)s made the chat encrypted": "%(senderName)s cifrou a conversa", + "You made history visible to new members": "Fixeches visible o historial para novos membros", + "%(senderName)s made history visible to new members": "%(senderName)s fixo o historial visible para novos membros", + "You made history visible to anyone": "Fixeches que o historial sexa visible para todas", + "%(senderName)s made history visible to anyone": "%(senderName)s fixo o historial visible para todas", + "You made history visible to future members": "Fixeches o historial visible para membros futuros", + "%(senderName)s made history visible to future members": "%(senderName)s fixo o historial visible para futuros membros", + "You were invited": "Foches convidada", + "%(targetName)s was invited": "%(targetName)s foi convidada", + "You left": "Saíches", + "%(targetName)s left": "%(targetName)s saíu", + "You were kicked (%(reason)s)": "Expulsáronte (%(reason)s)", + "%(targetName)s was kicked (%(reason)s)": "%(targetName)s foi expulsada (%(reason)s)", + "You were kicked": "Foches expulsada", + "%(targetName)s was kicked": "%(targetName)s foi expulsada", + "You rejected the invite": "Rexeitaches o convite", + "%(targetName)s rejected the invite": "%(targetName)s rexeitou o convite", + "You were uninvited": "Retiraronche o convite", + "%(targetName)s was uninvited": "Retirouse o convite para %(targetName)s", + "You were banned (%(reason)s)": "Foches bloqueada (%(reason)s)", + "%(targetName)s was banned (%(reason)s)": "%(targetName)s foi bloqueada (%(reason)s)", + "You were banned": "Foches bloqueada", + "%(targetName)s was banned": "%(targetName)s foi bloqueada", + "You joined": "Unícheste", + "%(targetName)s joined": "%(targetName)s uneuse", + "You changed your name": "Cambiaches o nome", + "%(targetName)s changed their name": "%(targetName)s cambiou o seu nome", + "You changed your avatar": "Cambiáchelo avatar", + "%(targetName)s changed their avatar": "%(targetName)s cambiou o seu avatar", + "%(senderName)s %(emote)s": "%(senderName)s %(emote)s", + "%(senderName)s: %(message)s": "%(senderName)s: %(message)s", + "You changed the room name": "Cambiaches o nome da sala", + "%(senderName)s changed the room name": "%(senderName)s cambiou o nome da sala", + "%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s", + "%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s", + "You uninvited %(targetName)s": "Retiraches o convite para %(targetName)s", + "%(senderName)s uninvited %(targetName)s": "%(senderName)s retiroulle o convite a %(targetName)s", + "You invited %(targetName)s": "Convidaches a %(targetName)s", + "%(senderName)s invited %(targetName)s": "%(senderName)s convidou a %(targetName)s", + "You changed the room topic": "Cambiaches o tema da sala", + "%(senderName)s changed the room topic": "%(senderName)s cambiou o asunto da sala" } From 554af62aade59b457f0cc5c634f6f208830044d1 Mon Sep 17 00:00:00 2001 From: Lizzy Date: Fri, 26 Jun 2020 19:53:11 +0000 Subject: [PATCH 38/91] Translated using Weblate (Spanish) Currently translated at 89.0% (2087 of 2344 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/es/ --- src/i18n/strings/es.json | 43 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 2b3cb7b1b9..33443bd5bd 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -1179,7 +1179,7 @@ "Use a longer keyboard pattern with more turns": "Usa un patrón de tecleo largo con más vueltas", "Enable Community Filter Panel": "Habilitar el Panel de Filtro de Comunidad", "Verify this user by confirming the following emoji appear on their screen.": "Verifica este usuario confirmando que los siguientes emojis aparecen en su pantalla.", - "Your Riot is misconfigured": "Tu Riot está mal configurado", + "Your Riot is misconfigured": "Tu Riot tiene un error de configuración", "Whether or not you're logged in (we don't record your username)": "Hayas o no iniciado sesión (no guardamos tu nombre de usuario)", "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Uses o no los 'breadcrumbs' (iconos sobre la lista de salas)", "A conference call could not be started because the integrations server is not available": "No se pudo iniciar la conferencia porque el servidor de integraciones no está disponible", @@ -2191,5 +2191,44 @@ "This homeserver does not support login using email address.": "Este servidor doméstico no admite iniciar sesión con una dirección de correo electrónico.", "This account has been deactivated.": "Esta cuenta ha sido desactivada.", "Room name or address": "Nombre o dirección de la sala", - "Address (optional)": "Dirección (opcional)" + "Address (optional)": "Dirección (opcional)", + "Help us improve Riot": "Ayúdanos a mejorar Riot", + "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Enviar información anónima de uso nos ayudaría bastante a mejorar Riot. Esto cuenta como utilizar una cookie.", + "I want to help": "Quiero ayudar", + "Ok": "Ok", + "Set password": "Establecer contraseña", + "To return to your account in future you need to set a password": "Para poder regresar a tu cuenta en un futuro necesitas establecer una contraseña", + "Restart": "Reiniciar", + "Upgrade your Riot": "Actualiza tu Riot", + "A new version of Riot is available!": "¡Una nueva versión de Riot se encuentra disponible!", + "You joined the call": "Te has unido a la llamada", + "%(senderName)s joined the call": "%(senderName)s se ha unido a la llamada", + "Call in progress": "Llamada en progreso", + "You left the call": "Has abandonado la llamada", + "%(senderName)s left the call": "%(senderName)s dejo la llamada", + "Call ended": "La llamada ha finalizado", + "You started a call": "Has iniciado una llamada", + "%(senderName)s started a call": "%(senderName)s inicio una llamada", + "Waiting for answer": "Esperado por una respuesta", + "%(senderName)s is calling": "%(senderName)s está llamando", + "%(senderName)s created the room": "%(senderName)s creo la sala", + "You were invited": "Has sido invitado", + "%(targetName)s was invited": "%(targetName)s ha sido invitado", + "%(targetName)s left": "%(targetName)s se ha ido", + "You were kicked (%(reason)s)": "Has sido expulsado por %(reason)s", + "You rejected the invite": "Has rechazado la invitación", + "%(targetName)s rejected the invite": "%(targetName)s rechazo la invitación", + "You were banned (%(reason)s)": "Has sido baneado por %(reason)s", + "%(targetName)s was banned (%(reason)s)": "%(targetName)s fue baneado por %(reason)s", + "You were banned": "Has sido baneado", + "%(targetName)s was banned": "%(targetName)s fue baneado", + "You joined": "Te has unido", + "%(targetName)s joined": "%(targetName)s se ha unido", + "You changed your name": "Has cambiado tu nombre", + "%(targetName)s changed their name": "%(targetName)s cambio su nombre", + "You changed your avatar": "Ha cambiado su avatar", + "%(targetName)s changed their avatar": "%(targetName)s ha cambiado su avatar", + "You changed the room name": "Has cambiado el nombre de la sala", + "%(senderName)s changed the room name": "%(senderName)s cambio el nombre de la sala", + "You invited %(targetName)s": "Has invitado a %(targetName)s" } From badce3373038a41e254adc6b8598a90881bdd26f Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Sun, 28 Jun 2020 09:54:15 +0000 Subject: [PATCH 39/91] Translated using Weblate (Albanian) Currently translated at 99.7% (2337 of 2344 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 58 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 2656744f93..4ea5ff25cb 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -2526,5 +2526,61 @@ "Compact": "Kompakte", "Modern": "Moderne", "Use a system font": "Përdor një palë shkronja sistemi", - "System font name": "Emër shkronjash sistemi" + "System font name": "Emër shkronjash sistemi", + "You joined the call": "U bëtë pjesë e thirrjes", + "%(senderName)s joined the call": "%(senderName)s u bë pjesë e thirrjes", + "Call in progress": "Thirrje në ecuri e sipër", + "You left the call": "E braktisët thirrjen", + "%(senderName)s left the call": "%(senderName)s e braktisi thirrjen", + "Call ended": "Thirrja përfundoi", + "You started a call": "Filluat një thirrje", + "%(senderName)s started a call": "%(senderName)s filluat një thirrje", + "Waiting for answer": "Po pritet për përgjigje", + "%(senderName)s is calling": "%(senderName)s po thërret", + "You created the room": "Krijuat dhomën", + "%(senderName)s created the room": "%(senderName)s krijoi dhomën", + "You made the chat encrypted": "E bëtë të fshehtëzuar fjalosjen", + "%(senderName)s made the chat encrypted": "%(senderName)s e bëri të fshehtëzuar fjalosjen", + "You made history visible to new members": "E bëtë historikun të dukshëm për anëtarë të rinj", + "%(senderName)s made history visible to new members": "%(senderName)s e bëri historikun të dukshëm për anëtarë të rinj", + "You made history visible to anyone": "E bëtë historikun të dukshëm për këdo", + "%(senderName)s made history visible to anyone": "%(senderName)s e bëri historikun të dukshëm për këdo", + "You made history visible to future members": "E bëtë historikun të dukshëm për anëtarë të ardhshëm", + "%(senderName)s made history visible to future members": "%(senderName)s e bëri historikun të dukshëm për anëtarë të ardhshëm", + "You were invited": "U ftuat", + "%(targetName)s was invited": "%(targetName)s u ftua", + "You left": "Dolët", + "%(targetName)s left": "%(targetName)s doli", + "You were kicked (%(reason)s)": "U përzutë (%(reason)s)", + "%(targetName)s was kicked (%(reason)s)": "%(targetName)s u përzu (%(reason)s)", + "You were kicked": "U përzutë", + "%(targetName)s was kicked": "%(targetName)s u përzu", + "You rejected the invite": "S’pranuat ftesën", + "%(targetName)s rejected the invite": "%(targetName)s s’pranoi ftesën", + "You were uninvited": "Ju shfuqizuan ftesën", + "%(targetName)s was uninvited": "%(targetName)s i shfuqizuan ftesën", + "You were banned (%(reason)s)": "U dëbuat (%(reason)s)", + "%(targetName)s was banned (%(reason)s)": "%(targetName)s u dëbua (%(reason)s)", + "You were banned": "U dëbuat", + "%(targetName)s was banned": "%(targetName)s u dëbua", + "You joined": "U bëtë pjesë", + "%(targetName)s joined": "%(targetName)s u bë pjesë", + "You changed your name": "Ndryshuat emrin", + "%(targetName)s changed their name": "%(targetName)s ndryshoi emrin e vet", + "You changed your avatar": "Ndryshuat avatarin tuaj", + "%(targetName)s changed their avatar": "%(targetName)s ndryshoi avatarin e vet", + "%(senderName)s %(emote)s": "%(senderName)s %(emote)s", + "%(senderName)s: %(message)s": "%(senderName)s: %(message)s", + "You changed the room name": "Ndryshuat emrin e dhomës", + "%(senderName)s changed the room name": "%(senderName)s ndryshoi emrin e dhomës", + "%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s", + "%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s", + "You uninvited %(targetName)s": "Shfuqizuat ftesën për %(targetName)s", + "%(senderName)s uninvited %(targetName)s": "%(senderName)s shfuqizoi ftesën për %(targetName)s", + "You invited %(targetName)s": "Ftuat %(targetName)s", + "%(senderName)s invited %(targetName)s": "%(senderName)s ftoi %(targetName)s", + "You changed the room topic": "Ndryshuat temën e dhomës", + "%(senderName)s changed the room topic": "%(senderName)s ndryshoi temën e dhomës", + "Use a more compact ‘Modern’ layout": "Përdorni një skemë ‘Modern’ më kompakte", + "The authenticity of this encrypted message can't be guaranteed on this device.": "Mirëfilltësia e këtij mesazhi të fshehtëzuar s’mund të garantohet në këtë pajisje." } From 80de67eff5a70f3635ccff276d4ec68735e8eee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Sun, 28 Jun 2020 20:36:42 +0000 Subject: [PATCH 40/91] Translated using Weblate (Estonian) Currently translated at 75.2% (1762 of 2344 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/et/ --- src/i18n/strings/et.json | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 7f029f9328..7afcbcaf58 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -1813,5 +1813,36 @@ "Deactivate user": "Blokeeri kasutaja", "Failed to deactivate user": "Kasutaja blokeerimine ei õnnestunud", "This client does not support end-to-end encryption.": "See klient ei toeta läbivat krüptimist.", - "Security": "Turvalisus" + "Security": "Turvalisus", + "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Selle vidina kasutamisel võidakse jagada andmeid saitidega %(widgetDomain)s ning sinu vidinahalduriga.", + "Using this widget may share data with %(widgetDomain)s.": "Selle vidina kasutamisel võidakse jagada andmeid saitidega %(widgetDomain)s.", + "Widgets do not use message encryption.": "Erinevalt sõnumitest vidinad ei kasuta krüptimist.", + "Widget added by": "Vidina lisaja", + "This widget may use cookies.": "See vidin võib kasutada küpsiseid.", + "Delete Widget": "Kustuta vidin", + "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Vidina kustutamisel eemaldatakse ta kõikide selle jututoa kasutajate jaoks. Kas sa kindlasti soovid seda vidinat eemaldada?", + "Delete widget": "Kustuta vidin", + "Minimize apps": "Vähenda rakendused", + "Maximize apps": "Suurenda rakendused", + "Popout widget": "Ava rakendus eraldi aknas", + "More options": "Täiendavad seadistused", + "Language Dropdown": "Keelevalik", + "Manage Integrations": "Halda lõiminguid", + "%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s", + "%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s liitusid %(count)s korda", + "%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)s liitusid", + "%(oneUser)sjoined %(count)s times|other": "%(oneUser)s liitus %(count)s korda", + "%(oneUser)sjoined %(count)s times|one": "%(oneUser)s liitus", + "%(severalUsers)sleft %(count)s times|other": "%(severalUsers)s lahkusid %(count)s korda", + "%(severalUsers)sleft %(count)s times|one": "%(severalUsers)s lahkusid", + "%(oneUser)sleft %(count)s times|other": "%(oneUser)s lahkus %(count)s korda", + "%(oneUser)sleft %(count)s times|one": "%(oneUser)s lahkus", + "%(severalUsers)sjoined and left %(count)s times|other": "%(severalUsers)s liitusid ja lahkusid %(count)s korda", + "%(severalUsers)sjoined and left %(count)s times|one": "%(severalUsers)s liitusid ja lahkusid", + "%(oneUser)sjoined and left %(count)s times|other": "%(oneUser)s liitus ja lahkus %(count)s korda", + "%(oneUser)sjoined and left %(count)s times|one": "%(oneUser)s liitus ja lahkus", + "%(severalUsers)sleft and rejoined %(count)s times|other": "%(severalUsers)s lahkusid ja liitusid uuesti %(count)s korda", + "%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)s lahkusid ja liitusid uuesti", + "%(oneUser)sleft and rejoined %(count)s times|other": "%(oneUser)s lahkus ja liitus uuesti %(count)s korda", + "%(oneUser)sleft and rejoined %(count)s times|one": "%(oneUser)s lahkus ja liitus uuesti" } From 321d8ef2a19d804749f525e0900a042ac95c3534 Mon Sep 17 00:00:00 2001 From: progserega Date: Sun, 28 Jun 2020 11:06:40 +0000 Subject: [PATCH 41/91] Translated using Weblate (Russian) Currently translated at 85.2% (1996 of 2344 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ru/ --- src/i18n/strings/ru.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index cd5a320062..e48c319595 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -2146,5 +2146,13 @@ "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Сообщения в этой комнате зашифрованы сквозным шифрованием. Посмотрите подробности и подтвердите пользователя в его профиле.", "Send a Direct Message": "Отправить сообщение", "Light": "Светлая", - "Dark": "Темная" + "Dark": "Темная", + "Recent Conversations": "Недавние Диалоги", + "Suggestions": "Предложения", + "a key signature": "отпечаток ключа", + "Upload completed": "Отправка успешно завершена", + "Cancelled signature upload": "Отправка отпечатка отменена", + "Unable to upload": "Невозможно отправить", + "Signature upload success": "Отпечаток успешно отправлен", + "Signature upload failed": "Сбой отправки отпечатка" } From 57df5e8f6b6359b4d66b0ae9c1ee099fd95d9b90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=B2=D0=B0=D1=81=D1=8F=D0=BD228?= Date: Sun, 28 Jun 2020 11:21:06 +0000 Subject: [PATCH 42/91] Translated using Weblate (Russian) Currently translated at 85.2% (1996 of 2344 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ru/ --- src/i18n/strings/ru.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index e48c319595..41ee56d5e7 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -2154,5 +2154,7 @@ "Cancelled signature upload": "Отправка отпечатка отменена", "Unable to upload": "Невозможно отправить", "Signature upload success": "Отпечаток успешно отправлен", - "Signature upload failed": "Сбой отправки отпечатка" + "Signature upload failed": "Сбой отправки отпечатка", + "Room name or address": "Имя или адрес комнаты", + "Unrecognised room address:": "Не удалось найти адрес комнаты:" } From 02274ed6a615258b0a3ac0c28d720933e87a276b Mon Sep 17 00:00:00 2001 From: Michael Albert Date: Mon, 29 Jun 2020 07:13:40 +0000 Subject: [PATCH 43/91] Translated using Weblate (German) Currently translated at 99.9% (2342 of 2344 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 58 ++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 20ed28be1d..aacc287a5f 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -2476,5 +2476,61 @@ "System font name": "System-Schriftart", "Customise your appearance": "Verändere das Erscheinungsbild", "Appearance Settings only affect this Riot session.": "Einstellungen zum Erscheinungsbild wirken sich nur auf diese Riot Sitzung aus.", - "The authenticity of this encrypted message can't be guaranteed on this device.": "Die Echtheit dieser verschlüsselten Nachricht kann auf diesem Gerät nicht garantiert werden." + "The authenticity of this encrypted message can't be guaranteed on this device.": "Die Echtheit dieser verschlüsselten Nachricht kann auf diesem Gerät nicht garantiert werden.", + "You joined the call": "Du bist dem Anruf beigetreten", + "%(senderName)s joined the call": "%(senderName)s ist dem Anruf beigetreten", + "Call in progress": "Laufendes Gespräch", + "You left the call": "Du hast den Anruf verlassen", + "%(senderName)s left the call": "%(senderName)s hat den Anruf verlassen", + "Call ended": "Anruf beendet", + "You started a call": "Du hast einen Anruf gestartet", + "%(senderName)s started a call": "%(senderName)s hat einen Anruf gestartet", + "Waiting for answer": "Warte auf Antwort", + "%(senderName)s is calling": "%(senderName)s ruft an", + "You created the room": "Du hast den Raum erstellt", + "%(senderName)s created the room": "%(senderName)s hat den Raum erstellt", + "You made the chat encrypted": "Du hast den Raum verschlüsselt", + "%(senderName)s made the chat encrypted": "%(senderName)s hat den Raum verschlüsselt", + "You made history visible to new members": "Du hast die bisherige Kommunikation für neue Teilnehmern sichtbar gemacht", + "%(senderName)s made history visible to new members": "%(senderName)s hat die bisherige Kommunikation für neue Teilnehmern sichtbar gemacht", + "You made history visible to anyone": "Du hast die bisherige Kommunikation für alle sichtbar gemacht", + "%(senderName)s made history visible to anyone": "%(senderName)s hat die bisherige Kommunikation für alle sichtbar gemacht", + "You made history visible to future members": "Du hast die bisherige Kommunikation für zukünftige Teilnehmer sichtbar gemacht", + "%(senderName)s made history visible to future members": "%(senderName)s hat die bisherige Kommunikation für zukünftige Teilnehmer sichtbar gemacht", + "You were invited": "Du wurdest eingeladen", + "%(targetName)s was invited": "%(targetName)s wurde eingeladen", + "You left": "Du hast den Raum verlassen", + "%(targetName)s left": "%(targetName)s hat den Raum verlassen", + "You were kicked (%(reason)s)": "Du wurdest herausgeworfen (%(reason)s)", + "%(targetName)s was kicked (%(reason)s)": "%(targetName)s wurde herausgeworfen (%(reason)s)", + "You were kicked": "Du wurdest herausgeworfen", + "%(targetName)s was kicked": "%(targetName)s wurde herausgeworfen", + "You rejected the invite": "Du hast die Einladung abgelehnt", + "%(targetName)s rejected the invite": "%(targetName)s hat die Einladung abgelehnt", + "You were uninvited": "Deine Einladung wurde zurückgezogen", + "%(targetName)s was uninvited": "Die Einladung für %(targetName)s wurde zurückgezogen", + "You were banned (%(reason)s)": "Du wurdest verbannt (%(reason)s)", + "%(targetName)s was banned (%(reason)s)": "%(targetName)s wurde verbannt (%(reason)s)", + "You were banned": "Du wurdest verbannt", + "%(targetName)s was banned": "%(targetName)s wurde verbannt", + "You joined": "Du bist beigetreten", + "%(targetName)s joined": "%(targetName)s ist beigetreten", + "You changed your name": "Du hast deinen Namen geändert", + "%(targetName)s changed their name": "%(targetName)s hat den Namen geändert", + "You changed your avatar": "Du hast deinen Avatar geändert", + "%(targetName)s changed their avatar": "%(targetName)s hat den Avatar geändert", + "%(senderName)s %(emote)s": "%(senderName)s %(emote)s", + "%(senderName)s: %(message)s": "%(senderName)s: %(message)s", + "You changed the room name": "Du hast den Raumnamen geändert", + "%(senderName)s changed the room name": "%(senderName)s hat den Raumnamen geändert", + "%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s", + "%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s", + "You uninvited %(targetName)s": "Du hast die Einladung für %(targetName)s zurückgezogen", + "%(senderName)s uninvited %(targetName)s": "%(senderName)s hat die Einladung für %(targetName)s zurückgezogen", + "You invited %(targetName)s": "Du hast %(targetName)s eingeladen", + "%(senderName)s invited %(targetName)s": "%(senderName)s hat %(targetName)s eingeladen", + "You changed the room topic": "Du hast das Raumthema geändert", + "%(senderName)s changed the room topic": "%(senderName)s hat das Raumthema geändert", + "New spinner design": "Neue Warteanimation", + "Use a more compact ‘Modern’ layout": "Verwende ein kompakteres 'modernes' Layout" } From 88c195e4431a29e788991cd43d5f6fe122fe772e Mon Sep 17 00:00:00 2001 From: random Date: Mon, 29 Jun 2020 09:19:54 +0000 Subject: [PATCH 44/91] Translated using Weblate (Italian) Currently translated at 100.0% (2344 of 2344 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 59 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 1e7f6d0957..e46a66b4f4 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2531,5 +2531,62 @@ "Modern": "Moderno", "Use a system font": "Usa un carattere di sistema", "System font name": "Nome carattere di sistema", - "The authenticity of this encrypted message can't be guaranteed on this device.": "L'autenticità di questo messaggio cifrato non può essere garantita su questo dispositivo." + "The authenticity of this encrypted message can't be guaranteed on this device.": "L'autenticità di questo messaggio cifrato non può essere garantita su questo dispositivo.", + "You joined the call": "Ti sei unito alla chiamata", + "%(senderName)s joined the call": "%(senderName)s si è unito alla chiamata", + "Call in progress": "Chiamata in corso", + "You left the call": "Hai abbandonato la chiamata", + "%(senderName)s left the call": "%(senderName)s ha abbandonato la chiamata", + "Call ended": "Chiamata terminata", + "You started a call": "Hai iniziato una chiamata", + "%(senderName)s started a call": "%(senderName)s ha iniziato una chiamata", + "Waiting for answer": "In attesa di risposta", + "%(senderName)s is calling": "%(senderName)s sta chiamando", + "You created the room": "Hai creato la stanza", + "%(senderName)s created the room": "%(senderName)s ha creato la stanza", + "You made the chat encrypted": "Hai reso la chat crittografata", + "%(senderName)s made the chat encrypted": "%(senderName)s ha reso la chat crittografata", + "You made history visible to new members": "Hai reso visibile la cronologia ai nuovi membri", + "%(senderName)s made history visible to new members": "%(senderName)s ha reso visibile la cronologia ai nuovi membri", + "You made history visible to anyone": "Hai reso visibile la cronologia a chiunque", + "%(senderName)s made history visible to anyone": "%(senderName)s ha reso visibile la cronologia a chiunque", + "You made history visible to future members": "Hai reso visibile la cronologia ai membri futuri", + "%(senderName)s made history visible to future members": "%(senderName)s ha reso visibile la cronologia ai membri futuri", + "You were invited": "Sei stato invitato", + "%(targetName)s was invited": "%(targetName)s è stato invitato", + "You left": "Sei uscito", + "%(targetName)s left": "%(targetName)s è uscito", + "You were kicked (%(reason)s)": "Sei stato buttato fuori (%(reason)s)", + "%(targetName)s was kicked (%(reason)s)": "%(targetName)s è stato buttato fuori (%(reason)s)", + "You were kicked": "Sei stato buttato fuori", + "%(targetName)s was kicked": "%(targetName)s è stato buttato fuori", + "You rejected the invite": "Hai rifiutato l'invito", + "%(targetName)s rejected the invite": "%(targetName)s ha rifiutato l'invito", + "You were uninvited": "Ti è stato revocato l'invito", + "%(targetName)s was uninvited": "È stato revocato l'invito a %(targetName)s", + "You were banned (%(reason)s)": "Sei stato bandito (%(reason)s)", + "%(targetName)s was banned (%(reason)s)": "%(targetName)s è stato bandito (%(reason)s)", + "You were banned": "Sei stato bandito", + "%(targetName)s was banned": "%(targetName)s è stato bandito", + "You joined": "Ti sei unito", + "%(targetName)s joined": "%(targetName)s si è unito", + "You changed your name": "Hai cambiato il tuo nome", + "%(targetName)s changed their name": "%(targetName)s ha cambiato il suo nome", + "You changed your avatar": "Hai cambiato il tuo avatar", + "%(targetName)s changed their avatar": "%(targetName)s ha cambiato il suo avatar", + "%(senderName)s %(emote)s": "%(senderName)s %(emote)s", + "%(senderName)s: %(message)s": "%(senderName)s: %(message)s", + "You changed the room name": "Hai cambiato il nome della stanza", + "%(senderName)s changed the room name": "%(senderName)s ha cambiato il nome della stanza", + "%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s", + "%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s", + "You uninvited %(targetName)s": "Hai revocato l'invito a %(targetName)s", + "%(senderName)s uninvited %(targetName)s": "%(senderName)s ha revocato l'invito a %(targetName)s", + "You invited %(targetName)s": "Hai invitato %(targetName)s", + "%(senderName)s invited %(targetName)s": "%(senderName)s ha invitato %(targetName)s", + "You changed the room topic": "Hai cambiato l'argomento della stanza", + "%(senderName)s changed the room topic": "%(senderName)s ha cambiato l'argomento della stanza", + "New spinner design": "Nuovo design dello spinner", + "Use a more compact ‘Modern’ layout": "Usa un layout più compatto e moderno", + "Always show first": "Mostra sempre per prime" } From adf186f568037b18e0ae9302d639c1a39dbe0224 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 29 Jun 2020 23:02:10 +0100 Subject: [PATCH 45/91] Fix RoomTile2 Context Menu to match Figma Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/rooms/_RoomTile2.scss | 8 ++++---- src/components/views/rooms/RoomTile2.tsx | 24 +++++++++++------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss index 2845068de3..f1516ee0e3 100644 --- a/res/css/views/rooms/_RoomTile2.scss +++ b/res/css/views/rooms/_RoomTile2.scss @@ -118,8 +118,7 @@ limitations under the License. } .mx_RoomTile2_menuButton::before { - top: 8px; - left: -1px; // this is off-center to align it with the badges + left: 1px; // this is off-center to align it with the badges mask-image: url('$(res)/img/feather-customised/more-horizontal.svg'); } @@ -133,9 +132,10 @@ limitations under the License. } .mx_RoomTile2_menuButton { - width: 18px; - height: 32px; + width: 16px; + height: 16px; visibility: visible; + margin: auto 0; } } } diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 1284728855..59741635f1 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -64,8 +64,14 @@ interface IState { generalMenuDisplayed: boolean; } +export const contextMenuBelow = (elementRect) => { + const left = elementRect.left + window.pageXOffset - 6; + let top = elementRect.bottom + window.pageYOffset + 21; + const chevronFace = "none"; + return {left, top, chevronFace}; +}; + export default class RoomTile2 extends React.Component { - private roomTileRef: React.RefObject = createRef(); private generalMenuButtonRef: React.RefObject = createRef(); // TODO: a11y: https://github.com/vector-im/riot-web/issues/14180 @@ -159,18 +165,10 @@ export default class RoomTile2 extends React.Component { let contextMenu = null; if (this.state.generalMenuDisplayed) { // The context menu appears within the list, so use the room tile as a reference point - const elementRect = this.roomTileRef.current.getBoundingClientRect(); + const elementRect = this.generalMenuButtonRef.current.getBoundingClientRect(); contextMenu = ( - -
+ +
  • @@ -280,7 +278,7 @@ export default class RoomTile2 extends React.Component { const avatarSize = 32; return ( - + {({onFocus, isActive, ref}) => Date: Tue, 30 Jun 2020 00:16:51 +0100 Subject: [PATCH 46/91] Add room notifications context menu and non-default indicator to RoomTile2 Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/rooms/_RoomTile2.scss | 37 ++++++---- src/components/views/rooms/RoomTile2.tsx | 87 +++++++++++++++++++++++- src/i18n/strings/en_EN.json | 4 +- 3 files changed, 111 insertions(+), 17 deletions(-) diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss index f1516ee0e3..78a7732882 100644 --- a/res/css/views/rooms/_RoomTile2.scss +++ b/res/css/views/rooms/_RoomTile2.scss @@ -92,20 +92,17 @@ limitations under the License. justify-content: center; } - // The menu button is hidden by default - // TODO: [Notifications] Use mx_RoomTile2_notificationsButton, similar to the following approach: - // https://github.com/matrix-org/matrix-react-sdk/blob/2180a56074f3698fc0241c309a72ba6cad802d1c/res/css/views/rooms/_RoomSublist2.scss#L48-L76 - // You'll need to do the same down below on the &:hover selector for the tile. - // See https://github.com/vector-im/riot-web/issues/13961. - // ... also remove this 5 line TODO comment. .mx_RoomTile2_menuButton, .mx_RoomTile2_notificationsButton { - width: 0; - height: 0; - visibility: hidden; + width: 20px; + height: 20px; + margin: auto 0 auto 8px; position: relative; + display: none; &::before { + top: 2px; + left: 2px; content: ''; width: 16px; height: 16px; @@ -117,8 +114,11 @@ limitations under the License. } } + .mx_RoomTile2_notificationsButton.mx_RoomTile2_notificationsButton_show { + display: block; + } + .mx_RoomTile2_menuButton::before { - left: 1px; // this is off-center to align it with the badges mask-image: url('$(res)/img/feather-customised/more-horizontal.svg'); } @@ -131,11 +131,9 @@ limitations under the License. visibility: hidden; } + .mx_RoomTile2_notificationsButton, .mx_RoomTile2_menuButton { - width: 16px; - height: 16px; - visibility: visible; - margin: auto 0; + display: block; } } } @@ -158,6 +156,17 @@ limitations under the License. } } +// We use these both in context menus and the room tiles +.mx_RoomTile2_iconBell::before { + mask-image: url('$(res)/img/feather-customised/bell.svg'); +} +.mx_RoomTile2_iconBellDot::before { + mask-image: url('$(res)/img/feather-customised/bell-notification.custom.svg'); +} +.mx_RoomTile2_iconBellCrossed::before { + mask-image: url('$(res)/img/feather-customised/bell-crossed.svg'); +} + .mx_RoomTile2_contextMenu { .mx_RoomTile2_contextMenu_redRow { .mx_AccessibleButton { diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 59741635f1..52b3d444ac 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -36,6 +36,7 @@ import { ContextMenu, ContextMenuButton } from "../../structures/ContextMenu"; import { DefaultTagID, TagID } from "../../../stores/room-list/models"; import { MessagePreviewStore } from "../../../stores/room-list/MessagePreviewStore"; import RoomTileIcon from "./RoomTileIcon"; +import { getRoomNotifsState, ALL_MESSAGES, ALL_MESSAGES_LOUD, MENTIONS_ONLY, MUTE } from "../../../RoomNotifs"; // TODO: Remove banner on launch: https://github.com/vector-im/riot-web/issues/14231 // TODO: Rename on launch: https://github.com/vector-im/riot-web/issues/14231 @@ -61,6 +62,7 @@ interface IState { hover: boolean; notificationState: INotificationState; selected: boolean; + notificationsMenuDisplayed: boolean; generalMenuDisplayed: boolean; } @@ -72,6 +74,7 @@ export const contextMenuBelow = (elementRect) => { }; export default class RoomTile2 extends React.Component { + private notificationsMenuButtonRef: React.RefObject = createRef(); private generalMenuButtonRef: React.RefObject = createRef(); // TODO: a11y: https://github.com/vector-im/riot-web/issues/14180 @@ -83,6 +86,7 @@ export default class RoomTile2 extends React.Component { hover: false, notificationState: new TagSpecificNotificationState(this.props.room, this.props.tag), selected: ActiveRoomObserver.activeRoomId === this.props.room.roomId, + notificationsMenuDisplayed: false, generalMenuDisplayed: false, }; @@ -117,6 +121,18 @@ export default class RoomTile2 extends React.Component { this.setState({selected: isActive}); }; + private onNotificationsMenuOpenClick = (ev: InputEvent) => { + ev.preventDefault(); + ev.stopPropagation(); + this.setState({notificationsMenuDisplayed: true}); + }; + + private onCloseNotificationsMenu = (ev: InputEvent) => { + ev.preventDefault(); + ev.stopPropagation(); + this.setState({notificationsMenuDisplayed: false}); + }; + private onGeneralMenuOpenClick = (ev: InputEvent) => { ev.preventDefault(); ev.stopPropagation(); @@ -159,12 +175,78 @@ export default class RoomTile2 extends React.Component { this.setState({generalMenuDisplayed: false}); // hide the menu }; + private renderNotificationsMenu(): React.ReactElement { + if (this.props.isMinimized) return null; // no menu when minimized + + let contextMenu = null; + if (this.state.notificationsMenuDisplayed) { + const elementRect = this.notificationsMenuButtonRef.current.getBoundingClientRect(); + contextMenu = ( + +
    +
    +
      +
    • + + + {_t("All messages")} + +
    • +
    • + + + {_t("Default")} + +
    • +
    • + + + {_t("Mentions & Keywords")} + +
    • +
    • + + + {_t("None")} + +
    • +
    +
    +
    +
    + ); + } + + const state = getRoomNotifsState(this.props.room.roomId); + const classes = classNames("mx_RoomTile2_notificationsButton", { + // Show bell icon for the default case too. + mx_RoomTile2_iconBell: state === ALL_MESSAGES_LOUD || state === ALL_MESSAGES, + mx_RoomTile2_iconBellDot: state === MENTIONS_ONLY, + mx_RoomTile2_iconBellCrossed: state === MUTE, + // XXX: RoomNotifs assumes ALL_MESSAGES is default, this is wrong, + // but cannot be fixed until FTUE Notifications lands. + mx_RoomTile2_notificationsButton_show: state !== ALL_MESSAGES, + }); + + return ( + + + {contextMenu} + + ); + } + private renderGeneralMenu(): React.ReactElement { if (this.props.isMinimized) return null; // no menu when minimized let contextMenu = null; if (this.state.generalMenuDisplayed) { - // The context menu appears within the list, so use the room tile as a reference point const elementRect = this.generalMenuButtonRef.current.getBoundingClientRect(); contextMenu = ( @@ -227,7 +309,7 @@ export default class RoomTile2 extends React.Component { const classes = classNames({ 'mx_RoomTile2': true, 'mx_RoomTile2_selected': this.state.selected, - 'mx_RoomTile2_hasMenuOpen': this.state.generalMenuDisplayed, + 'mx_RoomTile2_hasMenuOpen': this.state.generalMenuDisplayed || this.state.notificationsMenuDisplayed, 'mx_RoomTile2_minimized': this.props.isMinimized, }); @@ -298,6 +380,7 @@ export default class RoomTile2 extends React.Component {
    {badge}
    + {this.renderNotificationsMenu()} {this.renderGeneralMenu()}
    } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 495300f3fe..0ef675c7c8 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1218,6 +1218,9 @@ "%(count)s unread messages.|one": "1 unread message.", "Unread mentions.": "Unread mentions.", "Unread messages.": "Unread messages.", + "All messages": "All messages", + "Mentions & Keywords": "Mentions & Keywords", + "Notification options": "Notification options", "Favourite": "Favourite", "Low Priority": "Low Priority", "Leave Room": "Leave Room", @@ -1894,7 +1897,6 @@ "Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s", "Notification settings": "Notification settings", "All messages (noisy)": "All messages (noisy)", - "All messages": "All messages", "Mentions only": "Mentions only", "Leave": "Leave", "Forget": "Forget", From 6b2ba8caed50ac0c2a9b2871bf40d05d87d31bde Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 30 Jun 2020 00:27:32 +0100 Subject: [PATCH 47/91] Add svgs Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/img/feather-customised/bell-crossed.svg | 4 ++++ res/img/feather-customised/bell-notification.custom.svg | 5 +++++ res/img/feather-customised/bell.svg | 3 +++ 3 files changed, 12 insertions(+) create mode 100644 res/img/feather-customised/bell-crossed.svg create mode 100644 res/img/feather-customised/bell-notification.custom.svg create mode 100644 res/img/feather-customised/bell.svg diff --git a/res/img/feather-customised/bell-crossed.svg b/res/img/feather-customised/bell-crossed.svg new file mode 100644 index 0000000000..3ca24662b9 --- /dev/null +++ b/res/img/feather-customised/bell-crossed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/res/img/feather-customised/bell-notification.custom.svg b/res/img/feather-customised/bell-notification.custom.svg new file mode 100644 index 0000000000..7bfd551f97 --- /dev/null +++ b/res/img/feather-customised/bell-notification.custom.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/img/feather-customised/bell.svg b/res/img/feather-customised/bell.svg new file mode 100644 index 0000000000..b6bc5ec502 --- /dev/null +++ b/res/img/feather-customised/bell.svg @@ -0,0 +1,3 @@ + + + From 022cc5ea324ac7f343c411ce03e8c25c2481699e Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Tue, 30 Jun 2020 02:14:16 +0000 Subject: [PATCH 48/91] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2345 of 2345 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 9384e8846a..8f4d9b12d3 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2592,5 +2592,6 @@ "You changed the room topic": "您變更了聊天室主題", "%(senderName)s changed the room topic": "%(senderName)s 變更了聊天室主題", "New spinner design": "新的微調器設計", - "Use a more compact ‘Modern’ layout": "使用更簡潔的「現代」佈局" + "Use a more compact ‘Modern’ layout": "使用更簡潔的「現代」佈局", + "Message deleted on %(date)s": "訊息刪除於 %(date)s" } From 2d6142d132b7fffe154a1792b43d8710de7cf425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Tue, 30 Jun 2020 07:24:42 +0000 Subject: [PATCH 49/91] Translated using Weblate (French) Currently translated at 100.0% (2345 of 2345 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index f781df55e2..bc0cccbe07 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2593,5 +2593,6 @@ "%(senderName)s invited %(targetName)s": "%(senderName)s a invité %(targetName)s", "You changed the room topic": "Vous avez changé le sujet du salon", "%(senderName)s changed the room topic": "%(senderName)s a changé le sujet du salon", - "New spinner design": "Nouveau design du spinner" + "New spinner design": "Nouveau design du spinner", + "Message deleted on %(date)s": "Message supprimé le %(date)s" } From 08fa7912b3158ee77ac3364ed147876379d6fb37 Mon Sep 17 00:00:00 2001 From: XoseM Date: Tue, 30 Jun 2020 13:35:04 +0000 Subject: [PATCH 50/91] Translated using Weblate (Galician) Currently translated at 100.0% (2345 of 2345 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index b0b61e3d40..fa8e11863f 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -2424,5 +2424,6 @@ "You invited %(targetName)s": "Convidaches a %(targetName)s", "%(senderName)s invited %(targetName)s": "%(senderName)s convidou a %(targetName)s", "You changed the room topic": "Cambiaches o tema da sala", - "%(senderName)s changed the room topic": "%(senderName)s cambiou o asunto da sala" + "%(senderName)s changed the room topic": "%(senderName)s cambiou o asunto da sala", + "Message deleted on %(date)s": "Mensaxe eliminada o %(date)s" } From bf4305f00c4c09f728f7dc5277be781c10accbe9 Mon Sep 17 00:00:00 2001 From: Michael Albert Date: Tue, 30 Jun 2020 15:11:23 +0000 Subject: [PATCH 51/91] Translated using Weblate (German) Currently translated at 99.9% (2343 of 2345 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index aacc287a5f..4786845418 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -2532,5 +2532,6 @@ "You changed the room topic": "Du hast das Raumthema geändert", "%(senderName)s changed the room topic": "%(senderName)s hat das Raumthema geändert", "New spinner design": "Neue Warteanimation", - "Use a more compact ‘Modern’ layout": "Verwende ein kompakteres 'modernes' Layout" + "Use a more compact ‘Modern’ layout": "Verwende ein kompakteres 'modernes' Layout", + "Message deleted on %(date)s": "Nachricht am %(date)s gelöscht" } From 41ac9801965b9526578342cc92753b6bf7851a15 Mon Sep 17 00:00:00 2001 From: random Date: Tue, 30 Jun 2020 10:03:36 +0000 Subject: [PATCH 52/91] Translated using Weblate (Italian) Currently translated at 100.0% (2345 of 2345 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/ --- src/i18n/strings/it.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index e46a66b4f4..69b879ae19 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2588,5 +2588,6 @@ "%(senderName)s changed the room topic": "%(senderName)s ha cambiato l'argomento della stanza", "New spinner design": "Nuovo design dello spinner", "Use a more compact ‘Modern’ layout": "Usa un layout più compatto e moderno", - "Always show first": "Mostra sempre per prime" + "Always show first": "Mostra sempre per prime", + "Message deleted on %(date)s": "Messaggio eliminato il %(date)s" } From e83a941140a489fce29b80418f2639c0c14da660 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Tue, 30 Jun 2020 17:15:56 +0000 Subject: [PATCH 53/91] Translated using Weblate (Albanian) Currently translated at 99.9% (2352 of 2355 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sq/ --- src/i18n/strings/sq.json | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 4ea5ff25cb..ed5deada2d 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -2582,5 +2582,26 @@ "You changed the room topic": "Ndryshuat temën e dhomës", "%(senderName)s changed the room topic": "%(senderName)s ndryshoi temën e dhomës", "Use a more compact ‘Modern’ layout": "Përdorni një skemë ‘Modern’ më kompakte", - "The authenticity of this encrypted message can't be guaranteed on this device.": "Mirëfilltësia e këtij mesazhi të fshehtëzuar s’mund të garantohet në këtë pajisje." + "The authenticity of this encrypted message can't be guaranteed on this device.": "Mirëfilltësia e këtij mesazhi të fshehtëzuar s’mund të garantohet në këtë pajisje.", + "Message deleted on %(date)s": "Mesazh i fshirë më %(date)s", + "Wrong file type": "Lloj i gabuar kartele", + "Wrong Recovery Key": "Kyç Rimarrjesh i Gabuar", + "Invalid Recovery Key": "Kyç Rimarrjesh i Pavlefshëm", + "Security Phrase": "Frazë Sigurie", + "Enter your Security Phrase or to continue.": "Që të vazhdohet, jepni Frazën tuaj të Sigurisë ose .", + "Security Key": "Kyç Sigurie", + "Use your Security Key to continue.": "Që të vazhdohet përdorni Kyçin tuaj të Sigurisë.", + "Safeguard against losing access to encrypted messages & data by backing up encryption keys on your server.": "Mbrohuni kundër humbjes së hyrjes në mesazhe & të dhëna të fshehtëzuara duke kopjeruajtur kyçe fshehtëzimi në shërbyesin tuaj.", + "Generate a Security Key": "Prodhoni një Kyç Sigurie", + "We’ll generate a Security Key for you to store somewhere safe, like a password manager or a safe.": "Do të prodhojmë për ju një Kyç Sigurie që ta depozitoni diku të parrezik, bie fjala në një përgjegjës fjalëkalimesh ose në një kasafortë.", + "Enter a Security Phrase": "Jepni një Frazë Sigurie", + "Use a secret phrase only you know, and optionally save a Security Key to use for backup.": "Jepni një frazë të fshehtë që e dini vetëm ju, dhe, në daçi, ruani një Kyç Sigurie për ta përdorur për kopjeruajtje.", + "Enter a security phrase only you know, as it’s used to safeguard your data. To be secure, you shouldn’t re-use your account password.": "Jepni një frazë sigurie që e dini vetëm ju, ngaqë përdoret për të mbrojtur të dhënat tuaja. Që të jeni të sigurt, s’duhet të ripërdorni fjalëkalimin e llogarisë tuaj.", + "Store your Security Key somewhere safe, like a password manager or a safe, as it’s used to safeguard your encrypted data.": "Depozitojeni Kyçin tuaj të Sigurisë diku të parrezik, bie fjala në një përgjegjës fjalëkalimesh ose në një kasafortë, ngaqë përdoret për të mbrojtur të dhënat tuaja të fshehtëzuara.", + "If you cancel now, you may lose encrypted messages & data if you lose access to your logins.": "Nëse e anuloni tani, mund të humbni mesazhe & të dhëna të fshehtëzuara, nëse humbni hyrjen te kredencialet tuaja të hyrjeve.", + "You can also set up Secure Backup & manage your keys in Settings.": "Mundeni edhe të ujdisni Kopjeruajtje të Sigurt & administroni kyçet tuaj që nga Rregullimet.", + "Set up Secure backup": "Ujdisni kopjeruajtje të Sigurt", + "Set a Security Phrase": "Caktoni një Frazë Sigurie", + "Confirm Security Phrase": "Ripohoni Frazë Sigurie", + "Save your Security Key": "Ruani Kyçin tuaj të Sigurisë" } From d8bc20932efd8024d016af6c789a736b904889c2 Mon Sep 17 00:00:00 2001 From: Szimszon Date: Tue, 30 Jun 2020 18:08:39 +0000 Subject: [PATCH 54/91] Translated using Weblate (Hungarian) Currently translated at 100.0% (2355 of 2355 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/ --- src/i18n/strings/hu.json | 79 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 05d68fd890..378f71fb49 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2525,5 +2525,82 @@ "Message layout": "Üzenet kinézete", "Compact": "Egyszerű", "Modern": "Modern", - "The authenticity of this encrypted message can't be guaranteed on this device.": "A titkosított üzenetek valódiságát ezen az eszközön nem lehet garantálni." + "The authenticity of this encrypted message can't be guaranteed on this device.": "A titkosított üzenetek valódiságát ezen az eszközön nem lehet garantálni.", + "You joined the call": "Csatlakoztál a hívásba", + "%(senderName)s joined the call": "%(senderName)s csatlakozott a híváshoz", + "Call in progress": "Hívás folyamatban van", + "You left the call": "Kiléptél a hívásból", + "%(senderName)s left the call": "%(senderName)s kilépett a hívásból", + "Call ended": "Hívás befejeződött", + "You started a call": "Hívást kezdeményeztél", + "%(senderName)s started a call": "%(senderName)s hívást kezdeményezett", + "Waiting for answer": "Válaszra várakozás", + "%(senderName)s is calling": "%(senderName)s hív", + "You created the room": "Létrehoztál egy szobát", + "%(senderName)s created the room": "%(senderName)s létrehozott egy szobát", + "You made the chat encrypted": "A beszélgetést titkosítottá tetted", + "%(senderName)s made the chat encrypted": "%(senderName)s titkosítottá tette a beszélgetést", + "You made history visible to new members": "A régi beszélgetéseket láthatóvá tetted az új tagok számára", + "%(senderName)s made history visible to new members": "%(senderName)s a régi beszélgetéseket láthatóvá tette az új tagok számára", + "You made history visible to anyone": "A régi beszélgetéseket láthatóvá tette mindenki számára", + "%(senderName)s made history visible to anyone": "%(senderName)s a régi beszélgetéseket láthatóvá tette mindenki számára", + "You made history visible to future members": "A régi beszélgetéseket láthatóvá tetted a leendő tagok számára", + "%(senderName)s made history visible to future members": "%(senderName)s a régi beszélgetéseket láthatóvá tette a leendő tagok számára", + "You were invited": "Meghívtak", + "%(targetName)s was invited": "Meghívták őt: %(targetName)s", + "You left": "Távoztál", + "%(targetName)s left": "%(targetName)s távozott", + "You were kicked (%(reason)s)": "Kirúgtak (%(reason)s)", + "%(targetName)s was kicked (%(reason)s)": "Kirúgták őt: %(targetName)s (%(reason)s)", + "You were kicked": "Kirúgtak", + "%(targetName)s was kicked": "Kirúgták őt: %(targetName)s", + "You rejected the invite": "A meghívót elutasítottad", + "%(targetName)s rejected the invite": "%(targetName)s elutasította a meghívót", + "You were uninvited": "A meghívódat visszavonták", + "%(targetName)s was uninvited": "A meghívóját visszavonták neki: %(targetName)s", + "You were banned (%(reason)s)": "Kitiltottak (%(reason)s)", + "%(targetName)s was banned (%(reason)s)": "Kitiltották őt: %(targetName)s (%(reason)s)", + "You were banned": "Kitiltottak", + "%(targetName)s was banned": "Kitiltották őt: %(targetName)s", + "You joined": "Beléptél", + "%(targetName)s joined": "%(targetName)s belépett", + "You changed your name": "A neved megváltoztattad", + "%(targetName)s changed their name": "%(targetName)s megváltoztatta a nevét", + "You changed your avatar": "A profilképedet megváltoztattad", + "%(targetName)s changed their avatar": "%(targetName)s megváltoztatta a profilképét", + "%(senderName)s %(emote)s": "%(senderName)s %(emote)s", + "%(senderName)s: %(message)s": "%(senderName)s: %(message)s", + "You changed the room name": "A szoba nevét megváltoztattad", + "%(senderName)s changed the room name": "%(senderName)s megváltoztatta a szoba nevét", + "%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s", + "%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s", + "You uninvited %(targetName)s": "A meghívóját visszavontad neki: %(targetName)s", + "%(senderName)s uninvited %(targetName)s": "%(senderName)s visszavonta a meghívóját neki: %(targetName)s", + "You invited %(targetName)s": "Meghívtad őt: %(targetName)s", + "%(senderName)s invited %(targetName)s": "%(senderName)s meghívta őt: %(targetName)s", + "You changed the room topic": "A szoba témáját megváltoztattad", + "%(senderName)s changed the room topic": "%(senderName)s megváltoztatta a szoba témáját", + "New spinner design": "Új várakozási animáció", + "Use a more compact ‘Modern’ layout": "Egyszerűbb 'Modern' kinézet használata", + "Message deleted on %(date)s": "Az üzenetet ekkor törölték: %(date)s", + "Wrong file type": "A fájl típus hibás", + "Wrong Recovery Key": "A Visszaállítási Kulcs hibás", + "Invalid Recovery Key": "A Visszaállítási Kulcs hibás", + "Security Phrase": "Biztonsági jelmondat", + "Enter your Security Phrase or to continue.": "Add meg a Biztonsági jelmondatot vagy a folytatáshoz.", + "Security Key": "Biztonsági Kulcs", + "Use your Security Key to continue.": "Használd a Biztonsági Kulcsot a folytatáshoz.", + "Safeguard against losing access to encrypted messages & data by backing up encryption keys on your server.": "A titkosított üzenetekhez és adatokhoz való hozzáférés elvesztése esetén használható biztonsági tartalék a titkosított kulcsok a szerveredre való elmentésével.", + "Generate a Security Key": "Biztonsági Kulcs elkészítése", + "We’ll generate a Security Key for you to store somewhere safe, like a password manager or a safe.": "A Biztonsági Kulcsodat elkészítjük neked amit tárolj valamilyen biztonságos helyen mint pl. a jelszókezelő vagy széf.", + "Enter a Security Phrase": "Biztonsági Jelmondat megadása", + "Use a secret phrase only you know, and optionally save a Security Key to use for backup.": "Olyan biztonsági jelmondatot használj amit csak te ismersz és esetleg mentsd el a Biztonsági Kulcsot vésztartaléknak.", + "Enter a security phrase only you know, as it’s used to safeguard your data. To be secure, you shouldn’t re-use your account password.": "Olyan biztonsági jelmondatot adj meg amit csak te ismersz, mert ez fogja az adataidat őrizni. Hogy biztonságos legyen ne használd a fiókod jelszavát.", + "Store your Security Key somewhere safe, like a password manager or a safe, as it’s used to safeguard your encrypted data.": "A Biztonsági Kulcsot tárold biztonságos helyen, mint pl. a jelszókezelő vagy széf, mivel ez tartja biztonságban a titkosított adataidat.", + "If you cancel now, you may lose encrypted messages & data if you lose access to your logins.": "Ha most megszakítod, akkor a munkameneteidhez való hozzáférés elvesztésével elveszítheted a titkosított üzeneteidet és adataidat.", + "You can also set up Secure Backup & manage your keys in Settings.": "A Biztonsági mentést és a kulcsok kezelését beállíthatod a Beállításokban.", + "Set up Secure backup": "Biztonsági mentés beállítása", + "Set a Security Phrase": "Biztonsági Jelmondat beállítása", + "Confirm Security Phrase": "Biztonsági Jelmondat megerősítése", + "Save your Security Key": "Ments el a Biztonsági Kulcsodat" } From 2a12fd1f6e85d0d201aa9d5e3f439f463930c5bc Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 30 Jun 2020 21:58:54 +0100 Subject: [PATCH 55/91] Fix User context menu alignment to match Figma Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/UserMenu.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/UserMenu.tsx b/src/components/structures/UserMenu.tsx index 8c06a06852..ef461bf1b4 100644 --- a/src/components/structures/UserMenu.tsx +++ b/src/components/structures/UserMenu.tsx @@ -204,7 +204,7 @@ export default class UserMenu extends React.Component { return ( From cbd2a9cd359717556237e8876e9238950e253760 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 30 Jun 2020 22:11:12 +0100 Subject: [PATCH 56/91] Redo Iconized Context Menu styling to match Figma and simplify future a11y work by flattening the DOM Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/_common.scss | 115 +++++++++-------------- res/css/structures/_UserMenu.scss | 4 + src/components/structures/UserMenu.tsx | 78 ++++++--------- src/components/views/rooms/RoomTile2.tsx | 86 ++++++----------- 4 files changed, 107 insertions(+), 176 deletions(-) diff --git a/res/css/_common.scss b/res/css/_common.scss index 560bd894c6..0d057d96ab 100644 --- a/res/css/_common.scss +++ b/res/css/_common.scss @@ -588,27 +588,16 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus { // A context menu that largely fits the | [icon] [label] | format. .mx_IconizedContextMenu { - // Put 20px of padding around the whole menu. We do this instead of a - // simple `padding: 20px` rule so the horizontal rules added by the - // optionLists is rendered correctly (full width). - > * { - padding-left: 20px; - padding-right: 20px; - - &:first-child { - padding-top: 20px; - } - - &:last-child { - padding-bottom: 16px; - } - } + min-width: 146px; .mx_IconizedContextMenu_optionList { + & > * { + padding-left: 20px; + padding-right: 20px; + } + // the notFirst class is for cases where the optionList might be under a header of sorts. &:nth-child(n + 2), .mx_IconizedContextMenu_optionList_notFirst { - margin-top: 12px; - // This is a bit of a hack when we could just use a simple border-top property, // however we have a (kinda) good reason for doing it this way: we need opacity. // To get the right color, we need an opacity modifier which means we have to work @@ -631,72 +620,54 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus { } } - ul { - list-style: none; - margin: 0; - padding: 0; + // round the top corners of the top button for the hover effect to be bounded + &:first-child .mx_AccessibleButton:first-child { + border-radius: 4px 4px 0 0; // radius matches .mx_ContextualMenu + } - li { - margin: 0; - padding: 12px 0 0; + // round the bottom corners of the bottom button for the hover effect to be bounded + &:last-child .mx_AccessibleButton:last-child { + border-radius: 0 0 4px 4px; // radius matches .mx_ContextualMenu + } - .mx_AccessibleButton { - text-decoration: none; - color: $primary-fg-color; - font-size: $font-15px; - line-height: $font-24px; + .mx_AccessibleButton { + padding-top: 12px; + padding-bottom: 12px; + text-decoration: none; + color: $primary-fg-color; + font-size: $font-15px; + line-height: $font-24px; - // Create a flexbox to more easily define the list items - display: flex; - align-items: center; + // Create a flexbox to more easily define the list items + display: flex; + align-items: center; - img, .mx_IconizedContextMenu_icon { // icons - width: 16px; - min-width: 16px; - max-width: 16px; - } + &:hover { + background-color: $menu-selected-color; + } - span:last-child { // labels - padding-left: 14px; - width: 100%; - flex: 1; + img, .mx_IconizedContextMenu_icon { // icons + width: 16px; + min-width: 16px; + max-width: 16px; + } - // Ellipsize any text overflow - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - } - } + span:last-child { // labels + padding-left: 14px; + width: 100%; + flex: 1; + + // Ellipsize any text overflow + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; } } } &.mx_IconizedContextMenu_compact { - > * { - padding-left: 11px; - padding-right: 16px; - - &:first-child { - padding-top: 13px; - } - - &:last-child { - padding-bottom: 13px; - } - } - - .mx_IconizedContextMenu_optionList { - &:nth-child(n + 2), .mx_IconizedContextMenu_optionList_notFirst { - margin-top: 10px; - - li:first-child { - padding-top: 10px; - } - } - - li:first-child { - padding-top: 0; - } + .mx_IconizedContextMenu_optionList > * { + padding: 8px 16px 8px 11px; } } } diff --git a/res/css/structures/_UserMenu.scss b/res/css/structures/_UserMenu.scss index bbb1e1cc7b..c958b9eacd 100644 --- a/res/css/structures/_UserMenu.scss +++ b/res/css/structures/_UserMenu.scss @@ -86,6 +86,8 @@ limitations under the License. .mx_UserMenu_contextMenu_redRow { .mx_AccessibleButton { + padding-top: 16px; + padding-bottom: 16px; color: $warning-color !important; // !important to override styles from context menu } @@ -95,6 +97,8 @@ limitations under the License. } .mx_UserMenu_contextMenu_header { + padding: 20px; + // Create a flexbox to organize the header a bit easier display: flex; align-items: center; diff --git a/src/components/structures/UserMenu.tsx b/src/components/structures/UserMenu.tsx index ef461bf1b4..bd222c7f25 100644 --- a/src/components/structures/UserMenu.tsx +++ b/src/components/structures/UserMenu.tsx @@ -191,12 +191,10 @@ export default class UserMenu extends React.Component { let homeButton = null; if (this.hasHomePage) { homeButton = ( -
  • - - - {_t("Home")} - -
  • + + + {_t("Home")} + ); } @@ -232,49 +230,33 @@ export default class UserMenu extends React.Component {
{hostingLink}
-
    - {homeButton} -
  • - this.onSettingsOpen(e, USER_NOTIFICATIONS_TAB)}> - - {_t("Notification settings")} - -
  • -
  • - this.onSettingsOpen(e, USER_SECURITY_TAB)}> - - {_t("Security & privacy")} - -
  • -
  • - this.onSettingsOpen(e, null)}> - - {_t("All settings")} - -
  • -
  • - - - {_t("Archived rooms")} - -
  • -
  • - - - {_t("Feedback")} - -
  • -
+ {homeButton} + this.onSettingsOpen(e, USER_NOTIFICATIONS_TAB)}> + + {_t("Notification settings")} + + this.onSettingsOpen(e, USER_SECURITY_TAB)}> + + {_t("Security & privacy")} + + this.onSettingsOpen(e, null)}> + + {_t("All settings")} + + + + {_t("Archived rooms")} + + + + {_t("Feedback")} +
-
-
    -
  • - - - {_t("Sign out")} - -
  • -
+
+ + + {_t("Sign out")} +
diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 52b3d444ac..f290edc5dd 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -66,7 +66,7 @@ interface IState { generalMenuDisplayed: boolean; } -export const contextMenuBelow = (elementRect) => { +const contextMenuBelow = (elementRect) => { const left = elementRect.left + window.pageXOffset - 6; let top = elementRect.bottom + window.pageYOffset + 21; const chevronFace = "none"; @@ -185,32 +185,22 @@ export default class RoomTile2 extends React.Component {
-
    -
  • - - - {_t("All messages")} - -
  • -
  • - - - {_t("Default")} - -
  • -
  • - - - {_t("Mentions & Keywords")} - -
  • -
  • - - - {_t("None")} - -
  • -
+ + + {_t("All messages")} + + + + {_t("Default")} + + + + {_t("Mentions & Keywords")} + + + + {_t("None")} +
@@ -252,36 +242,20 @@ export default class RoomTile2 extends React.Component {
-
    -
  • - this.onTagRoom(e, DefaultTagID.Favourite)}> - - {_t("Favourite")} - -
  • -
  • - this.onTagRoom(e, DefaultTagID.LowPriority)}> - - {_t("Low Priority")} - -
  • -
  • - - - {_t("Settings")} - -
  • -
+ this.onTagRoom(e, DefaultTagID.Favourite)}> + + {_t("Favourite")} + + + + {_t("Settings")} +
-
-
    -
  • - - - {_t("Leave Room")} - -
  • -
+
+ + + {_t("Leave Room")} +
From 198958dcdd360baa20fe7459f5b0535edf7a3286 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 30 Jun 2020 22:32:59 +0100 Subject: [PATCH 57/91] Iterate to match figma Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/_common.scss | 2 +- res/css/views/rooms/_RoomTile2.scss | 13 ++++ src/components/structures/UserMenu.tsx | 12 ++-- src/components/views/rooms/RoomTile2.tsx | 79 +++++++++++++++++------- src/i18n/strings/en_EN.json | 3 +- 5 files changed, 80 insertions(+), 29 deletions(-) diff --git a/res/css/_common.scss b/res/css/_common.scss index 0d057d96ab..880b01a10e 100644 --- a/res/css/_common.scss +++ b/res/css/_common.scss @@ -652,7 +652,7 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus { max-width: 16px; } - span:last-child { // labels + span.mx_IconizedContextMenu_label { // labels padding-left: 14px; width: 100%; flex: 1; diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss index 78a7732882..8933c73045 100644 --- a/res/css/views/rooms/_RoomTile2.scss +++ b/res/css/views/rooms/_RoomTile2.scss @@ -166,6 +166,9 @@ limitations under the License. .mx_RoomTile2_iconBellCrossed::before { mask-image: url('$(res)/img/feather-customised/bell-crossed.svg'); } +.mx_RoomTile2_iconCheck::before { + mask-image: url('$(res)/img/feather-customised/check.svg'); +} .mx_RoomTile2_contextMenu { .mx_RoomTile2_contextMenu_redRow { @@ -178,6 +181,16 @@ limitations under the License. } } + .mx_RoomTile2_contextMenu_activeRow { + &.mx_AccessibleButton, .mx_AccessibleButton { + color: $accent-color !important; // !important to override styles from context menu + } + + .mx_IconizedContextMenu_icon::before { + background-color: $accent-color; + } + } + .mx_IconizedContextMenu_icon { position: relative; width: 16px; diff --git a/src/components/structures/UserMenu.tsx b/src/components/structures/UserMenu.tsx index bd222c7f25..4a45162902 100644 --- a/src/components/structures/UserMenu.tsx +++ b/src/components/structures/UserMenu.tsx @@ -233,29 +233,29 @@ export default class UserMenu extends React.Component { {homeButton} this.onSettingsOpen(e, USER_NOTIFICATIONS_TAB)}> - {_t("Notification settings")} + {_t("Notification settings")} this.onSettingsOpen(e, USER_SECURITY_TAB)}> - {_t("Security & privacy")} + {_t("Security & privacy")} this.onSettingsOpen(e, null)}> - {_t("All settings")} + {_t("All settings")} - {_t("Archived rooms")} + {_t("Archived rooms")} - {_t("Feedback")} + {_t("Feedback")}
- {_t("Sign out")} + {_t("Sign out")}
diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index f290edc5dd..4ed167d594 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -32,7 +32,7 @@ import NotificationBadge, { TagSpecificNotificationState } from "./NotificationBadge"; import { _t } from "../../../languageHandler"; -import { ContextMenu, ContextMenuButton } from "../../structures/ContextMenu"; +import { ContextMenu, ContextMenuButton, MenuItemRadio } from "../../structures/ContextMenu"; import { DefaultTagID, TagID } from "../../../stores/room-list/models"; import { MessagePreviewStore } from "../../../stores/room-list/MessagePreviewStore"; import RoomTileIcon from "./RoomTileIcon"; @@ -73,6 +73,34 @@ const contextMenuBelow = (elementRect) => { return {left, top, chevronFace}; }; +type State = ALL_MESSAGES_LOUD | ALL_MESSAGES | MENTIONS_ONLY | MUTE; + +interface INotifOptionProps { + active: boolean; + iconClassName: string; + label: string; + onClick(); +} + +const NotifOption: React.FC = ({active, onClick, iconClassName, label}) => { + const classes = classNames({ + mx_RoomTile2_contextMenu_activeRow: active, + }); + + let activeIcon; + if (active) { + activeIcon = ; + } + + return ( + + + { label } + { activeIcon } + + ); +}; + export default class RoomTile2 extends React.Component { private notificationsMenuButtonRef: React.RefObject = createRef(); private generalMenuButtonRef: React.RefObject = createRef(); @@ -178,6 +206,8 @@ export default class RoomTile2 extends React.Component { private renderNotificationsMenu(): React.ReactElement { if (this.props.isMinimized) return null; // no menu when minimized + const state = getRoomNotifsState(this.props.room.roomId); + let contextMenu = null; if (this.state.notificationsMenuDisplayed) { const elementRect = this.notificationsMenuButtonRef.current.getBoundingClientRect(); @@ -185,29 +215,36 @@ export default class RoomTile2 extends React.Component {
- - - {_t("All messages")} - - - - {_t("Default")} - - - - {_t("Mentions & Keywords")} - - - - {_t("None")} - + + + +
); } - const state = getRoomNotifsState(this.props.room.roomId); const classes = classNames("mx_RoomTile2_notificationsButton", { // Show bell icon for the default case too. mx_RoomTile2_iconBell: state === ALL_MESSAGES_LOUD || state === ALL_MESSAGES, @@ -244,17 +281,17 @@ export default class RoomTile2 extends React.Component {
this.onTagRoom(e, DefaultTagID.Favourite)}> - {_t("Favourite")} + {_t("Favourite")} - {_t("Settings")} + {_t("Settings")}
- {_t("Leave Room")} + {_t("Leave Room")}
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index e056576cb1..b23264a297 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1218,11 +1218,11 @@ "%(count)s unread messages.|one": "1 unread message.", "Unread mentions.": "Unread mentions.", "Unread messages.": "Unread messages.", + "Use default": "Use default", "All messages": "All messages", "Mentions & Keywords": "Mentions & Keywords", "Notification options": "Notification options", "Favourite": "Favourite", - "Low Priority": "Low Priority", "Leave Room": "Leave Room", "Room options": "Room options", "Add a topic": "Add a topic", @@ -1903,6 +1903,7 @@ "Mentions only": "Mentions only", "Leave": "Leave", "Forget": "Forget", + "Low Priority": "Low Priority", "Direct Chat": "Direct Chat", "Clear status": "Clear status", "Update status": "Update status", From 508dea1c8976eb8c4e05ad5cdcd7f5a547b160f2 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 30 Jun 2020 22:53:30 +0100 Subject: [PATCH 58/91] Wire up Notifications context menu on room tile 2 Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/rooms/RoomTile2.tsx | 40 +++++++++++++++++++----- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 4ed167d594..aad9b00860 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -37,6 +37,8 @@ import { DefaultTagID, TagID } from "../../../stores/room-list/models"; import { MessagePreviewStore } from "../../../stores/room-list/MessagePreviewStore"; import RoomTileIcon from "./RoomTileIcon"; import { getRoomNotifsState, ALL_MESSAGES, ALL_MESSAGES_LOUD, MENTIONS_ONLY, MUTE } from "../../../RoomNotifs"; +import { MatrixClientPeg } from "../../../MatrixClientPeg"; +import { setRoomNotifsState } from "../../../RoomNotifs"; // TODO: Remove banner on launch: https://github.com/vector-im/riot-web/issues/14231 // TODO: Rename on launch: https://github.com/vector-im/riot-web/issues/14231 @@ -73,13 +75,11 @@ const contextMenuBelow = (elementRect) => { return {left, top, chevronFace}; }; -type State = ALL_MESSAGES_LOUD | ALL_MESSAGES | MENTIONS_ONLY | MUTE; - interface INotifOptionProps { active: boolean; iconClassName: string; label: string; - onClick(); + onClick(ev: ButtonEvent); } const NotifOption: React.FC = ({active, onClick, iconClassName, label}) => { @@ -203,8 +203,32 @@ export default class RoomTile2 extends React.Component { this.setState({generalMenuDisplayed: false}); // hide the menu }; + private async saveNotifState(ev: ButtonEvent, newState: ALL_MESSAGES_LOUD | ALL_MESSAGES | MENTIONS_ONLY | MUTE) { + ev.preventDefault(); + ev.stopPropagation(); + if (MatrixClientPeg.get().isGuest()) return; + + try { + // TODO add local echo + await setRoomNotifsState(this.props.room.roomId, newState); + } catch (error) { + // TODO: some form of error notification to the user to inform them that their state change failed. + console.error(error); + } + + // Close the context menu + this.setState({ + notificationsMenuDisplayed: false, + }); + } + + private onClickAllNotifs = ev => this.saveNotifState(ev, ALL_MESSAGES); + private onClickAlertMe = ev => this.saveNotifState(ev, ALL_MESSAGES_LOUD); + private onClickMentions = ev => this.saveNotifState(ev, MENTIONS_ONLY); + private onClickMute = ev => this.saveNotifState(ev, MUTE); + private renderNotificationsMenu(): React.ReactElement { - if (this.props.isMinimized) return null; // no menu when minimized + if (this.props.isMinimized || MatrixClientPeg.get().isGuest()) return null; // no menu when minimized or guest const state = getRoomNotifsState(this.props.room.roomId); @@ -219,25 +243,25 @@ export default class RoomTile2 extends React.Component { label={_t("Use default")} active={state === ALL_MESSAGES} iconClassName="mx_RoomTile2_iconBell" - onClick={this._onClickAllNotifs} + onClick={this.onClickAllNotifs} /> From d2fb30a2116313c70943eb0e7bc37e644c2a7e7f Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Tue, 30 Jun 2020 23:52:13 +0100 Subject: [PATCH 59/91] Hide scrollbar without pixel jumping --- src/components/structures/LeftPanel2.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index 0f614435e5..d34986f981 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -15,6 +15,7 @@ limitations under the License. */ import * as React from "react"; +import classnames from 'classnames'; import { createRef } from "react"; import TagPanel from "./TagPanel"; import classNames from "classnames"; @@ -205,6 +206,11 @@ export default class LeftPanel2 extends React.Component { "mx_LeftPanel2_minimized": this.props.isMinimized, }); + const className = classnames( + "mx_LeftPanel2_actualRoomListContainer", + "mx_AutoHideScrollbar", + ); + return (
{tagPanel} @@ -212,7 +218,7 @@ export default class LeftPanel2 extends React.Component { {this.renderHeader()} {this.renderSearchExplore()}
{roomList}
From f935303eeb65f96d0822a7ac9ed3d316c6ee16f6 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 30 Jun 2020 18:51:59 -0600 Subject: [PATCH 60/91] Change default number of rooms visible to 10 Fixes https://github.com/vector-im/riot-web/issues/14266 --- src/stores/room-list/ListLayout.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts index 56f94ccd9a..2cc8eda510 100644 --- a/src/stores/room-list/ListLayout.ts +++ b/src/stores/room-list/ListLayout.ts @@ -85,10 +85,8 @@ export class ListLayout { } public get defaultVisibleTiles(): number { - // TODO: Remove dogfood flag: https://github.com/vector-im/riot-web/issues/14231 - // TODO: Resolve dogfooding: https://github.com/vector-im/riot-web/issues/14137 - const val = Number(localStorage.getItem("mx_dogfood_rl_defTiles") || 4); - return val + RESIZER_BOX_FACTOR; + // 10 is what "feels right", and mostly subject to design's opinion. + return 10 + RESIZER_BOX_FACTOR; } public calculateTilesToPixelsMin(maxTiles: number, n: number, possiblePadding: number): number { From 8cfe12b817995be90ad68083a49a5263fc6fe0fd Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 30 Jun 2020 18:52:13 -0600 Subject: [PATCH 61/91] Add a layout reset function For https://github.com/vector-im/riot-web/issues/14265 Intended to be accessed via `mx_RoomListStore2.resetLayout()` --- src/stores/room-list/ListLayout.ts | 4 ++++ src/stores/room-list/RoomListStore2.ts | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts index 2cc8eda510..d8564bf947 100644 --- a/src/stores/room-list/ListLayout.ts +++ b/src/stores/room-list/ListLayout.ts @@ -120,6 +120,10 @@ export class ListLayout { return px / this.tileHeight; } + public reset() { + localStorage.removeItem(this.key); + } + private save() { localStorage.setItem(this.key, JSON.stringify(this.serialize())); } diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index 497b8e5530..ac2324295e 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -30,6 +30,7 @@ import { TagWatcher } from "./TagWatcher"; import RoomViewStore from "../RoomViewStore"; import { Algorithm, LIST_UPDATED_EVENT } from "./algorithms/Algorithm"; import { EffectiveMembership, getEffectiveMembership } from "./membership"; +import { ListLayout } from "./ListLayout"; interface IState { tagsEnabled?: boolean; @@ -401,6 +402,15 @@ export class RoomListStore2 extends AsyncStore { this.emit(LISTS_UPDATE_EVENT, this); } + // Note: this primarily exists for debugging, and isn't really intended to be used by anything. + public async resetLayouts() { + console.warn("Resetting layouts for room list"); + for (const tagId of Object.keys(this.orderedLists)) { + new ListLayout(tagId).reset(); + } + await this.regenerateAllLists(); + } + public addFilter(filter: IFilterCondition): void { // TODO: Remove debug: https://github.com/vector-im/riot-web/issues/14035 console.log("Adding filter condition:", filter); From 7674030c6eb32d7d9ede6f92e64be697f4b37bb1 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 30 Jun 2020 19:14:36 -0600 Subject: [PATCH 62/91] Show 'show more' when there are less tiles than the default For example, if you only have 3/10 rooms required for the default then resize smaller, we should have a 'show more' button. This works by changing the rendering to be slightly more efficient and only looping over what is seen (renderVisibleTiles(), using this.numTiles in place of tiles.length) and using a new setVisibleTilesWithin() function on the layout. Previously resizing the 3/10 case would be setting visibleTiles to ~8 instead of ~1 like it should (because the getter returns a default). --- src/components/views/rooms/RoomSublist2.tsx | 39 ++++++++++++--------- src/stores/room-list/ListLayout.ts | 8 +++++ 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 58ebf54bf7..6682527254 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -91,6 +91,12 @@ export default class RoomSublist2 extends React.Component { return (this.props.rooms || []).length; } + private get numVisibleTiles(): number { + if (!this.props.layout) return 0; + const nVisible = Math.floor(this.props.layout.visibleTiles); + return Math.min(nVisible, this.numTiles); + } + public componentDidUpdate() { this.state.notificationState.setRooms(this.props.rooms); } @@ -107,7 +113,7 @@ export default class RoomSublist2 extends React.Component { private onResize = (e: React.MouseEvent, data: ResizeCallbackData) => { const direction = e.movementY < 0 ? -1 : +1; const tileDiff = this.props.layout.pixelsToTiles(Math.abs(e.movementY)) * direction; - this.props.layout.visibleTiles += tileDiff; + this.props.layout.setVisibleTilesWithin(tileDiff, this.numTiles); this.forceUpdate(); // because the layout doesn't trigger a re-render }; @@ -173,13 +179,17 @@ export default class RoomSublist2 extends React.Component { } }; - private renderTiles(): React.ReactElement[] { - if (this.props.layout && this.props.layout.isCollapsed) return []; // don't waste time on rendering + private renderVisibleTiles(): React.ReactElement[] { + if (this.props.layout && this.props.layout.isCollapsed) { + // don't waste time on rendering + return []; + } const tiles: React.ReactElement[] = []; if (this.props.rooms) { - for (const room of this.props.rooms) { + const visibleRooms = this.props.rooms.slice(0, this.numVisibleTiles); + for (const room of visibleRooms) { tiles.push( { public render(): React.ReactElement { // TODO: Error boundary: https://github.com/vector-im/riot-web/issues/14185 - const tiles = this.renderTiles(); + const visibleTiles = this.renderVisibleTiles(); const classes = classNames({ 'mx_RoomSublist2': true, @@ -347,13 +357,10 @@ export default class RoomSublist2 extends React.Component { }); let content = null; - if (tiles.length > 0) { + if (visibleTiles.length > 0) { const layout = this.props.layout; // to shorten calls - const nVisible = Math.floor(layout.visibleTiles); - const visibleTiles = tiles.slice(0, nVisible); - - const maxTilesFactored = layout.tilesWithResizerBoxFactor(tiles.length); + const maxTilesFactored = layout.tilesWithResizerBoxFactor(this.numTiles); const showMoreBtnClasses = classNames({ 'mx_RoomSublist2_showNButton': true, 'mx_RoomSublist2_isCutting': this.state.isResizing && layout.visibleTiles < maxTilesFactored, @@ -363,9 +370,9 @@ export default class RoomSublist2 extends React.Component { // floats above the resize handle, if we have one present. If the user has all // tiles visible, it becomes 'show less'. let showNButton = null; - if (tiles.length > nVisible) { + if (this.numTiles > this.numVisibleTiles) { // we have a cutoff condition - add the button to show all - const numMissing = tiles.length - visibleTiles.length; + const numMissing = this.numTiles - visibleTiles.length; let showMoreText = ( {_t("Show %(count)s more", {count: numMissing})} @@ -380,7 +387,7 @@ export default class RoomSublist2 extends React.Component { {showMoreText}
); - } else if (tiles.length <= nVisible && tiles.length > this.props.layout.defaultVisibleTiles) { + } else if (this.numTiles <= this.numVisibleTiles && this.numTiles > this.props.layout.defaultVisibleTiles) { // we have all tiles visible - add a button to show less let showLessText = ( @@ -400,7 +407,7 @@ export default class RoomSublist2 extends React.Component { // Figure out if we need a handle let handles = ['s']; - if (layout.visibleTiles >= tiles.length && tiles.length <= layout.minVisibleTiles) { + if (layout.visibleTiles >= this.numTiles && this.numTiles <= layout.minVisibleTiles) { handles = []; // no handles, we're at a minimum } @@ -419,9 +426,9 @@ export default class RoomSublist2 extends React.Component { if (showNButton) padding += SHOW_N_BUTTON_HEIGHT; padding += RESIZE_HANDLE_HEIGHT; // always append the handle height - const relativeTiles = layout.tilesWithPadding(tiles.length, padding); + const relativeTiles = layout.tilesWithPadding(this.numTiles, padding); const minTilesPx = layout.calculateTilesToPixelsMin(relativeTiles, layout.minVisibleTiles, padding); - const maxTilesPx = layout.tilesToPixelsWithPadding(tiles.length, padding); + const maxTilesPx = layout.tilesToPixelsWithPadding(this.numTiles, padding); const tilesWithoutPadding = Math.min(relativeTiles, layout.visibleTiles); const tilesPx = layout.calculateTilesToPixelsMin(relativeTiles, tilesWithoutPadding, padding); diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts index d8564bf947..528276e801 100644 --- a/src/stores/room-list/ListLayout.ts +++ b/src/stores/room-list/ListLayout.ts @@ -89,6 +89,14 @@ export class ListLayout { return 10 + RESIZER_BOX_FACTOR; } + public setVisibleTilesWithin(diff: number, maxPossible: number) { + if (this.visibleTiles > maxPossible) { + this.visibleTiles = maxPossible + diff; + } else { + this.visibleTiles += diff; + } + } + public calculateTilesToPixelsMin(maxTiles: number, n: number, possiblePadding: number): number { // Only apply the padding if we're about to use maxTiles as we need to // plan for the padding. If we're using n, the padding is already accounted From 8cfbfd4221f962f6ae36a154b9a5210b43c2e31e Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 30 Jun 2020 19:20:11 -0600 Subject: [PATCH 63/91] Increase RESIZER_BOX_FACTOR to account for overlap from handle Fixes https://github.com/vector-im/riot-web/issues/14136 The resizer handle wasn't being considered in this. 78% is both verified through mathematics and playing with it manually. --- src/stores/room-list/ListLayout.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/stores/room-list/ListLayout.ts b/src/stores/room-list/ListLayout.ts index 528276e801..efb0c4bdfb 100644 --- a/src/stores/room-list/ListLayout.ts +++ b/src/stores/room-list/ListLayout.ts @@ -18,9 +18,9 @@ import { TagID } from "./models"; const TILE_HEIGHT_PX = 44; -// the .65 comes from the CSS where the show more button is -// mathematically 65% of a tile when floating. -const RESIZER_BOX_FACTOR = 0.65; +// this comes from the CSS where the show more button is +// mathematically this percent of a tile when floating. +const RESIZER_BOX_FACTOR = 0.78; interface ISerializedListLayout { numTiles: number; From d402808101f77d0319634efe67a7354c0da62308 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 30 Jun 2020 19:31:59 -0600 Subject: [PATCH 64/91] Disable use of account-level ordering options in new room list Fixes https://github.com/vector-im/riot-web/issues/14069 We can't drop them completely for compatibility with the old room list. --- .../tabs/user/PreferencesUserSettingsTab.js | 16 +++++++++++++++- src/settings/Settings.js | 2 ++ src/stores/room-list/RoomListStore2.ts | 9 ++------- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js index bdb2a9ffc4..592331f897 100644 --- a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js @@ -23,6 +23,7 @@ import SettingsStore from "../../../../../settings/SettingsStore"; import Field from "../../../elements/Field"; import * as sdk from "../../../../.."; import PlatformPeg from "../../../../../PlatformPeg"; +import {RoomListStoreTempProxy} from "../../../../../stores/room-list/RoomListStoreTempProxy"; export default class PreferencesUserSettingsTab extends React.Component { static ROOM_LIST_SETTINGS = [ @@ -31,6 +32,19 @@ export default class PreferencesUserSettingsTab extends React.Component { 'breadcrumbs', ]; + // TODO: Remove temp structures: https://github.com/vector-im/riot-web/issues/14231 + static ROOM_LIST_2_SETTINGS = [ + 'breadcrumbs', + ]; + + // TODO: Remove temp structures: https://github.com/vector-im/riot-web/issues/14231 + static ELIGIBLE_ROOM_LIST_SETTINGS = () => { + if (RoomListStoreTempProxy.isUsingNewStore()) { + return PreferencesUserSettingsTab.ROOM_LIST_2_SETTINGS; + } + return PreferencesUserSettingsTab.ROOM_LIST_SETTINGS; + }; + static COMPOSER_SETTINGS = [ 'MessageComposerInput.autoReplaceEmoji', 'MessageComposerInput.suggestEmoji', @@ -175,7 +189,7 @@ export default class PreferencesUserSettingsTab extends React.Component {
{_t("Room list")} - {this._renderGroup(PreferencesUserSettingsTab.ROOM_LIST_SETTINGS)} + {this._renderGroup(PreferencesUserSettingsTab.ELIGIBLE_ROOM_LIST_SETTINGS())}
diff --git a/src/settings/Settings.js b/src/settings/Settings.js index 820329f6c6..cc45bbb4c7 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -478,11 +478,13 @@ export const SETTINGS = { deny: [], }, }, + // TODO: Remove setting: https://github.com/vector-im/riot-web/issues/14231 "RoomList.orderAlphabetically": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, displayName: _td("Order rooms by name"), default: false, }, + // TODO: Remove setting: https://github.com/vector-im/riot-web/issues/14231 "RoomList.orderByImportance": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, displayName: _td("Show rooms with unread notifications first"), diff --git a/src/stores/room-list/RoomListStore2.ts b/src/stores/room-list/RoomListStore2.ts index 497b8e5530..9edfef654c 100644 --- a/src/stores/room-list/RoomListStore2.ts +++ b/src/stores/room-list/RoomListStore2.ts @@ -50,8 +50,6 @@ export class RoomListStore2 extends AsyncStore { private tagWatcher = new TagWatcher(this); private readonly watchedSettings = [ - 'RoomList.orderAlphabetically', - 'RoomList.orderByImportance', 'feature_custom_tags', ]; @@ -338,11 +336,8 @@ export class RoomListStore2 extends AsyncStore { } private async updateAlgorithmInstances() { - const orderByImportance = SettingsStore.getValue("RoomList.orderByImportance"); - const orderAlphabetically = SettingsStore.getValue("RoomList.orderAlphabetically"); - - const defaultSort = orderAlphabetically ? SortAlgorithm.Alphabetic : SortAlgorithm.Recent; - const defaultOrder = orderByImportance ? ListAlgorithm.Importance : ListAlgorithm.Natural; + const defaultSort = SortAlgorithm.Alphabetic; + const defaultOrder = ListAlgorithm.Natural; for (const tag of Object.keys(this.orderedLists)) { const definedSort = this.getTagSorting(tag); From 0868af650a86bdf956cd25516c2ea47a47c0f68e Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 30 Jun 2020 19:37:00 -0600 Subject: [PATCH 65/91] Appease the linter --- .../views/settings/tabs/user/PreferencesUserSettingsTab.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js index 592331f897..40b622cf37 100644 --- a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js @@ -38,7 +38,7 @@ export default class PreferencesUserSettingsTab extends React.Component { ]; // TODO: Remove temp structures: https://github.com/vector-im/riot-web/issues/14231 - static ELIGIBLE_ROOM_LIST_SETTINGS = () => { + static eligibleRoomListSettings = () => { if (RoomListStoreTempProxy.isUsingNewStore()) { return PreferencesUserSettingsTab.ROOM_LIST_2_SETTINGS; } @@ -189,7 +189,7 @@ export default class PreferencesUserSettingsTab extends React.Component {
{_t("Room list")} - {this._renderGroup(PreferencesUserSettingsTab.ELIGIBLE_ROOM_LIST_SETTINGS())} + {this._renderGroup(PreferencesUserSettingsTab.eligibleRoomListSettings())}
From ad982624fee59426e138ffb84af7b3aebf23ffde Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 30 Jun 2020 19:42:02 -0600 Subject: [PATCH 66/91] Remove context menu on invites in new room list Fixes https://github.com/vector-im/riot-web/issues/14198 For both, the decision has been made to not have a context menu pending further considerations of where invites should (and should not) be. Likely this will be dealt with in FTUE Notifications. --- src/components/views/rooms/RoomSublist2.tsx | 7 ++++++- src/components/views/rooms/RoomTile2.tsx | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 58ebf54bf7..461098cb63 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -32,7 +32,7 @@ import StyledCheckbox from "../elements/StyledCheckbox"; import StyledRadioButton from "../elements/StyledRadioButton"; import RoomListStore from "../../../stores/room-list/RoomListStore2"; import { ListAlgorithm, SortAlgorithm } from "../../../stores/room-list/algorithms/models"; -import { TagID } from "../../../stores/room-list/models"; +import { DefaultTagID, TagID } from "../../../stores/room-list/models"; // TODO: Remove banner on launch: https://github.com/vector-im/riot-web/issues/14231 // TODO: Rename on launch: https://github.com/vector-im/riot-web/issues/14231 @@ -196,6 +196,11 @@ export default class RoomSublist2 extends React.Component { } private renderMenu(): React.ReactElement { + // TODO: Get a proper invite context menu, or take invites out of the room list. + if (this.props.tagId === DefaultTagID.Invite) { + return null; + } + let contextMenu = null; if (this.state.menuDisplayed) { const elementRect = this.menuButtonRef.current.getBoundingClientRect(); diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 1284728855..2f1211608c 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -156,6 +156,11 @@ export default class RoomTile2 extends React.Component { private renderGeneralMenu(): React.ReactElement { if (this.props.isMinimized) return null; // no menu when minimized + // TODO: Get a proper invite context menu, or take invites out of the room list. + if (this.props.tag === DefaultTagID.Invite) { + return null; + } + let contextMenu = null; if (this.state.generalMenuDisplayed) { // The context menu appears within the list, so use the room tile as a reference point From 5a43acd42a1bc570611634b1e9c14abc35bb94d5 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 30 Jun 2020 19:51:28 -0600 Subject: [PATCH 67/91] Fix reaction event crashes in message previews Fixes https://github.com/vector-im/riot-web/issues/14224 --- src/stores/room-list/previews/ReactionEventPreview.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/stores/room-list/previews/ReactionEventPreview.ts b/src/stores/room-list/previews/ReactionEventPreview.ts index d58f592feb..07fac107ca 100644 --- a/src/stores/room-list/previews/ReactionEventPreview.ts +++ b/src/stores/room-list/previews/ReactionEventPreview.ts @@ -22,8 +22,11 @@ import { _t } from "../../../languageHandler"; export class ReactionEventPreview implements IPreview { public getTextFor(event: MatrixEvent, tagId?: TagID): string { - const reaction = event.getRelation().key; - if (!reaction) return; + const relation = event.getRelation(); + if (!relation) return null; // invalid reaction (probably redacted) + + const reaction = relation.key; + if (!reaction) return null; // invalid reaction (unknown format) if (isSelf(event) || !shouldPrefixMessagesIn(event.getRoomId(), tagId)) { return reaction; From b5014282a4ed02ca8c186d95a0093f75bba07e11 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 1 Jul 2020 13:59:50 +0100 Subject: [PATCH 68/91] Iterate PR based on Figma design and feedback Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/_common.scss | 1 + res/css/views/rooms/_RoomTile2.scss | 5 +++++ src/components/structures/UserMenu.tsx | 1 + src/components/views/rooms/RoomTile2.tsx | 7 ++++--- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/res/css/_common.scss b/res/css/_common.scss index 880b01a10e..6e70618142 100644 --- a/res/css/_common.scss +++ b/res/css/_common.scss @@ -631,6 +631,7 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus { } .mx_AccessibleButton { + // pad the inside of the button so that the hover background is padded too padding-top: 12px; padding-bottom: 12px; text-decoration: none; diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss index 8933c73045..44c5b6ee17 100644 --- a/res/css/views/rooms/_RoomTile2.scss +++ b/res/css/views/rooms/_RoomTile2.scss @@ -92,6 +92,7 @@ limitations under the License. justify-content: center; } + // The context menu buttons are hidden by default .mx_RoomTile2_menuButton, .mx_RoomTile2_notificationsButton { width: 20px; @@ -114,6 +115,7 @@ limitations under the License. } } + // If the room has an overriden notification setting then we always show the notifications menu button .mx_RoomTile2_notificationsButton.mx_RoomTile2_notificationsButton_show { display: block; } @@ -166,6 +168,9 @@ limitations under the License. .mx_RoomTile2_iconBellCrossed::before { mask-image: url('$(res)/img/feather-customised/bell-crossed.svg'); } +.mx_RoomTile2_iconBellMentions::before { + mask-image: url('$(res)/img/feather-customised/bell-mentions.custom.svg'); +} .mx_RoomTile2_iconCheck::before { mask-image: url('$(res)/img/feather-customised/check.svg'); } diff --git a/src/components/structures/UserMenu.tsx b/src/components/structures/UserMenu.tsx index 4a45162902..d6771f3011 100644 --- a/src/components/structures/UserMenu.tsx +++ b/src/components/structures/UserMenu.tsx @@ -202,6 +202,7 @@ export default class UserMenu extends React.Component { return ( { const left = elementRect.left + window.pageXOffset - 6; - let top = elementRect.bottom + window.pageYOffset + 21; + let top = elementRect.bottom + window.pageYOffset + 17; const chevronFace = "none"; return {left, top, chevronFace}; }; @@ -209,10 +209,11 @@ export default class RoomTile2 extends React.Component { if (MatrixClientPeg.get().isGuest()) return; try { - // TODO add local echo + // TODO add local echo - https://github.com/vector-im/riot-web/issues/14280 await setRoomNotifsState(this.props.room.roomId, newState); } catch (error) { // TODO: some form of error notification to the user to inform them that their state change failed. + // https://github.com/vector-im/riot-web/issues/14281 console.error(error); } @@ -254,7 +255,7 @@ export default class RoomTile2 extends React.Component { Date: Wed, 1 Jul 2020 02:22:32 +0000 Subject: [PATCH 69/91] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (2355 of 2355 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/ --- src/i18n/strings/zh_Hant.json | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 8f4d9b12d3..0400771bfb 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2593,5 +2593,25 @@ "%(senderName)s changed the room topic": "%(senderName)s 變更了聊天室主題", "New spinner design": "新的微調器設計", "Use a more compact ‘Modern’ layout": "使用更簡潔的「現代」佈局", - "Message deleted on %(date)s": "訊息刪除於 %(date)s" + "Message deleted on %(date)s": "訊息刪除於 %(date)s", + "Wrong file type": "錯誤的檔案類型", + "Wrong Recovery Key": "錯誤的復原金鑰", + "Invalid Recovery Key": "無效的復原金鑰", + "Security Phrase": "安全密語", + "Enter your Security Phrase or to continue.": "輸入您的安全密語或以繼續。", + "Security Key": "安全金鑰", + "Use your Security Key to continue.": "使用您的安全金鑰以繼續。", + "Safeguard against losing access to encrypted messages & data by backing up encryption keys on your server.": "透過備份您伺服器上的加密金鑰來防止失去對您已加密的訊息與資料的存取權。", + "Generate a Security Key": "生成加密金鑰", + "We’ll generate a Security Key for you to store somewhere safe, like a password manager or a safe.": "我們將會為您生成一把安全金鑰,供您存放在安全的地方,如密碼管理員或保險櫃等。", + "Enter a Security Phrase": "輸入安全密語", + "Use a secret phrase only you know, and optionally save a Security Key to use for backup.": "使用僅有您知道的祕密短語,並選擇性地儲存安全金鑰以供備用。", + "Enter a security phrase only you know, as it’s used to safeguard your data. To be secure, you shouldn’t re-use your account password.": "輸入僅有您知道的安全短語,其用於保護您的資料。安全起見,請勿重複使用您的帳號密碼。", + "Store your Security Key somewhere safe, like a password manager or a safe, as it’s used to safeguard your encrypted data.": "將您的安全金鑰存放在某個安全的地方,如密碼管理員或保險櫃,其用於保護您的加密資料。", + "If you cancel now, you may lose encrypted messages & data if you lose access to your logins.": "如果您現在取消,在您失去對您的登入的存取權時可能會遺失已加密的訊息與資料。", + "You can also set up Secure Backup & manage your keys in Settings.": "您也可以在設定中設定安全備份並管理您的金鑰。", + "Set up Secure backup": "設定安全備份", + "Set a Security Phrase": "設定安全密語", + "Confirm Security Phrase": "確認安全密語", + "Save your Security Key": "儲存您的安全金鑰" } From 2db0bb570a15fadc758e0235d69f161053376615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20C?= Date: Wed, 1 Jul 2020 07:48:14 +0000 Subject: [PATCH 70/91] Translated using Weblate (French) Currently translated at 100.0% (2355 of 2355 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/ --- src/i18n/strings/fr.json | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index bc0cccbe07..3beb6ea836 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2594,5 +2594,25 @@ "You changed the room topic": "Vous avez changé le sujet du salon", "%(senderName)s changed the room topic": "%(senderName)s a changé le sujet du salon", "New spinner design": "Nouveau design du spinner", - "Message deleted on %(date)s": "Message supprimé le %(date)s" + "Message deleted on %(date)s": "Message supprimé le %(date)s", + "Wrong file type": "Mauvais type de fichier", + "Wrong Recovery Key": "Mauvaise clé de récupération", + "Invalid Recovery Key": "Clé de récupération non valide", + "Security Phrase": "Phrase de sécurité", + "Enter your Security Phrase or to continue.": "Saisissez votre phrase de sécurité ou pour continuer.", + "Security Key": "Clé de sécurité", + "Use your Security Key to continue.": "Utilisez votre clé de sécurité pour continuer.", + "Safeguard against losing access to encrypted messages & data by backing up encryption keys on your server.": "Protection afin d’éviter de perdre l’accès aux messages et données chiffrés en sauvegardant les clés de chiffrement sur votre serveur.", + "Generate a Security Key": "Générer une clé de sécurité", + "We’ll generate a Security Key for you to store somewhere safe, like a password manager or a safe.": "Nous génèrerons une clé de sécurité que vous devrez stocker dans un endroit sûr, comme un gestionnaire de mots de passe ou un coffre.", + "Enter a Security Phrase": "Saisir une phrase de sécurité", + "Use a secret phrase only you know, and optionally save a Security Key to use for backup.": "Utilisez une phrase secrète que vous êtes seul·e à connaître et enregistrez éventuellement une clé de sécurité à utiliser pour la sauvegarde.", + "Enter a security phrase only you know, as it’s used to safeguard your data. To be secure, you shouldn’t re-use your account password.": "Saisissez une phrase de sécurité que vous seul·e connaissez, car elle est utilisée pour protéger vos données. Pour plus de sécurité, vous ne devriez pas réutiliser le mot de passe de votre compte.", + "Store your Security Key somewhere safe, like a password manager or a safe, as it’s used to safeguard your encrypted data.": "Stockez votre clé de sécurité dans un endroit sûr, comme un gestionnaire de mots de passe ou un coffre, car elle est utilisée pour protéger vos données chiffrées.", + "If you cancel now, you may lose encrypted messages & data if you lose access to your logins.": "Si vous annulez maintenant, vous pourriez perdre vos messages et données chiffrés si vous perdez l’accès à vos identifiants.", + "You can also set up Secure Backup & manage your keys in Settings.": "Vous pouvez aussi configurer la sauvegarde sécurisée et gérer vos clés depuis les paramètres.", + "Set up Secure backup": "Configurer la sauvegarde sécurisée", + "Set a Security Phrase": "Définir une phrase de sécurité", + "Confirm Security Phrase": "Confirmer la phrase de sécurité", + "Save your Security Key": "Sauvegarder votre clé de sécurité" } From 5ca4d352eec6c6c84e95a83dcde6254bf7944ada Mon Sep 17 00:00:00 2001 From: XoseM Date: Wed, 1 Jul 2020 05:16:00 +0000 Subject: [PATCH 71/91] Translated using Weblate (Galician) Currently translated at 100.0% (2355 of 2355 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/gl/ --- src/i18n/strings/gl.json | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index fa8e11863f..00ef29f9fd 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -2425,5 +2425,26 @@ "%(senderName)s invited %(targetName)s": "%(senderName)s convidou a %(targetName)s", "You changed the room topic": "Cambiaches o tema da sala", "%(senderName)s changed the room topic": "%(senderName)s cambiou o asunto da sala", - "Message deleted on %(date)s": "Mensaxe eliminada o %(date)s" + "Message deleted on %(date)s": "Mensaxe eliminada o %(date)s", + "Wrong file type": "Tipo de ficheiro erróneo", + "Looks good!": "Pinta ben!", + "Wrong Recovery Key": "Chave de recuperación errónea", + "Invalid Recovery Key": "Chave de recuperación non válida", + "Security Phrase": "Frase de seguridade", + "Enter your Security Phrase or to continue.": "Escribe a túa Frase de Seguridade ou para continuar.", + "Security Key": "Chave de Seguridade", + "Use your Security Key to continue.": "Usa a túa Chave de Seguridade para continuar.", + "Safeguard against losing access to encrypted messages & data by backing up encryption keys on your server.": "Protección contra a perda do acceso ás mensaxes cifradas e datos facendo unha copia de apoio das chaves no servidor.", + "Generate a Security Key": "Crear unha Chave de Seguridade", + "We’ll generate a Security Key for you to store somewhere safe, like a password manager or a safe.": "Crearemos unha Chave de Seguridade para que a gardes nalgún lugar seguro, como un xestor de contrasinais ou caixa de seguridade.", + "Enter a Security Phrase": "Escribe unha Frase de Seguridade", + "Use a secret phrase only you know, and optionally save a Security Key to use for backup.": "Usa unha frase segreda que só ti coñezas, e de xeito optativo unha Chave de Seguridade para usar como apoio.", + "Enter a security phrase only you know, as it’s used to safeguard your data. To be secure, you shouldn’t re-use your account password.": "Escribe unha frase de seguridade que só ti coñezas, será utilizada para protexer os teus datos. Para maior seguridade, non deberías reutilizar o contrasinal da conta.", + "Store your Security Key somewhere safe, like a password manager or a safe, as it’s used to safeguard your encrypted data.": "Garda a Chave de Seguridade nalgún lugar seguro, como un xestor de contrasinais ou caixa de seguridade, será utiizada para protexer os teus datos cifrados.", + "If you cancel now, you may lose encrypted messages & data if you lose access to your logins.": "Se cancelas agora, poderías perder mensaxes e datos cifrados se perdes o acceso ós datos de conexión.", + "You can also set up Secure Backup & manage your keys in Settings.": "Podes configurar a Copia de apoio Segura e xestionar as chaves en Axustes.", + "Set up Secure backup": "Configurar Copia de apoio Segura", + "Set a Security Phrase": "Establece a Frase de Seguridade", + "Confirm Security Phrase": "Confirma a Frase de Seguridade", + "Save your Security Key": "Garda a Chave de Seguridade" } From 1e81049801c6dd1aec0c0d53c4518ac03e374033 Mon Sep 17 00:00:00 2001 From: Michael Albert Date: Wed, 1 Jul 2020 11:49:01 +0000 Subject: [PATCH 72/91] Translated using Weblate (German) Currently translated at 99.2% (2336 of 2355 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/de/ --- src/i18n/strings/de_DE.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 4786845418..4b305cd5b6 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -2533,5 +2533,8 @@ "%(senderName)s changed the room topic": "%(senderName)s hat das Raumthema geändert", "New spinner design": "Neue Warteanimation", "Use a more compact ‘Modern’ layout": "Verwende ein kompakteres 'modernes' Layout", - "Message deleted on %(date)s": "Nachricht am %(date)s gelöscht" + "Message deleted on %(date)s": "Nachricht am %(date)s gelöscht", + "Wrong file type": "Falscher Dateityp", + "Wrong Recovery Key": "Falscher Wiederherstellungsschlüssel", + "Invalid Recovery Key": "Ungültiger Wiederherstellungsschlüssel" } From 9434923da399c7a4e1664c63fcfa9b68ef0b822b Mon Sep 17 00:00:00 2001 From: strix aluco Date: Wed, 1 Jul 2020 03:52:28 +0000 Subject: [PATCH 73/91] Translated using Weblate (Ukrainian) Currently translated at 26.2% (618 of 2355 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/uk/ --- src/i18n/strings/uk.json | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index fb6657d6c1..207ed0a8e6 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -600,8 +600,8 @@ "Language and region": "Мова та регіон", "Account management": "Керування обліківкою", "Deactivating your account is a permanent action - be careful!": "Деактивація вашої обліківки є безповоротною дією — будьте обережні!", - "Deactivate Account": "Деактивувати обліківку", - "Deactivate account": "Деактивувати обліківку", + "Deactivate Account": "Знедіяти обліківку", + "Deactivate account": "Знедіяти обліківку", "Legal": "Правова інформація", "Credits": "Подяки", "For help with using Riot, click here.": "Якщо необхідна допомога у користуванні Riot'ом, клацніть тут.", @@ -624,7 +624,7 @@ "Link this email with your account in Settings to receive invites directly in Riot.": "Зв'яжіть цю е-пошту з вашою обліківкою у Налаштуваннях щоб отримувати сповіщення прямо у Riot.", "This invite to %(roomName)s was sent to %(email)s": "Це запрошення до %(roomName)s було надіслане на %(email)s", "Use an identity server in Settings to receive invites directly in Riot.": "Використовувати сервер ідентифікації у Налаштуваннях щоб отримувати запрошення прямо у Riot.", - "Are you sure you want to deactivate your account? This is irreversible.": "Ви впевнені у тому, що бажаєте деактивувати вашу обліківку? Це є безповоротним.", + "Are you sure you want to deactivate your account? This is irreversible.": "Ви впевнені у тому, що бажаєте знедіяти вашу обліківку? Це є безповоротним.", "Confirm account deactivation": "Підтвердьте деактивацію обліківки", "To continue, please enter your password:": "Щоб продовжити, введіть, будь ласка, ваш пароль:", "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Ваша обліківка стане назавжди невикористовною. Ви не матимете змоги увійти в неї і ніхто не зможе перереєструватись під цим користувацьким ID. Це призведе до виходу вашої обліківки з усіх кімнат та до видалення деталей вашої обліківки з вашого серверу ідентифікації. Ця дія є безповоротною.", @@ -660,5 +660,12 @@ "Room": "Кімната", "Failed to reject invite": "Не вдалось відхилити запрошення", "You have %(count)s unread notifications in a prior version of this room.|other": "Ви маєте %(count)s непрочитаних сповіщень у попередній версії цієї кімнати.", - "You have %(count)s unread notifications in a prior version of this room.|one": "У вас одне непрочитане сповіщення у попередній версії цієї кімнати." + "You have %(count)s unread notifications in a prior version of this room.|one": "У вас одне непрочитане сповіщення у попередній версії цієї кімнати.", + "Deactivate user?": "Знедіяти користувача?", + "Deactivating this user will log them out and prevent them from logging back in. Additionally, they will leave all the rooms they are in. This action cannot be reversed. Are you sure you want to deactivate this user?": "Знедіювання цього користувача виведе їх з системи і унеможливить вхід у майбутньому. До того ж, вони залишать усі кімнати, в яких перебувають. Ця дія є безповоротною. Ви впевнені, що хочете знедіяти цього користувача?", + "Deactivate user": "Знедіяти користувача", + "Failed to deactivate user": "Не вдалось знедіяти користувача", + "Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "Знедіювання вашої обліківки типово не призводить до забуття надісланих вами повідомлень. Якщо ви бажаєте щоб ми забули ваші повідомлення, поставте прапорець внизу.", + "Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "Видність повідомлень у Matrix є схожою до е-пошти. Забування нами ваших повідомлень означає, що надіслані вами повідомлення не будуть поширені будь-яким новим чи незареєстрованим користувачам, але зареєстровані користувачі, які мають доступ до цих повідомлень, і надалі матимуть доступ до їхніх копій.", + "Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "Забудьте, будь ласка, усі надіслані мною повідомлення після знедіювання моєї обліківки. (Попередження: після цього майбутні користувачі бачитимуть неповні бесіди)" } From 3b7b6eca6f163618c1806ab7cb88a020bfb7ac94 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 1 Jul 2020 14:05:33 +0100 Subject: [PATCH 74/91] align context menus even better Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/rooms/RoomTile2.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index d518c74aa7..e12be8b30e 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -69,7 +69,8 @@ interface IState { } const contextMenuBelow = (elementRect) => { - const left = elementRect.left + window.pageXOffset - 6; + // align the context menu's icons with the icon which opened the context menu + const left = elementRect.left + window.pageXOffset - 9; let top = elementRect.bottom + window.pageYOffset + 17; const chevronFace = "none"; return {left, top, chevronFace}; From 0cbc506ad615aaa5bd37e732edf9712021c9a175 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 1 Jul 2020 14:26:50 +0100 Subject: [PATCH 75/91] add missing svg Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/img/feather-customised/bell-mentions.custom.svg | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 res/img/feather-customised/bell-mentions.custom.svg diff --git a/res/img/feather-customised/bell-mentions.custom.svg b/res/img/feather-customised/bell-mentions.custom.svg new file mode 100644 index 0000000000..fcc02f337f --- /dev/null +++ b/res/img/feather-customised/bell-mentions.custom.svg @@ -0,0 +1,3 @@ + + + From 9831698b1e004f7166e64c83a06583a1a162b9a8 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 1 Jul 2020 14:28:00 +0100 Subject: [PATCH 76/91] Hide notifications menu from invite tiles Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/rooms/RoomTile2.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 882bd21084..c9a1f39982 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -230,7 +230,10 @@ export default class RoomTile2 extends React.Component { private onClickMute = ev => this.saveNotifState(ev, MUTE); private renderNotificationsMenu(): React.ReactElement { - if (this.props.isMinimized || MatrixClientPeg.get().isGuest()) return null; // no menu when minimized or guest + if (this.props.isMinimized || MatrixClientPeg.get().isGuest() || this.props.tag === DefaultTagID.Invite) { + // the menu makes no sense in these cases so do not show one + return null; + } const state = getRoomNotifsState(this.props.room.roomId); From ad27dbbfab6e7d2c3cdc07fc48bbad237a9b0465 Mon Sep 17 00:00:00 2001 From: Jorik Schellekens Date: Wed, 1 Jul 2020 15:15:18 +0100 Subject: [PATCH 77/91] Clean up classnames --- src/components/structures/LeftPanel2.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/structures/LeftPanel2.tsx b/src/components/structures/LeftPanel2.tsx index d34986f981..ab117d55ed 100644 --- a/src/components/structures/LeftPanel2.tsx +++ b/src/components/structures/LeftPanel2.tsx @@ -15,7 +15,6 @@ limitations under the License. */ import * as React from "react"; -import classnames from 'classnames'; import { createRef } from "react"; import TagPanel from "./TagPanel"; import classNames from "classnames"; @@ -206,7 +205,7 @@ export default class LeftPanel2 extends React.Component { "mx_LeftPanel2_minimized": this.props.isMinimized, }); - const className = classnames( + const roomListClasses = classNames( "mx_LeftPanel2_actualRoomListContainer", "mx_AutoHideScrollbar", ); @@ -218,7 +217,7 @@ export default class LeftPanel2 extends React.Component { {this.renderHeader()} {this.renderSearchExplore()}
{roomList}
From 946fde5cc5fd24daa1ea7b66385112b17fad36a5 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 1 Jul 2020 11:59:32 -0600 Subject: [PATCH 78/91] Be consistent in visible tiles usage --- src/components/views/rooms/RoomSublist2.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 6682527254..fb955fcd57 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -370,7 +370,7 @@ export default class RoomSublist2 extends React.Component { // floats above the resize handle, if we have one present. If the user has all // tiles visible, it becomes 'show less'. let showNButton = null; - if (this.numTiles > this.numVisibleTiles) { + if (this.numTiles > visibleTiles.length) { // we have a cutoff condition - add the button to show all const numMissing = this.numTiles - visibleTiles.length; let showMoreText = ( @@ -387,7 +387,7 @@ export default class RoomSublist2 extends React.Component { {showMoreText}
); - } else if (this.numTiles <= this.numVisibleTiles && this.numTiles > this.props.layout.defaultVisibleTiles) { + } else if (this.numTiles <= visibleTiles.length && this.numTiles > this.props.layout.defaultVisibleTiles) { // we have all tiles visible - add a button to show less let showLessText = ( From 89bd572371e695e861b6d76c23943c1193ff65da Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 1 Jul 2020 23:05:37 +0100 Subject: [PATCH 79/91] Fix context menu nesting causing bubbling and instabilities Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/ContextMenu.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/structures/ContextMenu.js b/src/components/structures/ContextMenu.js index 98b0867ccc..a56a987fcf 100644 --- a/src/components/structures/ContextMenu.js +++ b/src/components/structures/ContextMenu.js @@ -116,6 +116,7 @@ export class ContextMenu extends React.Component { this.props.onFinished(); e.preventDefault(); + e.stopPropagation(); const x = e.clientX; const y = e.clientY; @@ -133,6 +134,12 @@ export class ContextMenu extends React.Component { } }; + onContextMenuPreventBubbling = (e) => { + // stop propagation so that any context menu handlers don't leak out of this context menu + // but do not inhibit the default browser menu + e.stopPropagation(); + }; + _onMoveFocus = (element, up) => { let descending = false; // are we currently descending or ascending through the DOM tree? @@ -324,7 +331,7 @@ export class ContextMenu extends React.Component { } return ( -
+
{ chevron } { props.children } From 5c2b291510aa2cbacd7785b0d9a37eca0844121f Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 1 Jul 2020 23:06:26 +0100 Subject: [PATCH 80/91] Support right click context menu interactions on Room List 2 Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/UserMenu.tsx | 40 ++++++++---- src/components/views/rooms/RoomSublist2.tsx | 42 ++++++++----- src/components/views/rooms/RoomTile2.tsx | 70 +++++++++++---------- 3 files changed, 92 insertions(+), 60 deletions(-) diff --git a/src/components/structures/UserMenu.tsx b/src/components/structures/UserMenu.tsx index d6771f3011..92a4666a9d 100644 --- a/src/components/structures/UserMenu.tsx +++ b/src/components/structures/UserMenu.tsx @@ -42,8 +42,10 @@ interface IProps { isMinimized: boolean; } +type PartialDOMRect = Pick; + interface IState { - menuDisplayed: boolean; + contextMenuPosition: PartialDOMRect; isDarkTheme: boolean; } @@ -56,7 +58,7 @@ export default class UserMenu extends React.Component { super(props); this.state = { - menuDisplayed: false, + contextMenuPosition: null, isDarkTheme: this.isUserOnDarkTheme(), }; @@ -106,13 +108,27 @@ export default class UserMenu extends React.Component { private onOpenMenuClick = (ev: InputEvent) => { ev.preventDefault(); ev.stopPropagation(); - this.setState({menuDisplayed: true}); + const target = ev.target as HTMLButtonElement; + this.setState({contextMenuPosition: target.getBoundingClientRect()}); + }; + + private onContextMenu = (ev: React.MouseEvent) => { + ev.preventDefault(); + ev.stopPropagation(); + this.setState({ + contextMenuPosition: { + left: ev.clientX, + top: ev.clientY, + width: 20, + height: 0, + }, + }); }; private onCloseMenu = (ev: InputEvent) => { ev.preventDefault(); ev.stopPropagation(); - this.setState({menuDisplayed: false}); + this.setState({contextMenuPosition: null}); }; private onSwitchThemeClick = () => { @@ -129,7 +145,7 @@ export default class UserMenu extends React.Component { const payload: OpenToTabPayload = {action: Action.ViewUserSettings, initialTabId: tabId}; defaultDispatcher.dispatch(payload); - this.setState({menuDisplayed: false}); // also close the menu + this.setState({contextMenuPosition: null}); // also close the menu }; private onShowArchived = (ev: ButtonEvent) => { @@ -145,7 +161,7 @@ export default class UserMenu extends React.Component { ev.stopPropagation(); Modal.createTrackedDialog('Report bugs & give feedback', '', RedesignFeedbackDialog); - this.setState({menuDisplayed: false}); // also close the menu + this.setState({contextMenuPosition: null}); // also close the menu }; private onSignOutClick = (ev: ButtonEvent) => { @@ -153,7 +169,7 @@ export default class UserMenu extends React.Component { ev.stopPropagation(); Modal.createTrackedDialog('Logout from LeftPanel', '', LogoutDialog); - this.setState({menuDisplayed: false}); // also close the menu + this.setState({contextMenuPosition: null}); // also close the menu }; private onHomeClick = (ev: ButtonEvent) => { @@ -164,7 +180,7 @@ export default class UserMenu extends React.Component { }; private renderContextMenu = (): React.ReactNode => { - if (!this.state.menuDisplayed) return null; + if (!this.state.contextMenuPosition) return null; let hostingLink; const signupLink = getHostingLink("user-context-menu"); @@ -198,13 +214,12 @@ export default class UserMenu extends React.Component { ); } - const elementRect = this.buttonRef.current.getBoundingClientRect(); return (
@@ -290,7 +305,8 @@ export default class UserMenu extends React.Component { onClick={this.onOpenMenuClick} inputRef={this.buttonRef} label={_t("Account settings")} - isExpanded={this.state.menuDisplayed} + isExpanded={!!this.state.contextMenuPosition} + onContextMenu={this.onContextMenu} >
diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index 461098cb63..36d38c7087 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -65,22 +65,21 @@ interface IProps { // TODO: Account for https://github.com/vector-im/riot-web/issues/14179 } +type PartialDOMRect = Pick; + interface IState { notificationState: ListNotificationState; - menuDisplayed: boolean; + contextMenuPosition: PartialDOMRect; isResizing: boolean; } export default class RoomSublist2 extends React.Component { - private headerButton = createRef(); - private menuButtonRef: React.RefObject = createRef(); - constructor(props: IProps) { super(props); this.state = { notificationState: new ListNotificationState(this.props.isInvite, this.props.tagId), - menuDisplayed: false, + contextMenuPosition: null, isResizing: false, }; this.state.notificationState.setRooms(this.props.rooms); @@ -132,11 +131,24 @@ export default class RoomSublist2 extends React.Component { private onOpenMenuClick = (ev: InputEvent) => { ev.preventDefault(); ev.stopPropagation(); - this.setState({menuDisplayed: true}); + const target = ev.target as HTMLButtonElement; + this.setState({contextMenuPosition: target.getBoundingClientRect()}); + }; + + private onContextMenu = (ev: React.MouseEvent) => { + ev.preventDefault(); + ev.stopPropagation(); + this.setState({ + contextMenuPosition: { + left: ev.clientX, + top: ev.clientY, + height: 0, + }, + }); }; private onCloseMenu = () => { - this.setState({menuDisplayed: false}); + this.setState({contextMenuPosition: null}); }; private onUnreadFirstChanged = async () => { @@ -202,15 +214,14 @@ export default class RoomSublist2 extends React.Component { } let contextMenu = null; - if (this.state.menuDisplayed) { - const elementRect = this.menuButtonRef.current.getBoundingClientRect(); + if (this.state.contextMenuPosition) { const isAlphabetical = RoomListStore.instance.getTagSorting(this.props.tagId) === SortAlgorithm.Alphabetic; const isUnreadFirst = RoomListStore.instance.getListOrder(this.props.tagId) === ListAlgorithm.Importance; contextMenu = (
@@ -261,9 +272,8 @@ export default class RoomSublist2 extends React.Component { {contextMenu} @@ -272,7 +282,7 @@ export default class RoomSublist2 extends React.Component { private renderHeader(): React.ReactElement { return ( - + {({onFocus, isActive, ref}) => { // TODO: Use onFocus: https://github.com/vector-im/riot-web/issues/14180 const tabIndex = isActive ? 0 : -1; @@ -317,12 +327,14 @@ export default class RoomSublist2 extends React.Component {
{this.props.label} @@ -347,7 +359,7 @@ export default class RoomSublist2 extends React.Component { const classes = classNames({ 'mx_RoomSublist2': true, - 'mx_RoomSublist2_hasMenuOpen': this.state.menuDisplayed, + 'mx_RoomSublist2_hasMenuOpen': !!this.state.contextMenuPosition, 'mx_RoomSublist2_minimized': this.props.isMinimized, }); diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index c9a1f39982..47b5b4206b 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -60,15 +60,17 @@ interface IProps { // TODO: Incoming call boxes: https://github.com/vector-im/riot-web/issues/14177 } +type PartialDOMRect = Pick; + interface IState { hover: boolean; notificationState: INotificationState; selected: boolean; - notificationsMenuDisplayed: boolean; - generalMenuDisplayed: boolean; + notificationsMenuPosition: PartialDOMRect; + generalMenuPosition: PartialDOMRect; } -const contextMenuBelow = (elementRect) => { +const contextMenuBelow = (elementRect: PartialDOMRect) => { // align the context menu's icons with the icon which opened the context menu const left = elementRect.left + window.pageXOffset - 9; let top = elementRect.bottom + window.pageYOffset + 17; @@ -103,9 +105,6 @@ const NotifOption: React.FC = ({active, onClick, iconClassNam }; export default class RoomTile2 extends React.Component { - private notificationsMenuButtonRef: React.RefObject = createRef(); - private generalMenuButtonRef: React.RefObject = createRef(); - // TODO: a11y: https://github.com/vector-im/riot-web/issues/14180 constructor(props: IProps) { @@ -115,8 +114,8 @@ export default class RoomTile2 extends React.Component { hover: false, notificationState: new TagSpecificNotificationState(this.props.room, this.props.tag), selected: ActiveRoomObserver.activeRoomId === this.props.room.roomId, - notificationsMenuDisplayed: false, - generalMenuDisplayed: false, + notificationsMenuPosition: null, + generalMenuPosition: null, }; ActiveRoomObserver.addListener(this.props.room.roomId, this.onActiveRoomUpdate); @@ -137,6 +136,8 @@ export default class RoomTile2 extends React.Component { }; private onTileClick = (ev: React.KeyboardEvent) => { + ev.preventDefault(); + ev.stopPropagation(); dis.dispatch({ action: 'view_room', // TODO: Support show_room_tile in new room list: https://github.com/vector-im/riot-web/issues/14233 @@ -153,25 +154,34 @@ export default class RoomTile2 extends React.Component { private onNotificationsMenuOpenClick = (ev: InputEvent) => { ev.preventDefault(); ev.stopPropagation(); - this.setState({notificationsMenuDisplayed: true}); + const target = ev.target as HTMLButtonElement; + this.setState({notificationsMenuPosition: target.getBoundingClientRect()}); }; - private onCloseNotificationsMenu = (ev: InputEvent) => { - ev.preventDefault(); - ev.stopPropagation(); - this.setState({notificationsMenuDisplayed: false}); + private onCloseNotificationsMenu = () => { + this.setState({notificationsMenuPosition: null}); }; private onGeneralMenuOpenClick = (ev: InputEvent) => { ev.preventDefault(); ev.stopPropagation(); - this.setState({generalMenuDisplayed: true}); + const target = ev.target as HTMLButtonElement; + this.setState({generalMenuPosition: target.getBoundingClientRect()}); }; - private onCloseGeneralMenu = (ev: InputEvent) => { + private onContextMenu = (ev: React.MouseEvent) => { ev.preventDefault(); ev.stopPropagation(); - this.setState({generalMenuDisplayed: false}); + this.setState({ + generalMenuPosition: { + left: ev.clientX, + bottom: ev.clientY, + }, + }); + }; + + private onCloseGeneralMenu = () => { + this.setState({generalMenuPosition: null}); }; private onTagRoom = (ev: ButtonEvent, tagId: TagID) => { @@ -190,7 +200,7 @@ export default class RoomTile2 extends React.Component { action: 'leave_room', room_id: this.props.room.roomId, }); - this.setState({generalMenuDisplayed: false}); // hide the menu + this.setState({generalMenuPosition: null}); // hide the menu }; private onOpenRoomSettings = (ev: ButtonEvent) => { @@ -201,7 +211,7 @@ export default class RoomTile2 extends React.Component { action: 'open_room_settings', room_id: this.props.room.roomId, }); - this.setState({generalMenuDisplayed: false}); // hide the menu + this.setState({generalMenuPosition: null}); // hide the menu }; private async saveNotifState(ev: ButtonEvent, newState: ALL_MESSAGES_LOUD | ALL_MESSAGES | MENTIONS_ONLY | MUTE) { @@ -218,10 +228,7 @@ export default class RoomTile2 extends React.Component { console.error(error); } - // Close the context menu - this.setState({ - notificationsMenuDisplayed: false, - }); + this.setState({notificationsMenuPosition: null}); // Close the context menu } private onClickAllNotifs = ev => this.saveNotifState(ev, ALL_MESSAGES); @@ -238,10 +245,9 @@ export default class RoomTile2 extends React.Component { const state = getRoomNotifsState(this.props.room.roomId); let contextMenu = null; - if (this.state.notificationsMenuDisplayed) { - const elementRect = this.notificationsMenuButtonRef.current.getBoundingClientRect(); + if (this.state.notificationsMenuPosition) { contextMenu = ( - +
{ {contextMenu} @@ -307,10 +312,9 @@ export default class RoomTile2 extends React.Component { } let contextMenu = null; - if (this.state.generalMenuDisplayed) { - const elementRect = this.generalMenuButtonRef.current.getBoundingClientRect(); + if (this.state.generalMenuPosition) { contextMenu = ( - +
this.onTagRoom(e, DefaultTagID.Favourite)}> @@ -338,9 +342,8 @@ export default class RoomTile2 extends React.Component { {contextMenu} @@ -354,7 +357,7 @@ export default class RoomTile2 extends React.Component { const classes = classNames({ 'mx_RoomTile2': true, 'mx_RoomTile2_selected': this.state.selected, - 'mx_RoomTile2_hasMenuOpen': this.state.generalMenuDisplayed || this.state.notificationsMenuDisplayed, + 'mx_RoomTile2_hasMenuOpen': !!(this.state.generalMenuPosition || this.state.notificationsMenuPosition), 'mx_RoomTile2_minimized': this.props.isMinimized, }); @@ -416,6 +419,7 @@ export default class RoomTile2 extends React.Component { onMouseLeave={this.onTileMouseLeave} onClick={this.onTileClick} role="treeitem" + onContextMenu={this.onContextMenu} >
From e8702aafa564030699e81a511aaeebcdd2785df4 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 1 Jul 2020 23:09:02 +0100 Subject: [PATCH 81/91] delint Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/rooms/RoomTile2.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomTile2.tsx b/src/components/views/rooms/RoomTile2.tsx index 47b5b4206b..7a07027913 100644 --- a/src/components/views/rooms/RoomTile2.tsx +++ b/src/components/views/rooms/RoomTile2.tsx @@ -73,7 +73,7 @@ interface IState { const contextMenuBelow = (elementRect: PartialDOMRect) => { // align the context menu's icons with the icon which opened the context menu const left = elementRect.left + window.pageXOffset - 9; - let top = elementRect.bottom + window.pageYOffset + 17; + const top = elementRect.bottom + window.pageYOffset + 17; const chevronFace = "none"; return {left, top, chevronFace}; }; From 6424ffb22a6e99ad61a094c4f8433b42c8d9f93b Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 1 Jul 2020 23:13:54 +0100 Subject: [PATCH 82/91] fix repeated context menu interaction by not erroring Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/UserMenu.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/components/structures/UserMenu.tsx b/src/components/structures/UserMenu.tsx index 92a4666a9d..1cfe244845 100644 --- a/src/components/structures/UserMenu.tsx +++ b/src/components/structures/UserMenu.tsx @@ -125,9 +125,7 @@ export default class UserMenu extends React.Component { }); }; - private onCloseMenu = (ev: InputEvent) => { - ev.preventDefault(); - ev.stopPropagation(); + private onCloseMenu = () => { this.setState({contextMenuPosition: null}); }; From 4b27a67e336854f1f634b582ee3670a16a931623 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 1 Jul 2020 23:16:54 +0100 Subject: [PATCH 83/91] improve default behaviour for consistency Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/ContextMenu.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/components/structures/ContextMenu.js b/src/components/structures/ContextMenu.js index a56a987fcf..5ba2662796 100644 --- a/src/components/structures/ContextMenu.js +++ b/src/components/structures/ContextMenu.js @@ -347,10 +347,18 @@ export class ContextMenu extends React.Component { } // Semantic component for representing the AccessibleButton which launches a -export const ContextMenuButton = ({ label, isExpanded, children, ...props }) => { +export const ContextMenuButton = ({ label, isExpanded, children, onClick, onContextMenu, ...props }) => { const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); return ( - + { children } ); From 992349944a911a686e2992aecf4ea0df772d5a42 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 12:18:48 +0100 Subject: [PATCH 84/91] Fix room list 2's room tile wrapping wrongly --- res/css/views/rooms/_RoomTile2.scss | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss index 44c5b6ee17..144a5ccf86 100644 --- a/res/css/views/rooms/_RoomTile2.scss +++ b/res/css/views/rooms/_RoomTile2.scss @@ -23,7 +23,6 @@ limitations under the License. // The tile is also a flexbox row itself display: flex; - flex-wrap: wrap; &.mx_RoomTile2_selected, &:hover, &.mx_RoomTile2_hasMenuOpen { background-color: $roomtile2-selected-bg-color; @@ -43,7 +42,8 @@ limitations under the License. .mx_RoomTile2_nameContainer { flex-grow: 1; - max-width: calc(100% - 58px); // 32px avatar, 18px badge area, 8px margin on avatar + min-width: 0; // allow flex to shrink it + margin-right: 8px; // spacing to buttons/badges // Create a new column layout flexbox for the name parts display: flex; @@ -81,8 +81,20 @@ limitations under the License. } } + //.mx_RoomTile2_badgeContainer, + .mx_RoomTile2_menuButton, + .mx_RoomTile2_notificationsButton { + width: 20px; + min-width: 20px; // yay flex + height: 20px; + margin: auto 0; + } + + .mx_RoomTile2_menuButton { + margin-left: 4px; // spacing between buttons + } + .mx_RoomTile2_badgeContainer { - width: 18px; height: 32px; // Create another flexbox row because it's super easy to position the badge at @@ -90,14 +102,15 @@ limitations under the License. display: flex; align-items: center; justify-content: center; + + .mx_NotificationBadge { + margin-right: 2px; + } } // The context menu buttons are hidden by default .mx_RoomTile2_menuButton, .mx_RoomTile2_notificationsButton { - width: 20px; - height: 20px; - margin: auto 0 auto 8px; position: relative; display: none; @@ -130,7 +143,7 @@ limitations under the License. .mx_RoomTile2_badgeContainer { width: 0; height: 0; - visibility: hidden; + display: none; } .mx_RoomTile2_notificationsButton, From c259408d71faab9b788174572b5a7bbf5f6e4d61 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 12:35:06 +0100 Subject: [PATCH 85/91] fix alignment of dot and simplify CSS rules Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/rooms/_RoomTile2.scss | 31 +++++++++++++---------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/res/css/views/rooms/_RoomTile2.scss b/res/css/views/rooms/_RoomTile2.scss index 144a5ccf86..6241b3d0ba 100644 --- a/res/css/views/rooms/_RoomTile2.scss +++ b/res/css/views/rooms/_RoomTile2.scss @@ -81,36 +81,33 @@ limitations under the License. } } - //.mx_RoomTile2_badgeContainer, - .mx_RoomTile2_menuButton, - .mx_RoomTile2_notificationsButton { - width: 20px; - min-width: 20px; // yay flex - height: 20px; - margin: auto 0; - } - .mx_RoomTile2_menuButton { margin-left: 4px; // spacing between buttons } .mx_RoomTile2_badgeContainer { - height: 32px; - - // Create another flexbox row because it's super easy to position the badge at - // the end this way. - display: flex; - align-items: center; - justify-content: center; + height: 16px; + // don't set width so that it takes no space when there is no badge to show + margin: auto 0; // vertically align .mx_NotificationBadge { - margin-right: 2px; + margin-right: 2px; // centering + } + + .mx_NotificationBadge_dot { + // make the smaller dot occupy the same width for centering + margin-left: 5px; + margin-right: 7px; } } // The context menu buttons are hidden by default .mx_RoomTile2_menuButton, .mx_RoomTile2_notificationsButton { + width: 20px; + min-width: 20px; // yay flex + height: 20px; + margin: auto 0; position: relative; display: none; From b5c94acbe6d5541c3fd94c7b1622a48f3e22bbe6 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Thu, 2 Jul 2020 13:17:51 +0100 Subject: [PATCH 86/91] Remove unused crypto import --- src/components/structures/MatrixChat.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 79bdf743ce..9e3e112a28 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -23,7 +23,6 @@ import * as Matrix from "matrix-js-sdk"; import { InvalidStoreError } from "matrix-js-sdk/src/errors"; import { RoomMember } from "matrix-js-sdk/src/models/room-member"; import { MatrixEvent } from "matrix-js-sdk/src/models/event"; -import { isCryptoAvailable } from 'matrix-js-sdk/src/crypto'; // focus-visible is a Polyfill for the :focus-visible CSS pseudo-attribute used by _AccessibleButton.scss import 'focus-visible'; // what-input helps improve keyboard accessibility From a928785f723356c839ce00d4974a654825945d7c Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Thu, 2 Jul 2020 13:19:27 +0100 Subject: [PATCH 87/91] Check whether crypto is enabled in room recovery reminder This avoids a soft crash that may occur otherwise. Fixes https://github.com/vector-im/riot-web/issues/14289 --- src/components/structures/RoomView.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 19f1cccebd..519c4c1f8e 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -1819,6 +1819,7 @@ export default createReactClass({ ); const showRoomRecoveryReminder = ( + this.context.isCryptoEnabled() && SettingsStore.getValue("showRoomRecoveryReminder") && this.context.isRoomEncrypted(this.state.room.roomId) && this.context.getKeyBackupEnabled() === false From b7aa8203b683d51ceeb1017cc435955bf9679ddd Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 2 Jul 2020 09:04:38 -0600 Subject: [PATCH 88/91] Wedge community invites into the new room list Fixes https://github.com/vector-im/riot-web/issues/14179 Disclaimer: this is all of the horrible because it's not meant to be here. Invites in general are likely to move out of the room list, which means this is temporary. Additionally, the communities rework will take care of this more correctly. For now, we support the absolute bare minimum to have them shown. --- src/components/views/rooms/RoomList2.tsx | 40 ++++++ src/components/views/rooms/RoomSublist2.tsx | 19 ++- src/components/views/rooms/TemporaryTile.tsx | 114 ++++++++++++++++++ .../room-list/filters/NameFilterCondition.ts | 8 +- 4 files changed, 177 insertions(+), 4 deletions(-) create mode 100644 src/components/views/rooms/TemporaryTile.tsx diff --git a/src/components/views/rooms/RoomList2.tsx b/src/components/views/rooms/RoomList2.tsx index a1298e107b..606f2d60e9 100644 --- a/src/components/views/rooms/RoomList2.tsx +++ b/src/components/views/rooms/RoomList2.tsx @@ -25,10 +25,15 @@ import { ITagMap } from "../../../stores/room-list/algorithms/models"; import { DefaultTagID, TagID } from "../../../stores/room-list/models"; import { Dispatcher } from "flux"; import dis from "../../../dispatcher/dispatcher"; +import defaultDispatcher from "../../../dispatcher/dispatcher"; import RoomSublist2 from "./RoomSublist2"; import { ActionPayload } from "../../../dispatcher/payloads"; import { NameFilterCondition } from "../../../stores/room-list/filters/NameFilterCondition"; import { ListLayout } from "../../../stores/room-list/ListLayout"; +import { MatrixClientPeg } from "../../../MatrixClientPeg"; +import GroupAvatar from "../avatars/GroupAvatar"; +import TemporaryTile from "./TemporaryTile"; +import { NotificationColor, StaticNotificationState } from "./NotificationBadge"; // TODO: Remove banner on launch: https://github.com/vector-im/riot-web/issues/14231 // TODO: Rename on launch: https://github.com/vector-im/riot-web/issues/14231 @@ -173,6 +178,39 @@ export default class RoomList2 extends React.Component { }); } + private renderCommunityInvites(): React.ReactElement[] { + // TODO: Put community invites in a more sensible place (not in the room list) + return MatrixClientPeg.get().getGroups().filter(g => { + if (g.myMembership !== 'invite') return false; + return !this.searchFilter || this.searchFilter.matches(g.name); + }).map(g => { + const avatar = ( + + ); + const openGroup = () => { + defaultDispatcher.dispatch({ + action: 'view_group', + group_id: g.groupId, + }); + }; + return ( + + ); + }); + } + private renderSublists(): React.ReactElement[] { const components: React.ReactElement[] = []; @@ -195,6 +233,7 @@ export default class RoomList2 extends React.Component { if (!aesthetics) throw new Error(`Tag ${orderedTagId} does not have aesthetics`); const onAddRoomFn = aesthetics.onAddRoom ? () => aesthetics.onAddRoom(dis) : null; + const extraTiles = orderedTagId === DefaultTagID.Invite ? this.renderCommunityInvites() : null; components.push( { isInvite={aesthetics.isInvite} layout={this.state.layouts.get(orderedTagId)} isMinimized={this.props.isMinimized} + extraBadTilesThatShouldntExist={extraTiles} /> ); } diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index c64d62ebea..87796924e8 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -62,6 +62,10 @@ interface IProps { isMinimized: boolean; tagId: TagID; + // TODO: Don't use this. It's for community invites, and community invites shouldn't be here. + // You should feel bad if you use this. + extraBadTilesThatShouldntExist?: React.ReactElement[]; + // TODO: Account for https://github.com/vector-im/riot-web/issues/14179 } @@ -87,8 +91,7 @@ export default class RoomSublist2 extends React.Component { } private get numTiles(): number { - // TODO: Account for group invites: https://github.com/vector-im/riot-web/issues/14179 - return (this.props.rooms || []).length; + return (this.props.rooms || []).length + (this.props.extraBadTilesThatShouldntExist || []).length; } private get numVisibleTiles(): number { @@ -187,6 +190,10 @@ export default class RoomSublist2 extends React.Component { const tiles: React.ReactElement[] = []; + if (this.props.extraBadTilesThatShouldntExist) { + tiles.push(...this.props.extraBadTilesThatShouldntExist); + } + if (this.props.rooms) { const visibleRooms = this.props.rooms.slice(0, this.numVisibleTiles); for (const room of visibleRooms) { @@ -202,6 +209,14 @@ export default class RoomSublist2 extends React.Component { } } + // We only have to do this because of the extra tiles. We do it conditionally + // to avoid spending cycles on slicing. It's generally fine to do this though + // as users are unlikely to have more than a handful of tiles when the extra + // tiles are used. + if (tiles.length > this.numVisibleTiles) { + return tiles.slice(0, this.numVisibleTiles); + } + return tiles; } diff --git a/src/components/views/rooms/TemporaryTile.tsx b/src/components/views/rooms/TemporaryTile.tsx new file mode 100644 index 0000000000..676969cade --- /dev/null +++ b/src/components/views/rooms/TemporaryTile.tsx @@ -0,0 +1,114 @@ +/* +Copyright 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React from "react"; +import classNames from "classnames"; +import { RovingTabIndexWrapper } from "../../../accessibility/RovingTabIndex"; +import AccessibleButton from "../../views/elements/AccessibleButton"; +import NotificationBadge, { INotificationState, NotificationColor } from "./NotificationBadge"; + +interface IProps { + isMinimized: boolean; + isSelected: boolean; + displayName: string; + avatar: React.ReactElement; + notificationState: INotificationState; + onClick: () => void; +} + +interface IState { + hover: boolean; +} + +export default class TemporaryTile extends React.Component { + constructor(props: IProps) { + super(props); + + this.state = { + hover: false, + }; + } + + private onTileMouseEnter = () => { + this.setState({hover: true}); + }; + + private onTileMouseLeave = () => { + this.setState({hover: false}); + }; + + public render(): React.ReactElement { + // XXX: We copy classes because it's easier + const classes = classNames({ + 'mx_RoomTile2': true, + 'mx_RoomTile2_selected': this.props.isSelected, + 'mx_RoomTile2_minimized': this.props.isMinimized, + }); + + const badge = ( + + ); + + let name = this.props.displayName; + if (typeof name !== 'string') name = ''; + name = name.replace(":", ":\u200b"); // add a zero-width space to allow linewrapping after the colon + + const nameClasses = classNames({ + "mx_RoomTile2_name": true, + "mx_RoomTile2_nameHasUnreadEvents": this.props.notificationState.color >= NotificationColor.Bold, + }); + + let nameContainer = ( +
+
+ {name} +
+
+ ); + if (this.props.isMinimized) nameContainer = null; + + const avatarSize = 32; + return ( + + + {({onFocus, isActive, ref}) => + +
+ {this.props.avatar} +
+ {nameContainer} +
+ {badge} +
+
+ } +
+
+ ); + } +} diff --git a/src/stores/room-list/filters/NameFilterCondition.ts b/src/stores/room-list/filters/NameFilterCondition.ts index 8625cd932c..12f147990d 100644 --- a/src/stores/room-list/filters/NameFilterCondition.ts +++ b/src/stores/room-list/filters/NameFilterCondition.ts @@ -60,11 +60,15 @@ export class NameFilterCondition extends EventEmitter implements IFilterConditio if (!room.name) return false; // should realistically not happen: the js-sdk always calculates a name + return this.matches(room.name); + } + + public matches(val: string): boolean { // Note: we have to match the filter with the removeHiddenChars() room name because the // function strips spaces and other characters (M becomes RN for example, in lowercase). // We also doubly convert to lowercase to work around oddities of the library. - const noSecretsFilter = removeHiddenChars(lcFilter).toLowerCase(); - const noSecretsName = removeHiddenChars(room.name.toLowerCase()).toLowerCase(); + const noSecretsFilter = removeHiddenChars(this.search.toLowerCase()).toLowerCase(); + const noSecretsName = removeHiddenChars(val.toLowerCase()).toLowerCase(); return noSecretsName.includes(noSecretsFilter); } } From 32642d592c9599f54853d3f850fb021eac3c40f2 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Thu, 2 Jul 2020 09:27:42 -0600 Subject: [PATCH 89/91] Add a key --- src/components/views/rooms/RoomList2.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/views/rooms/RoomList2.tsx b/src/components/views/rooms/RoomList2.tsx index 606f2d60e9..5d7b8ad2c6 100644 --- a/src/components/views/rooms/RoomList2.tsx +++ b/src/components/views/rooms/RoomList2.tsx @@ -206,6 +206,7 @@ export default class RoomList2 extends React.Component { avatar={avatar} notificationState={StaticNotificationState.forSymbol("!", NotificationColor.Red)} onClick={openGroup} + key={`temporaryGroupTile_${g.groupId}`} /> ); }); From a6586120785f345a31d4ce7ca3a6c383cfe3b6bf Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 19:48:06 +0100 Subject: [PATCH 90/91] Add click-to-jump on badge in the room sublist header Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../views/rooms/NotificationBadge.tsx | 35 ++++++++++++++----- src/components/views/rooms/RoomSublist2.tsx | 33 ++++++++++++++++- 2 files changed, 59 insertions(+), 9 deletions(-) diff --git a/src/components/views/rooms/NotificationBadge.tsx b/src/components/views/rooms/NotificationBadge.tsx index 2111310555..31f1ea2021 100644 --- a/src/components/views/rooms/NotificationBadge.tsx +++ b/src/components/views/rooms/NotificationBadge.tsx @@ -29,6 +29,8 @@ import { IDestroyable } from "../../../utils/IDestroyable"; import SettingsStore from "../../../settings/SettingsStore"; import { DefaultTagID, TagID } from "../../../stores/room-list/models"; import { readReceiptChangeIsFor } from "../../../utils/read-receipts"; +import AccessibleButton from "../elements/AccessibleButton"; +import { XOR } from "../../../@types/common"; export const NOTIFICATION_STATE_UPDATE = "update"; @@ -62,11 +64,18 @@ interface IProps { roomId?: string; } +interface IClickableProps extends IProps, React.InputHTMLAttributes { + /** + * If specified will return an AccessibleButton instead of a div. + */ + onClick?(ev: React.MouseEvent); +} + interface IState { showCounts: boolean; // whether or not to show counts. Independent of props.forceCount } -export default class NotificationBadge extends React.PureComponent { +export default class NotificationBadge extends React.PureComponent, IState> { private countWatcherRef: string; constructor(props: IProps) { @@ -109,20 +118,22 @@ export default class NotificationBadge extends React.PureComponent= NotificationColor.Red; - const hasCount = this.props.notification.color >= NotificationColor.Grey; - const hasUnread = this.props.notification.color >= NotificationColor.Bold; + // Don't show a badge if we don't need to + if (notification.color <= NotificationColor.None) return null; + + const hasNotif = notification.color >= NotificationColor.Red; + const hasCount = notification.color >= NotificationColor.Grey; + const hasUnread = notification.color >= NotificationColor.Bold; const couldBeEmpty = (!this.state.showCounts || hasUnread) && !hasNotif; let isEmptyBadge = couldBeEmpty && (!this.state.showCounts || !hasCount); - if (this.props.forceCount) { + if (forceCount) { isEmptyBadge = false; if (!hasCount) return null; // Can't render a badge } - let symbol = this.props.notification.symbol || formatMinimalBadgeCount(this.props.notification.count); + let symbol = notification.symbol || formatMinimalBadgeCount(notification.count); if (isEmptyBadge) symbol = ""; const classes = classNames({ @@ -134,6 +145,14 @@ export default class NotificationBadge extends React.PureComponent 2, }); + if (onClick) { + return ( + + {symbol} + + ); + } + return (
{symbol} diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index c64d62ebea..dfd6cdaefa 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -33,6 +33,7 @@ import StyledRadioButton from "../elements/StyledRadioButton"; import RoomListStore from "../../../stores/room-list/RoomListStore2"; import { ListAlgorithm, SortAlgorithm } from "../../../stores/room-list/algorithms/models"; import { DefaultTagID, TagID } from "../../../stores/room-list/models"; +import dis from "../../../dispatcher/dispatcher"; // TODO: Remove banner on launch: https://github.com/vector-im/riot-web/issues/14231 // TODO: Rename on launch: https://github.com/vector-im/riot-web/issues/14231 @@ -160,6 +161,29 @@ export default class RoomSublist2 extends React.Component { this.forceUpdate(); // because the layout doesn't trigger a re-render }; + private onBadgeClick = (ev: React.MouseEvent) => { + ev.preventDefault(); + ev.stopPropagation(); + + let room; + if (this.props.tagId === DefaultTagID.Invite) { + // switch to first room in sortedList as that'll be the top of the list for the user + room = this.props.rooms && this.props.rooms[0]; + } else { + room = this.props.rooms.find((r: Room) => { + const notifState = this.state.notificationState.getForRoom(r); + return notifState.count > 0 && notifState.color === this.state.notificationState.color; + }); + } + + if (room) { + dis.dispatch({ + action: 'view_room', + room_id: room.roomId, + }); + } + }; + private onHeaderClick = (ev: React.MouseEvent) => { let target = ev.target as HTMLDivElement; if (!target.classList.contains('mx_RoomSublist2_headerText')) { @@ -287,7 +311,14 @@ export default class RoomSublist2 extends React.Component { // TODO: Use onFocus: https://github.com/vector-im/riot-web/issues/14180 const tabIndex = isActive ? 0 : -1; - const badge = ; + const badge = ( + + ); let addRoomButton = null; if (!!this.props.onAddRoom) { From ae2a6ebc07a4f3ed02f673322a7d65bf277c08c7 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 2 Jul 2020 19:56:41 +0100 Subject: [PATCH 91/91] improve comments Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/rooms/RoomSublist2.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/views/rooms/RoomSublist2.tsx b/src/components/views/rooms/RoomSublist2.tsx index dfd6cdaefa..5584b8a521 100644 --- a/src/components/views/rooms/RoomSublist2.tsx +++ b/src/components/views/rooms/RoomSublist2.tsx @@ -167,9 +167,10 @@ export default class RoomSublist2 extends React.Component { let room; if (this.props.tagId === DefaultTagID.Invite) { - // switch to first room in sortedList as that'll be the top of the list for the user + // switch to first room as that'll be the top of the list for the user room = this.props.rooms && this.props.rooms[0]; } else { + // find the first room with a count of the same colour as the badge count room = this.props.rooms.find((r: Room) => { const notifState = this.state.notificationState.getForRoom(r); return notifState.count > 0 && notifState.color === this.state.notificationState.color;