Compare commits

...

16 Commits
main ... 5.41.x

Author SHA1 Message Date
Fedor Indutnyy 0321c87c2f v5.41.0 2022-04-28 11:37:00 -07:00
Fedor Indutnyy bfa23c34e5 Update strings 2022-04-28 11:36:44 -07:00
automated-signal 00f770c3c4
getTotalUnreadForConversation: Add missing isGroup parameter 2022-04-28 10:06:36 -07:00
automated-signal 075b968cbc
Fix "Cannot Update" dialog's retry button
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2022-04-27 16:43:14 -07:00
automated-signal 653e885266
Fix collapsed corners for link previews and image attachments
Co-authored-by: Scott Nonnenberg <scott@signal.org>
2022-04-27 16:43:03 -07:00
automated-signal 050a1bf789
Add filter commands for finding conversations
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2022-04-27 12:13:01 -07:00
automated-signal f5b3785aa0
Fix handling of 206 status code in updater
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2022-04-26 17:14:11 -07:00
automated-signal af0475b023
Challenge: If no retry-after header on 428, don't start timer for retry
Co-authored-by: Scott Nonnenberg <scott@signal.org>
2022-04-25 16:46:58 -07:00
Fedor Indutnyy fdc5b72cdd v5.41.0-beta.2 2022-04-25 14:28:50 -07:00
Fedor Indutnyy c19082f1e8 Update strings 2022-04-25 14:28:42 -07:00
automated-signal a941720e18
Fix screen reader interaction with message audio
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2022-04-25 14:24:53 -07:00
automated-signal ce470860a9
sendProfileKey: Be resilient to more kinds of errors
Co-authored-by: Scott Nonnenberg <scott@signal.org>
2022-04-25 14:23:05 -07:00
automated-signal d3bb35568d
Don't post extraneous verified change notification
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2022-04-25 14:10:44 -07:00
automated-signal 9c3cd7f8af
Message.tsx: Don't handle clicks outside of container
Co-authored-by: Scott Nonnenberg <scott@signal.org>
2022-04-25 10:42:47 -07:00
automated-signal dc4ef43b46
Ignore PNI key upload errors for now
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2022-04-22 12:17:34 -07:00
automated-signal 8faf3bfbec
Use useRefMerger in Input to avoid re-renders
Co-authored-by: Josh Perez <60019601+josh-signal@users.noreply.github.com>
2022-04-21 16:32:01 -07:00
65 changed files with 1425 additions and 1263 deletions

View File

@ -192,11 +192,11 @@
"description": "Message shown on the loading screen before we've loaded any messages"
},
"optimizingApplication": {
"message": تم تحسين التطبيق...",
"message": جري تحسين التطبيق...",
"description": "Message shown on the loading screen while we are doing application optimizations"
},
"migratingToSQLCipher": {
"message": تم تحسين الرسائل... تمّ $status$.",
"message": جري تحسين الرسائل... تمّ $status$.",
"description": "Message shown on the loading screen while we are doing application optimizations",
"placeholders": {
"status": {
@ -7013,6 +7013,10 @@
"message": "إضافة قصة",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "القصص المخفية",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "لا توجد قصص حديثة للمشاهدة حاليا",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "القصص",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "إظهار القصص",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "إخفاء قصة",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "يحتوي هذا الإصدار على عدد من التعديلات الصغيرة وإصلاحات الأخطاء للحفاظ على تشغيل Signal بسلاسة.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "We're keeping short messages short, by putting stuff like timestamps on the same line as the text. Now you've got more space on the screen for that quick 'hey' to check in on a friend.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Missing sticker packs begone! Desktop should now be able to handle all sticker packs that your phone can!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "‫يمكنك الآن إضافة أفراد للمجموعات باستخدام رقم هاتفهم فقط.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Your favorite contacts are now just a few keystrokes away. Contact search now supports non-Latin alphabets like Cyrillic.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "‫إن إصلاح العلل يتضمن تصحيح مشكلة كانت تجعل أحيانا الضغط على القوائم عسيرا.",
"description": "Release notes for v5.40"

View File

@ -7013,6 +7013,10 @@
"message": "Bir hekayə əlavə et",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Gizli hekayələr",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Hal-hazırda göstəriləcək yeni bir hekayə yoxdur",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Hekayə",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Hekayələri göstər",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Hekayəni gizlət",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Bu versiya, Signal-ın problemsiz işləməsini təmin etmək üçün kiçik düzəltmələr və xəta düzəltmələri ehtiva edir.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Mətnlə eyni sətrə vaxtı əlavə edərək mesajları qısa saxlamağa çalışırıq. Artıq bir dostunuzu daha tez \"salamlamaq\" üçün ekranınızda daha çox yer var.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Əskik stiker paketlər geri qayıtdı! Artıq Masaüstü versiya, telefonunuzun bacara bildiyi bütün stiker paketlərini ələ ala bilməlidir!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Artıq insanları, onların telefon nömrələrini istifadə edərək qruplara əlavə edə bilərsiniz.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Artıq sevimli əlaqələriniz sadəcə klaviaturadakı bir neçə toxunuş qədər yaxındır. Əlaqə axtarışı artıq Kiril kimi Latin olmayan əlifbaları da dəstəkləyir.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Bəzən menyuya klikləməni çətinləşdirən problemin həlli də daxil olmaqla bir çox xətalar aradan qaldırılıb.",
"description": "Release notes for v5.40"

View File

@ -7013,6 +7013,10 @@
"message": "Afegiu-hi una història",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Històries amagades",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Ara no hi ha històries per veure.",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Història",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Mostra les històries",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Amaga la història",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Aquesta versió conté una sèrie de petites modificacions i correccions d'errors per tal que el Signal funcioni sense problemes.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Mantenim els missatges curts, posant-hi coses com ara marques de temps a la mateixa línia que el text. Ara teniu més espai a la pantalla per a un \"Ei!\" ràpid amb una amistat.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Falten paquets d'adhesius! Ara l'escriptori hauria de poder gestionar els mateixos paquets d'adhesius que el telèfon!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Ara podeu afegir persones als grups només amb el número de telèfon.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Els contactes preferits són ara només a unes poques tecles de distància. La cerca de contactes ara admet alfabets no llatins com ara el ciríl·lic.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Correccions d'errors, inclosa una solució a un problema que de vegades dificultava fer clic als menús.",
"description": "Release notes for v5.40"

View File

@ -7013,6 +7013,10 @@
"message": "Přidat příběh",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Skryté příběhy",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Žádné poslední příběhy k zobrazení",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Příběh",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Zobrazit příběhy",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Schovat příběh",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Tato verze obsahuje řadu drobných úprav a oprav chyb, aby Signal fungoval hladce.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Krátké zprávy udržujeme krátké tím, že věci jako časová razítka umisťujeme na stejný řádek jako text. Nyní máte na obrazovce více místa pro rychlé \"ahoj\", abyste zkontrolovali přítele.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Chybějící balíčky samolepek jsou pryč! Počítač by nyní měl zvládnout všechny balíčky nálepek, které zvládne váš telefon!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Nyní můžete přidávat lidi do skupin pomocí jejich telefonního čísla.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Vaše oblíbené kontakty jsou nyní vzdálené jen několik stisknutí kláves. Vyhledávání kontaktů nyní podporuje jiné než latinské abecedy, například cyrilici.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Opravy chyb včetně opravy problému, který někdy ztěžoval klikání na položky menu.",
"description": "Release notes for v5.40"

View File

@ -222,7 +222,7 @@
"description": "Shown at the top of the archived conversations list in the left pane"
},
"noArchivedConversations": {
"message": "No archived conversations.",
"message": "Dim sgyrsiau wedi'u harchifo.",
"description": "Shown at the top of the archived conversations list in the left pane if there is no any archived conversation"
},
"archiveConversation": {
@ -836,11 +836,11 @@
"description": "Shown to separate the types of search results"
},
"findByUsernameHeader": {
"message": "Find by username",
"message": "Canfod yn ôl Enw Defnyddiwr",
"description": "Shown when search could be a valid username, with one sub-item that will kick off the search"
},
"findByPhoneNumberHeader": {
"message": "Find by phone number",
"message": "Canfod yn ôl rhif ffôn",
"description": "Shown when search could be a valid phone number, with one sub-item that will kick off the search"
},
"at-username": {
@ -974,7 +974,7 @@
"description": "Confirmation dialog message for when the voice recording is interrupted due to app losing focus"
},
"voiceNoteLimit": {
"message": "Voice messages are limited to one hour. Recording will stop if you switch to another app.",
"message": "Mae negeseuon llais yn gyfyngedig i awr. Bydd recordio yn dod i ben os byddwch chi'n newid i ap arall.",
"description": "Shown in toast to warn user about limited time and that window must be in focus"
},
"voiceNoteMustBeOnlyAttachment": {
@ -1074,7 +1074,7 @@
}
},
"cannotUpdateRequireManualDetail": {
"message": "Signal couldn't update. Visit $url$ to install it manually. Then, $support$ about this problem",
"message": "Nid oedd Signal yn gallu diweddaru. Ewch i $url$ i'w osod â llaw. Yna, $support$ am y broblem hon",
"description": "Shown if a general error happened while trying to install update package and manual update is required",
"placeholders": {
"url": {
@ -2406,7 +2406,7 @@
"description": "Shown if request to Signal servers to find username fails"
},
"Toast--failed-to-fetch-phone-number": {
"message": "Failed to fetch phone number. Check your connection and try again.",
"message": "Wedi methu â nôl rhif ffôn. Gwiriwch eich cysylltiad a rhowch gynnig arall arni.",
"description": "Shown if request to Signal servers to find phone number fails"
},
"startConversation--username-not-found": {
@ -2420,7 +2420,7 @@
}
},
"startConversation--phone-number-not-found": {
"message": "User not found. \"$phoneNumber$\" is not a Signal user.",
"message": "Defnyddiwr heb ei ganfod. Nid yw \"$phoneNumber$\" yn ddefnyddiwr Signal.",
"description": "Shown in dialog if phone number is not found.",
"placeholders": {
"phoneNumber": {
@ -2430,7 +2430,7 @@
}
},
"startConversation--phone-number-not-valid": {
"message": "User not found. \"$phoneNumber$\" is not a valid phone number.",
"message": "Defnyddiwr heb ei ganfod. Nid yw \"$phoneNumber$\" yn rhif ffôn dilys.",
"description": "Shown in dialog if phone number is not valid.",
"placeholders": {
"phoneNumber": {
@ -6358,11 +6358,11 @@
"description": "Text for an option in Conversation Details Disappearing Messages setting when user previously selected custom time"
},
"DisappearingTimeDialog__label--value": {
"message": "Number",
"message": "Rhif",
"description": "aria-label for the number select box"
},
"DisappearingTimeDialog__label--units": {
"message": "Unit of time",
"message": "Uned o amser",
"description": "aria-label for the units of time select box"
},
"DisappearingTimeDialog__title": {
@ -6812,7 +6812,7 @@
"description": "Second line of the dialog displayed when Windows installer can't close application automatically and needs user intervention to complete the installation."
},
"NSIS__appRunning": {
"message": "$appName$ is running.\nClick OK to close it.\nIf it doesn't close, try closing it manually.",
"message": "Mae $appName$ yn rhedeg.\nCliciwch Iawn i'w gau.\nOs na fydd yn cau, ceisiwch ei gau â llaw.",
"description": "The contents of a dialog displayed when Windows installer detect that the application is running and asks user to close it. Note: please keep the line breaks so that the text occupies three separate lines",
"placeholders": {
"appName": {
@ -6822,11 +6822,11 @@
}
},
"NSIS__decompressionFailed": {
"message": "Failed to decompress files. Please try running the installer again.",
"message": "Wedi methu â datgywasgu ffeiliau. Ceisiwch redeg y gosodwr eto.",
"description": "Displayed when Windows installer cannot decompress application files"
},
"NSIS__uninstallFailed": {
"message": "Failed to uninstall old application files. Please try running the installer again.",
"message": "Wedi methu â dadosod hen ffeiliau rhaglen. Ceisiwch redeg y gosodwr eto.",
"description": "Displayed when Windows installer cannot uninstall the old application"
},
"CrashReportDialog__title": {
@ -7013,6 +7013,10 @@
"message": "Ychwanegu stori",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Straeon cuddiedig",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Dim straeon diweddar i'w dangos ar hyn o bryd",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Stori",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Dangos straeon",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Cuddio stori",
"description": "Label for menu item to hide the story"
@ -7095,28 +7103,12 @@
"message": "Mae'r fersiwn hon yn cynnwys nifer o drydariadau bach a chywiriadau gwallau i gadw Signal yn rhedeg yn llyfn.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Rydyn ni'n cadw negeseuon byr yn fyr, trwy roi pethau fel stampiau amser ar yr un llinell â'r testun. Nawr mae gennych chi fwy o le ar y sgrin i'r 'helo' cyflym hwnnw gyfarch ffrind.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Diwedd ar becynnau sticer coll! Dylai Desktop nawr allu trin yr holl becynnau sticeri y gall eich ffôn!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "You can now add people to groups using just their phone number.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Your favorite contacts are now just a few keystrokes away. Contact search now supports non-Latin alphabets like Cyrillic.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"message": "Mae'r gwelliannau'n cynnwys datrysiad i broblem a fyddai weithiau'n ei gwneud hi'n anodd clicio ar ddewislenni.",
"description": "Release notes for v5.40"
},
"WhatsNew__v5.40--2": {
"message": "Thanks to our open source contributors $dsanders11$ and $yusufsahinhamza$ for contributing to these improvements.",
"message": "Diolch i'n cyfranwyr cod agored $dsanders11$ ac $yusufsahinhamza$ am gyfrannu at y gwelliannau hyn.",
"description": "Release notes for v5.40",
"placeholders": {
"dsanders11": {

View File

@ -2314,7 +2314,7 @@
"description": "Title for the modal for safety number verification"
},
"safetyNumberChanged": {
"message": "Sikkerhedsnummer har ændret sig",
"message": "Sikkerhedsnummer er ændret",
"description": "A notification shown in the conversation when a contact reinstalls"
},
"safetyNumberChanges": {
@ -7013,6 +7013,10 @@
"message": "Tilføj en historie",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Skjulte historier",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Ingen nye historier at vise lige nu",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Historie",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Vis historier",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Skjul historie",
"description": "Label for menu item to hide the story"
@ -7095,28 +7103,12 @@
"message": "Denne version indeholder en række småjusteringer og fejlrettelser som sikrer, at Signal kører problemfrit.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Vi sørger for at holde korte beskeder korte ved at sætte ting som tidsstempler på samme linje som teksten. Nu har du mere plads på skærmen til et hurtigt \"hej\" for at tjekke, hvordan det går med en ven.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Slut med manglende klistermærkepakker! Desktop burde nu kunne håndtere alle de samme klistermærkepakker, som din telefon kan!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Du kan nu tilføje personer til grupper ved blot at bruge deres telefonnummer.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Dine foretrukne kontakter er nu kun et par tastetryk væk. Kontaktsøgning understøtter nu ikke-latinske alfabeter såsom kyrillisk.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Fejlrettelser, herunder en rettelse af et problem, som nogle gange gjorde det svært at klikke på menuer. ",
"description": "Release notes for v5.40"
},
"WhatsNew__v5.40--2": {
"message": "Tak til vores open source-bidragydere $dsanders11$ og $yusufsahinhamza$ for at bidrage med disse forbedringer.",
"message": "Tak til vores open source-bidragsydere $dsanders11$ og $yusufsahinhamza$ for at bidrage med disse forbedringer.",
"description": "Release notes for v5.40",
"placeholders": {
"dsanders11": {

View File

@ -7013,6 +7013,10 @@
"message": "Eine Story hinzufügen",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Ausgeblendete Stories",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Im Moment sind keine aktuellen Stories zu sehen",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Story",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Stories anzeigen",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Story ausblenden",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Diese Version enthält eine Reihe kleinerer Optimierungen und Fehlerbehebungen, damit Signal weiterhin reibungslos funktioniert.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Wir belassen kurze Nachrichten kurz, indem Infos wie der Zeitstempel in der gleichen Zeile wie der Text angezeigt werden. Jetzt hast du mehr Platz auf dem Bildschirm für das kurze »Hallo«, um sich bei einem Freund zu melden.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Hinfort mit den fehlenden Sticker-Sets! Desktop sollte nun in der Lage sein, mit allen von deinem Telefon unterstützten Sticker-Sets umzugehen!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Du kannst nun über deren Rufnummer Personen zu Gruppen hinzufügen.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Deine Lieblingskontakte sind jetzt nur noch einige Tastenanschläge entfernt. Die Kontaktsuche unterstützt nun nicht-lateinische Alphabete wie Kyrillisch.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Fehlerkorrekturen einschließlich der Behebung eines Problems, das es manchmal schwierig machte, auf Menüs zu klicken.",
"description": "Release notes for v5.40"

View File

@ -7013,6 +7013,10 @@
"message": "Προσθήκη ιστορίας",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Κρυμμένες ιστορίες",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Δεν υπάρχουν πρόσφατες ιστορίες αυτή τη στιγμή",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Ιστορία",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Show stories",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Απόκρυψη ιστορίας",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Αυτή η έκδοση περιλαμβάνει διάφορες μικρές βελτιώσεις και αποσφαλματώσεις για να συνεχίσει το Signal να λειτουργεί ομαλά.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Κρατάμε τα μικρά μηνύματα μικρά, βάζοντας πράγματα όπως χρονικές σημάνσεις στην ίδια γραμμή με το κείμενο. Πλέον έχετε περισσότερο χώρο στην οθόνη για να στείλετε ένα απλό «γεια» στον φίλο σας και να δείτε τι κάνει.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Αντίο στα ελλιπή πακέτα αυτοκολλήτων! Η έκδοση υπολογιστή θα μπορεί πλέον να διαχειρίζεται όλα τα πακέτα αυτοκολλήτων που λειτουργούν και στο κινητό!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Μπορείτε πλέον να προσθέτετε άτομα σε ομάδες χρησιμοποιώντας τους τηλεφωνικούς τους αριθμούς.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Οι αγαπημένες σας επαφές είναι μόλις λίγα κουμπιά μακριά. Η αναζήτηση επαφών υποστηρίζει πλέον και τα μη λατινικά αλφάβητα, όπως το Κυριλλικό.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Διορθώσεις σφαλμάτων, συμπεριλαμβανομένης της διόρθωσης ενός προβλήματος που έκανε δύσκολο το κλικ στα μενού.",
"description": "Release notes for v5.40"

View File

@ -7013,6 +7013,10 @@
"message": "Aldoni rakonton",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Kaŝitaj rakontoj",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Neniu freŝa rakonto montrebla nun",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Rakonto",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Montri la rakontojn",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Kaŝi la rakonton",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Tiu versio enhavas kelkajn optimumaĵojn kaj riparetojn, por ke Signal plu funkciu bone.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Por havi mallongan mesaĝomontron, ni metas la tempon en la sama linio ol la tekston. Nun, vi ĝuas pli da spaco por tiu rapida „saluton“ al amiko.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Ĉu mankantaj glumarkaroj? Desktop nun montras ĉiujn glumarkarojn, kiel ĉe via poŝtelefono!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Vi povas nun aldoni homojn al grupoj pere de ilia telefonnumero.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Viaj plej ŝatataj kontaktoj estas nun pli facile alireblaj. Serĉo de kontaktoj en nelatinaj alfabetoj kiel la cirila nun eblas.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Riparoj korektas problemon kun menuoj malfacile alklakeblaj.",
"description": "Release notes for v5.40"

View File

@ -222,7 +222,7 @@
"description": "Shown at the top of the archived conversations list in the left pane"
},
"noArchivedConversations": {
"message": "No archived conversations.",
"message": "No hay chats archivados",
"description": "Shown at the top of the archived conversations list in the left pane if there is no any archived conversation"
},
"archiveConversation": {
@ -6358,11 +6358,11 @@
"description": "Text for an option in Conversation Details Disappearing Messages setting when user previously selected custom time"
},
"DisappearingTimeDialog__label--value": {
"message": "Number",
"message": "Número",
"description": "aria-label for the number select box"
},
"DisappearingTimeDialog__label--units": {
"message": "Unit of time",
"message": "Medida de tiempo",
"description": "aria-label for the units of time select box"
},
"DisappearingTimeDialog__title": {
@ -6812,7 +6812,7 @@
"description": "Second line of the dialog displayed when Windows installer can't close application automatically and needs user intervention to complete the installation."
},
"NSIS__appRunning": {
"message": "$appName$ is running.\nClick OK to close it.\nIf it doesn't close, try closing it manually.",
"message": "$appName$ está activa.\nHaz clic en Aceptar para cerrarla.\nSi no se cierra, inténtalo manualmente.",
"description": "The contents of a dialog displayed when Windows installer detect that the application is running and asks user to close it. Note: please keep the line breaks so that the text occupies three separate lines",
"placeholders": {
"appName": {
@ -6822,11 +6822,11 @@
}
},
"NSIS__decompressionFailed": {
"message": "Failed to decompress files. Please try running the installer again.",
"message": "Fallo al descomprimir archivos. Inténtalo de nuevo más tarde.",
"description": "Displayed when Windows installer cannot decompress application files"
},
"NSIS__uninstallFailed": {
"message": "Failed to uninstall old application files. Please try running the installer again.",
"message": "Fallo al desinstalar archivos antiguos de la aplicación. Inténtalo de nuevo más tarde.",
"description": "Displayed when Windows installer cannot uninstall the old application"
},
"CrashReportDialog__title": {
@ -7013,6 +7013,10 @@
"message": "Añade una historia",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Historias ocultas",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "No hay historias recientes que mostrar",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Historia",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Mostrar historias",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Ocultar historia",
"description": "Label for menu item to hide the story"
@ -7095,28 +7103,12 @@
"message": "Esta versión contiene un par de pequeñas mejoras para que Signal funcione sin problemas.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Mantenemos cortos los mensajes cortos, añadiendo las marcas de tiempo en la misma línea que el texto. Ahora tienes más espacio en la pantalla con ese «Hola» rápido para ver cómo está esa persona.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "¡Se acabaron los paquetes de stickers perdidos! ¡Ahora Desktop debería poder manejar todos los paquetes de stickers que tienes en tu teléfono!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Ahora puedes añadir personas a grupos conociendo solo su número de teléfono.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Tus contactos favoritos son ahora más fácil de encontrar. La búsqueda de contactos ahora permite alfabetos no latinos como el cirílico",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"message": "Reparación de fallos incluyendo uno que hacía casi imposible hacer clic en menús.",
"description": "Release notes for v5.40"
},
"WhatsNew__v5.40--2": {
"message": "Thanks to our open source contributors $dsanders11$ and $yusufsahinhamza$ for contributing to these improvements.",
"message": "Gracias a nuestr@s colaborador@s $dsanders11$ y $yusufsahinhamza$ por contribuir con estas mejoras.",
"description": "Release notes for v5.40",
"placeholders": {
"dsanders11": {

View File

@ -7013,6 +7013,10 @@
"message": "Lisää tarina",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Piilotetut tarinat",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Viimeiaikaisia tarinoita ei juuri nyt ole",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Tarina",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Näytä tarinat",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Piilota tarina",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Tämä versio sisältää useita pieniä parannuksia ja virhekorjauksia, jotka pitävät Signalin toiminnan sujuvana.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Pidämme lyhyet viestit lyhyinä sijoitamalla asiat, kuten aikaleimat samalle riville tekstin kanssa. Nyt ruudulla on enemmän tilaa kaverin pikaiselle 'tervehdykselle'.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Puuttuvat tarrapaketit kadotkoon! Puhelimella toimivien tarrapakettien pitäisi nyt toimia myös työpöydällä!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Voit nyt lisätä ihmisiä ryhmiin pelkän puhelinnumeron perusteella.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Lempiyhteystietosi ovat nyt vain muutaman näppäinpainalluksen päässä. Yhteystietohaku tukee nyt muitakin kuin latinalaisia merkistöjä, kuten esimerkiksi kyrillisiä merkistöjä.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Virheenkorjauksia, mukaan lukien sen virheen korjaaminen joka teki joskus valikoiden klikkaamisesta hankalaa.",
"description": "Release notes for v5.40"

View File

@ -1940,7 +1940,7 @@
"description": "Header in the settings dialog for the section dealing with data deletion"
},
"clearDataExplanation": {
"message": "Toutes les données dans lapplication seront supprimées, y compris tous les messages et les renseignements de compte enregistrés.",
"message": "Toutes les données dans lapplication seront supprimées, y compris tous les messages et les informations de compte enregistrées.",
"description": "Text describing what the clear data button will do."
},
"clearDataButton": {
@ -1952,7 +1952,7 @@
"description": "Header of the full-screen delete data confirmation screen"
},
"deleteAllDataBody": {
"message": "Vous êtes sur le point de supprimer tous les renseignements de compte enregistrés de cette application, y compris tous les contacts et messages. Vous pourrez toujours relier votre appareil mobile de nouveau, mais cela ne restaurera pas les messages supprimés.",
"message": "Vous êtes sur le point de supprimer toutes les informations de compte enregistrées de cette application, y compris tous les contacts et messages. Vous pourrez toujours relier votre appareil mobile de nouveau, mais cela ne restaurera pas les messages supprimés.",
"description": "Text describing what exactly will happen if the user clicks the button to delete all data"
},
"deleteAllDataButton": {
@ -4348,7 +4348,7 @@
"description": "Shown in timeline or conversation preview when v2 group changes"
},
"GroupV2--access-attributes--admins--other": {
"message": "$adminName$ a changé qui peut modifier les renseignements du groupe en « Les administrateurs ».",
"message": "$adminName$ a changé qui peut modifier les informations du groupe en « Les administrateurs ».",
"description": "Shown in timeline or conversation preview when v2 group changes",
"placeholders": {
"adminName": {
@ -4358,15 +4358,15 @@
}
},
"GroupV2--access-attributes--admins--you": {
"message": "Vous avez changé qui peut modifier les renseignements du groupe en « Les administrateurs ».",
"message": "Vous avez changé qui peut modifier les informations du groupe en « Les administrateurs ».",
"description": "Shown in timeline or conversation preview when v2 group changes"
},
"GroupV2--access-attributes--admins--unknown": {
"message": "Un administrateur a changé qui peut modifier les renseignements du groupe en « Les administrateurs ».",
"message": "Un administrateur a changé qui peut modifier les informations du groupe en « Les administrateurs ».",
"description": "Shown in timeline or conversation preview when v2 group changes"
},
"GroupV2--access-attributes--all--other": {
"message": "$adminName$ a changé qui peut modifier les renseignements du groupe en « Tous les membres ».",
"message": "$adminName$ a changé qui peut modifier les informations du groupe en « Tous les membres ».",
"description": "Shown in timeline or conversation preview when v2 group changes",
"placeholders": {
"adminName": {
@ -4376,11 +4376,11 @@
}
},
"GroupV2--access-attributes--all--you": {
"message": "Vous avez changé qui peut modifier les renseignements du groupe en « Tous les membres ».",
"message": "Vous avez changé qui peut modifier les informations du groupe en « Tous les membres ».",
"description": "Shown in timeline or conversation preview when v2 group changes"
},
"GroupV2--access-attributes--all--unknown": {
"message": "Un administrateur a changé qui peut modifier les renseignements du groupe en « Tous les membres ».",
"message": "Un administrateur a changé qui peut modifier les informations du groupe en « Tous les membres ».",
"description": "Shown in timeline or conversation preview when v2 group changes"
},
"GroupV2--access-members--admins--other": {
@ -5610,7 +5610,7 @@
"description": "This is the label for notifications in the conversation details screen"
},
"ConversationDetails--group-info-label": {
"message": "Qui peut modifier les renseignements du groupe",
"message": "Qui peut modifier les informations du groupe",
"description": "This is the label for the 'who can edit the group' panel"
},
"ConversationDetails--group-info-info": {
@ -6358,11 +6358,11 @@
"description": "Text for an option in Conversation Details Disappearing Messages setting when user previously selected custom time"
},
"DisappearingTimeDialog__label--value": {
"message": "Number",
"message": "Nombre",
"description": "aria-label for the number select box"
},
"DisappearingTimeDialog__label--units": {
"message": "Unit of time",
"message": "Unité de temps",
"description": "aria-label for the units of time select box"
},
"DisappearingTimeDialog__title": {
@ -6822,11 +6822,11 @@
}
},
"NSIS__decompressionFailed": {
"message": "Failed to decompress files. Please try running the installer again.",
"message": "Échec de décompression des fichiers. Veuillez réessayer dexécuter l'installeur.",
"description": "Displayed when Windows installer cannot decompress application files"
},
"NSIS__uninstallFailed": {
"message": "Failed to uninstall old application files. Please try running the installer again.",
"message": "Échec de désinstallation des anciens fichiers d'application . Veuillez réessayer dexécuter l'installeur.",
"description": "Displayed when Windows installer cannot uninstall the old application"
},
"CrashReportDialog__title": {
@ -7013,6 +7013,10 @@
"message": "Ajouter une histoire",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Histoires cachées",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Aucune histoire récente à afficher pour linstant",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Histoire",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Montrer les histoires",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Cacher lhistoire",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Cette version contient un certain nombre de petits ajustements et de corrections de bogues pour assurer le bon fonctionnement de Signal.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Les renseignements tels que les estampilles temporelles sont sur la même ligne que le texte afin que les messages courts soient courts. Vous avez désormais plus despace sur lécran pour ce « Salut » rapide à vos amis.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Adieu, paquets dautocollants manquants! Signal pour ordinateur devrait désormais pouvoir gérer tous les paquets que votre téléphone peut gérer.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Vous pouvez désormais ajouter des personnes aux groupes grâce à leur numéro de téléphone.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Vos contacts favoris sont désormais facilement accessibles et la recherche de contacts prend en charge les alphabets non latins tels que le cyrillique.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"description": "Release notes for v5.40"

View File

@ -7013,6 +7013,10 @@
"message": "Cuir sgeul ris",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Hidden stories",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Chan eil sgeul o chionn goirid ri shealltainn ann",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Sgeul",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Show stories",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Falaich an sgeul",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Chaidh rudan beaga a ghleusadh agus bugaichean a chàradh leis an tionndadh seo airson Signal a chumail a ruith gu rèidh.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Cumaidh sinn teachdaireachdan goirid goirid le stuth mar stampaichean-tìde air an aon loidhne s a tha an teacsa. Tha barrachd rùm air an sgrìn agad a-nis airson an “Sin thu!” luath a chuireadh tu gu caraid.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Chan eil pacaidean steigearan a dhìth tuilleadh! Bu chòir dhut pacaid steigearan sam bith a chì am fòn agad fhaicinn air an tionndadh Desktop cuideachd a-nis!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "S urrainn dhut daoine a chur ri buidhnean leis an àireamh fòn a-mhàin a-nis.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Bidh an luchd-aithne as annsa leat ri làimh dhut le brùthadh iuchrach no dhà a-nis. Cuiridh an lorg san luchd-aithne taic ri aibidilean neo-Laideann mar Cirilis a-nis.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"description": "Release notes for v5.40"

View File

@ -7013,6 +7013,10 @@
"message": "הוסף סיפור",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "סיפורים מוסתרים",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "אין סיפורים אחרונים להראות כרגע",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "סיפור",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "הראה סיפורים",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "הסתר סיפור",
"description": "Label for menu item to hide the story"
@ -7095,24 +7103,8 @@
"message": "גרסה זו מכילה מספר של שפצורים קטנים ותיקוני תקלים כדי לשמור על Signal שירוץ באופן חלק.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "We're keeping short messages short, by putting stuff like timestamps on the same line as the text. Now you've got more space on the screen for that quick 'hey' to check in on a friend.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Missing sticker packs begone! Desktop should now be able to handle all sticker packs that your phone can!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "אתה יכול עכשיו להוסיף אנשים ע״י שימוש רק במספר הטלפון שלהם.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Your favorite contacts are now just a few keystrokes away. Contact search now supports non-Latin alphabets like Cyrillic.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"message": "תיקוני תקלים כולל תיקון אל סוגייה שהקשתה לפעמים ללחוץ על תפריטים.",
"description": "Release notes for v5.40"
},
"WhatsNew__v5.40--2": {

View File

@ -222,7 +222,7 @@
"description": "Shown at the top of the archived conversations list in the left pane"
},
"noArchivedConversations": {
"message": "No archived conversations.",
"message": "Nincs archivált beszélgetés.",
"description": "Shown at the top of the archived conversations list in the left pane if there is no any archived conversation"
},
"archiveConversation": {
@ -6358,11 +6358,11 @@
"description": "Text for an option in Conversation Details Disappearing Messages setting when user previously selected custom time"
},
"DisappearingTimeDialog__label--value": {
"message": "Number",
"message": "Szám",
"description": "aria-label for the number select box"
},
"DisappearingTimeDialog__label--units": {
"message": "Unit of time",
"message": "Időegység",
"description": "aria-label for the units of time select box"
},
"DisappearingTimeDialog__title": {
@ -6812,7 +6812,7 @@
"description": "Second line of the dialog displayed when Windows installer can't close application automatically and needs user intervention to complete the installation."
},
"NSIS__appRunning": {
"message": "$appName$ is running.\nClick OK to close it.\nIf it doesn't close, try closing it manually.",
"message": "A $appName$ alkalmazás fut.\nKattints az OK gombra a bezárásához.\nHa így sem áll le, zárd be manuálisan.",
"description": "The contents of a dialog displayed when Windows installer detect that the application is running and asks user to close it. Note: please keep the line breaks so that the text occupies three separate lines",
"placeholders": {
"appName": {
@ -6822,11 +6822,11 @@
}
},
"NSIS__decompressionFailed": {
"message": "Failed to decompress files. Please try running the installer again.",
"message": "Kicsomagolási hiba. Kérlek futtasd a telepítőt újra!",
"description": "Displayed when Windows installer cannot decompress application files"
},
"NSIS__uninstallFailed": {
"message": "Failed to uninstall old application files. Please try running the installer again.",
"message": "A régi alkalmazás állományait nem sikerült törölni. Kérlek futtasd a telepítőt újra!",
"description": "Displayed when Windows installer cannot uninstall the old application"
},
"CrashReportDialog__title": {
@ -7013,6 +7013,10 @@
"message": "Történet hozzáadása",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Elrejtett történetek",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Nincs aktuális friss történet",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Történet",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Történetek megjelenítése",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Történet elrejtése",
"description": "Label for menu item to hide the story"
@ -7095,28 +7103,12 @@
"message": "Ebbe a verzióba néhány kisebb újítás és hibajavítás került annak érdekében, hogy a Signal továbbra is gond nélkül fusson.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Mostantól a rövid üzenetek kevesebb helyet foglalnak, mivel az időbélyeget a szöveggel egy magasságba helyeztük. Így több hely marad a képernyőn frappáns egyszavas beköszönéseidnek.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Soha többé hiányzó matricacsomagok! Az asztali Signal verzió mostantól minden telefonon telepített csomaggal is megbirkózik.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Mostantól hozzáadhatsz csoporttagokat pusztán telefonszámuk alapján is.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Kedvenc kontaktjaid csak pár gombnyomás távolságra vannak. A kontaktkereső már támogatja a nem-latin kiosztásokat is, mint például a cirill.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"message": "Hibajavítások. Orvosoltunk egy problémát, amikor a menüelemekre kattintás nem minden esetben működött.",
"description": "Release notes for v5.40"
},
"WhatsNew__v5.40--2": {
"message": "Thanks to our open source contributors $dsanders11$ and $yusufsahinhamza$ for contributing to these improvements.",
"message": "Köszönjük a nyílt forrású hozzájárulásokat $dsanders11$ és $yusufsahinhamza$ felhasználóknak, akik közreműködtek számos hiba javításában.",
"description": "Release notes for v5.40",
"placeholders": {
"dsanders11": {

View File

@ -7013,6 +7013,10 @@
"message": "Bæta við sögu",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Faldar sögur",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Í augnablikinu eru engar nýlegar sögur til að birta",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Saga",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Show stories",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Fela sögu",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Þessi útgáfa inniheldur nokkrar villuleiðréttingar og fínstillingar til að Signal keyri sem áreiðanlegast.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Við höldum stuttum skilaboðum verulega stuttum, með því að setja dót eins og tímamerki í sömu línu og sjálfann textann. Þá hefurðu meira pláss til að sinna öðru.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Nú ætti aldrei að vanta neina límmerkjapakka. Vinnutölvuútgáfan getur núna meðhöndlað alla þá sömu límmerkjapakka og síminn þinn getur.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Þú getur núna bætt fólki í hópa með símanúmerinu þeirra.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Eftirlætistengiliðirnir þínir eru núna innan seilingar. Leit að tengiliðum styður núna stafróf sem ekki eru með latnesku letri, eins og t.d. kyrilísku.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"description": "Release notes for v5.40"

View File

@ -7013,6 +7013,10 @@
"message": "Aggiungi una storia",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Storie nascoste",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Nessuna storia recente da mostrare al momento",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Storia",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Mostra storie",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Nascondi storia",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Questa versione contiene una serie di piccole modifiche e correzioni di bug per far funzionare Signal senza problemi.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Stiamo mantenendo i messaggi brevi, mettendo cose come i timestamp sulla stessa linea del testo. Ora hai più spazio sullo schermo per quel rapido 'ehi' per sentirti con un amico.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Addio ai pacchetti di adesivi mancanti! Desktop dovrebbe ora essere in grado di gestire tutti i pacchetti di adesivi che il tuo telefono è in grado di gestire!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Ora puoi aggiungere persone ai gruppi usando solo il loro numero di telefono.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "I tuoi contatti preferiti sono ora a pochi tasti di distanza. La ricerca di contatti ora supporta alfabeti non latini come il cirillico.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Correzioni di bug, inclusa la correzione di un problema che a volte rendeva difficile cliccare sui menu. ",
"description": "Release notes for v5.40"

View File

@ -222,7 +222,7 @@
"description": "Shown at the top of the archived conversations list in the left pane"
},
"noArchivedConversations": {
"message": "No archived conversations.",
"message": "アーカイブ済みのチャットはありません。",
"description": "Shown at the top of the archived conversations list in the left pane if there is no any archived conversation"
},
"archiveConversation": {
@ -2406,7 +2406,7 @@
"description": "Shown if request to Signal servers to find username fails"
},
"Toast--failed-to-fetch-phone-number": {
"message": "Failed to fetch phone number. Check your connection and try again.",
"message": "電話番号の取得に失敗しました。接続を確認して再度お試しください。",
"description": "Shown if request to Signal servers to find phone number fails"
},
"startConversation--username-not-found": {
@ -2420,7 +2420,7 @@
}
},
"startConversation--phone-number-not-found": {
"message": "User not found. \"$phoneNumber$\" is not a Signal user.",
"message": "ユーザーが見つかりません。\"$phoneNumber$\"は、Signalユーザーではありません。",
"description": "Shown in dialog if phone number is not found.",
"placeholders": {
"phoneNumber": {
@ -2430,7 +2430,7 @@
}
},
"startConversation--phone-number-not-valid": {
"message": "User not found. \"$phoneNumber$\" is not a valid phone number.",
"message": "ユーザーが見つかりません。\"$phoneNumber$\"は、無効な電話番号です。",
"description": "Shown in dialog if phone number is not valid.",
"placeholders": {
"phoneNumber": {
@ -5196,7 +5196,7 @@
}
},
"GroupV2--admin-approval-bounce--one": {
"message": "$joinerName$ requested and cancelled their request to join via the group link",
"message": "$joinerName$ は、グループリンクからの参加申請をキャンセルしました。",
"description": "Shown in timeline or conversation preview when v2 group changes",
"placeholders": {
"joinerName": {
@ -5206,7 +5206,7 @@
}
},
"GroupV2--admin-approval-bounce": {
"message": "$joinerName$ requested and cancelled $numberOfRequests$ requests to join via the group link",
"message": "$joinerName$ は、グループリンクからの参加申請を$numberOfRequests$件キャンセルしました。",
"description": "Shown in timeline or conversation preview when v2 group changes",
"placeholders": {
"joinerName": {
@ -5796,7 +5796,7 @@
}
},
"PendingRequests--deny-for--with-link": {
"message": "Deny request from \"$name$\"? They will not be able to request to join via the group link again.",
"message": "\"$name$\" からの申請を拒否しますか?このユーザーは、このグループリンクから再申請できなくなります。",
"description": "This is the modal content when confirming denying a group request to join",
"placeholders": {
"name": {
@ -5904,7 +5904,7 @@
"description": "Title of dialog to block a user from requesting to join via the link again"
},
"PendingRequests--block--contents": {
"message": "$name$ will not be able to join or request to join this group via the group link. They can still be added to the group manually.",
"message": "$name$ はこのグループリンクからの参加申請ができなくなりますが、手動でグループに追加することはできます。",
"description": "Details of dialog to block a user from requesting to join via the link again",
"placeholders": {
"name": {
@ -6210,7 +6210,7 @@
}
},
"RemoveGroupMemberConfirmation__description__with-link": {
"message": "Remove \"$name$\" from the group? They will not be able to rejoin via the group link.",
"message": "\"$name$\"を、グループから削除しますか?このユーザは、グループリンクからもう一度このグループに入ることは、できなくなります。",
"description": "When confirming the removal of a group member, show this text in the dialog",
"placeholders": {
"name": {
@ -6812,7 +6812,7 @@
"description": "Second line of the dialog displayed when Windows installer can't close application automatically and needs user intervention to complete the installation."
},
"NSIS__appRunning": {
"message": "$appName$ is running.\nClick OK to close it.\nIf it doesn't close, try closing it manually.",
"message": "$appName$ が起動しています。\nOKをクリックして、閉じてください。\n閉じない場合は、手動で閉じてください。",
"description": "The contents of a dialog displayed when Windows installer detect that the application is running and asks user to close it. Note: please keep the line breaks so that the text occupies three separate lines",
"placeholders": {
"appName": {
@ -6822,11 +6822,11 @@
}
},
"NSIS__decompressionFailed": {
"message": "Failed to decompress files. Please try running the installer again.",
"message": "ファイルの解凍に失敗しました。もう一度インストーラーを実行してみてください。",
"description": "Displayed when Windows installer cannot decompress application files"
},
"NSIS__uninstallFailed": {
"message": "Failed to uninstall old application files. Please try running the installer again.",
"message": "古いアプリケーションファイルのアンインストールに失敗しました。もう一度インストーラーを実行してみてください。",
"description": "Displayed when Windows installer cannot uninstall the old application"
},
"CrashReportDialog__title": {
@ -7013,6 +7013,10 @@
"message": "ストーリーを追加",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "非表示のストーリー",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "表示できるストーリーはありません",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "ストーリー",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "ストーリーを表示",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "ストーリーを閉じる",
"description": "Label for menu item to hide the story"
@ -7095,28 +7103,12 @@
"message": "Signalをスムーズに動作させるための微調整とバグ修正を行いました。",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "タイムスタンプをテキストと同じ行に配置することで、画面のスペースを節約し、たくさんのメッセージを表示できるようになりました。",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "デスクトップ版Signalでステッカーパックが表示されないバグが、修正されました。スマートフォンと同じステッカーパックが使えます。",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "グループのメンバーを電話番号で追加できるようになりました。",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "連絡先の検索に、キリル文字などのラテン語以外の言語が対応しました。",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"message": "メニューがクリックしにくくなることがあるバグを修正しました。",
"description": "Release notes for v5.40"
},
"WhatsNew__v5.40--2": {
"message": "Thanks to our open source contributors $dsanders11$ and $yusufsahinhamza$ for contributing to these improvements.",
"message": "コントリビューターである、$dsanders11$ と、 $yusufsahinhamza$、ありがとうございます!",
"description": "Release notes for v5.40",
"placeholders": {
"dsanders11": {

View File

@ -7013,6 +7013,10 @@
"message": "Pridėti istoriją",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Paslėptos istorijos",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Šiuo metu nėra paskiausių istorijų, kurias rodyti",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Istorija",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Rodyti istorijas",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Slėpti istoriją",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Šioje versijoje yra daug smulkių patobulinimų ir klaidų ištaisymų, kurie padės Signal sklandžiai veikti.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Trumpas žinutes išlaikome trumpomis, atvaizduodami laiko žymes toje pačioje eilutėje, kaip ir tekstą. Dabar, ekrane yra daugiau vietos, kad parašytumėte draugui greitą žinutę su žodžiu „Labas“.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Šalin trūkstamus lipdukų paketus! Dabar, darbalaukio programa turėtų gebėti apdoroti visus lipdukų paketus, kuriuos gali apdoroti jūsų telefonas!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Dabar, galite pridėti žmones į grupes, naudodami tik jų telefono numerį.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Jūsų mėgstami adresatai yra tik kelių klavišų paspaudimų atstumu. Adresatų paieška nuo šiol palaiko ne lotyniškas abėcėles, pavyzdžiui, kirilicą.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Klaidų pataisymas, skirtas išspręsti problemą, dėl kurios, kartais, būdavo sunku spustelėti ant meniu.",
"description": "Release notes for v5.40"

View File

@ -221,6 +221,10 @@
"message": "Šīs sarunas ir arhivētas un iesūtnē būs redzamas tikai tad, ja tiks saņemtas jaunas ziņas.",
"description": "Shown at the top of the archived conversations list in the left pane"
},
"noArchivedConversations": {
"message": "No archived conversations.",
"description": "Shown at the top of the archived conversations list in the left pane if there is no any archived conversation"
},
"archiveConversation": {
"message": "Arhīvs",
"description": "Shown in menu for conversation, and moves conversation out of main conversation list"
@ -6353,6 +6357,14 @@
"message": "Pielāgots laiks",
"description": "Text for an option in Conversation Details Disappearing Messages setting when user previously selected custom time"
},
"DisappearingTimeDialog__label--value": {
"message": "Number",
"description": "aria-label for the number select box"
},
"DisappearingTimeDialog__label--units": {
"message": "Unit of time",
"description": "aria-label for the units of time select box"
},
"DisappearingTimeDialog__title": {
"message": "Pielāgots laiks",
"description": "Title for the custom disappearing message timeout dialog"
@ -6799,6 +6811,24 @@
"message": "Please close it manually and click Retry to continue.",
"description": "Second line of the dialog displayed when Windows installer can't close application automatically and needs user intervention to complete the installation."
},
"NSIS__appRunning": {
"message": "$appName$ is running.\nClick OK to close it.\nIf it doesn't close, try closing it manually.",
"description": "The contents of a dialog displayed when Windows installer detect that the application is running and asks user to close it. Note: please keep the line breaks so that the text occupies three separate lines",
"placeholders": {
"appName": {
"content": "$1",
"example": "Signal"
}
}
},
"NSIS__decompressionFailed": {
"message": "Failed to decompress files. Please try running the installer again.",
"description": "Displayed when Windows installer cannot decompress application files"
},
"NSIS__uninstallFailed": {
"message": "Failed to uninstall old application files. Please try running the installer again.",
"description": "Displayed when Windows installer cannot uninstall the old application"
},
"CrashReportDialog__title": {
"message": "Application crashed",
"description": "A title of the dialog displayed when starting an application after a recent crash"
@ -6983,6 +7013,10 @@
"message": "Pievienot stāstu",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Paslēptie stāsti",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "No recent stories to show right now",
"description": "Description for when there are no stories to show"
@ -7033,6 +7067,10 @@
"message": "Story",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Show stories",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Paslēpt stāstu",
"description": "Label for menu item to hide the story"
@ -7065,28 +7103,22 @@
"message": "This version contains a number of small tweaks and bug fixes to keep Signal running smoothly.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.36--1": {
"message": "Quickly scanning that group chat? There's more room for more messages on the screen at once. We now group sender's messages together if they're close together in time.",
"description": "Release notes for v5.36"
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"description": "Release notes for v5.40"
},
"WhatsNew__v5.36--2": {
"message": "When you perform a Delete for Everyone you'll now see a progress spinner letting you know whether it's been successfully sent or not. If it fails for some reason, you'll be able to retry too!",
"description": "Release notes for v5.36"
},
"WhatsNew__v5.37--1": {
"message": "We're keeping short messages short, by putting stuff like timestamps on the same line as the text. Now you've got more space on the screen for that quick 'hey' to check in on a friend.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Missing sticker packs begone! Desktop should now be able to handle all sticker packs that your phone can!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "You can now add people to groups using just their phone number.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Your favorite contacts are now just a few keystrokes away. Contact search now supports non-Latin alphabets like Cyrillic.",
"description": "Release notes for v5.39"
"WhatsNew__v5.40--2": {
"message": "Thanks to our open source contributors $dsanders11$ and $yusufsahinhamza$ for contributing to these improvements.",
"description": "Release notes for v5.40",
"placeholders": {
"dsanders11": {
"content": "$1",
"example": "dsanders11"
},
"yusufsahinhamza": {
"content": "$2",
"example": "yusufsahinhamza"
}
}
}
}

View File

@ -221,6 +221,10 @@
"message": "Овие разговори се архивирани и ќе се појават во сандачето само ако има нови пристигнати пораки.",
"description": "Shown at the top of the archived conversations list in the left pane"
},
"noArchivedConversations": {
"message": "No archived conversations.",
"description": "Shown at the top of the archived conversations list in the left pane if there is no any archived conversation"
},
"archiveConversation": {
"message": "Архива",
"description": "Shown in menu for conversation, and moves conversation out of main conversation list"
@ -6353,6 +6357,14 @@
"message": "Прилагоди време",
"description": "Text for an option in Conversation Details Disappearing Messages setting when user previously selected custom time"
},
"DisappearingTimeDialog__label--value": {
"message": "Number",
"description": "aria-label for the number select box"
},
"DisappearingTimeDialog__label--units": {
"message": "Unit of time",
"description": "aria-label for the units of time select box"
},
"DisappearingTimeDialog__title": {
"message": "Прилагоди време",
"description": "Title for the custom disappearing message timeout dialog"
@ -6799,6 +6811,24 @@
"message": "Please close it manually and click Retry to continue.",
"description": "Second line of the dialog displayed when Windows installer can't close application automatically and needs user intervention to complete the installation."
},
"NSIS__appRunning": {
"message": "$appName$ is running.\nClick OK to close it.\nIf it doesn't close, try closing it manually.",
"description": "The contents of a dialog displayed when Windows installer detect that the application is running and asks user to close it. Note: please keep the line breaks so that the text occupies three separate lines",
"placeholders": {
"appName": {
"content": "$1",
"example": "Signal"
}
}
},
"NSIS__decompressionFailed": {
"message": "Failed to decompress files. Please try running the installer again.",
"description": "Displayed when Windows installer cannot decompress application files"
},
"NSIS__uninstallFailed": {
"message": "Failed to uninstall old application files. Please try running the installer again.",
"description": "Displayed when Windows installer cannot uninstall the old application"
},
"CrashReportDialog__title": {
"message": "Application crashed",
"description": "A title of the dialog displayed when starting an application after a recent crash"
@ -6983,6 +7013,10 @@
"message": "Додај приказна",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Скриени приказни",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "No recent stories to show right now",
"description": "Description for when there are no stories to show"
@ -7033,6 +7067,10 @@
"message": "Story",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Show stories",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Сокриј приказна",
"description": "Label for menu item to hide the story"
@ -7065,28 +7103,22 @@
"message": "This version contains a number of small tweaks and bug fixes to keep Signal running smoothly.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.36--1": {
"message": "Quickly scanning that group chat? There's more room for more messages on the screen at once. We now group sender's messages together if they're close together in time.",
"description": "Release notes for v5.36"
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"description": "Release notes for v5.40"
},
"WhatsNew__v5.36--2": {
"message": "When you perform a Delete for Everyone you'll now see a progress spinner letting you know whether it's been successfully sent or not. If it fails for some reason, you'll be able to retry too!",
"description": "Release notes for v5.36"
},
"WhatsNew__v5.37--1": {
"message": "We're keeping short messages short, by putting stuff like timestamps on the same line as the text. Now you've got more space on the screen for that quick 'hey' to check in on a friend.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Missing sticker packs begone! Desktop should now be able to handle all sticker packs that your phone can!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "You can now add people to groups using just their phone number.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Your favorite contacts are now just a few keystrokes away. Contact search now supports non-Latin alphabets like Cyrillic.",
"description": "Release notes for v5.39"
"WhatsNew__v5.40--2": {
"message": "Thanks to our open source contributors $dsanders11$ and $yusufsahinhamza$ for contributing to these improvements.",
"description": "Release notes for v5.40",
"placeholders": {
"dsanders11": {
"content": "$1",
"example": "dsanders11"
},
"yusufsahinhamza": {
"content": "$2",
"example": "yusufsahinhamza"
}
}
}
}

View File

@ -324,7 +324,7 @@
"description": "Used as a label on a button allowing user to see more information"
},
"youLeftTheGroup": {
"message": "Je kunt geen berichten verzenden omdat je niet langer lid bent van de groep.",
"message": "Je bent niet langer lid van deze groep en je zult daarom geen nieuwe berichten zien.",
"description": "Displayed when a user can't send a message because they have left the group"
},
"invalidConversation": {
@ -464,7 +464,7 @@
"description": "Shown in conversation banner when more than one group member's safety number has changed, but they were previously verified."
},
"debugLogExplanation": {
"message": "Als je op uploaden klikt dan wordt dit log 30 dagen lang online beschikbaar gesteld op een unieke nergens onthulde URL. Die URL kun je vervolgens naar de ontwikkelaars sturen. Je kunt dit log ook offline op je eigen apparaat opslaan.",
"message": "Dit log bevat geen persoonlijke details zoals telefoonnummers. Als je op uploaden klikt dan wordt dit log 30 dagen lang online beschikbaar gesteld op een unieke nergens onthulde verwijzing. Die verwijzing kun je zelf naar de ontwikkelaars sturen. Je kunt dit log ook offline op je eigen apparaat opslaan.",
"description": "Description of what will happen with your debug log"
},
"debugLogError": {
@ -504,7 +504,7 @@
"description": "Label for a button that dismisses a dialog. The user clicks it to confirm that they understand the message in the dialog."
},
"submit": {
"message": "Verzenden",
"message": "Uploaden",
"description": ""
},
"acceptNewKey": {
@ -1276,7 +1276,7 @@
"description": "Shown in left pane preview when message delivery issue happens"
},
"DeliveryIssue--notification": {
"message": "Een bericht van $sender$ kon niet worden afgeleverd",
"message": "Een bericht van $sender$ kan niet worden afgeleverd",
"description": "Shown in timeline when message delivery issue happens",
"placeholders": {
"name": {
@ -1940,7 +1940,7 @@
"description": "Header in the settings dialog for the section dealing with data deletion"
},
"clearDataExplanation": {
"message": "Dit verwijdert alle gegevens in de toepassing: alle berichten, alle opgeslagen voorkeuren en alle profielinformatie.",
"message": "Dit wist alle gegevens in de toepassing: alle berichten, alle opgeslagen voorkeuren en alle profielinformatie.",
"description": "Text describing what the clear data button will do."
},
"clearDataButton": {
@ -1960,7 +1960,7 @@
"description": "Text of the button that deletes all data"
},
"deleteAllDataProgress": {
"message": "Verbinding wordt verbroken en alle gegevens worden verwijderd",
"message": "Verbinding wordt verbroken en alle gegevens worden gewist",
"description": "Message shown to user when app is disconnected and data deleted"
},
"deleteOldIndexedDBData": {
@ -2674,7 +2674,7 @@
}
},
"ConversationList__last-message-undefined": {
"message": "Het meest recente bericht is mogelijk verwijderd.",
"message": "Het meest recente bericht is mogelijk gewist.",
"description": "For aria-label within conversation list. Describes if last message is not defined."
},
"BaseConversationListItem__aria-label": {
@ -3556,7 +3556,7 @@
"description": "Shown as a button to let the user delete any message request"
},
"MessageRequests--delete-direct-confirm-title": {
"message": "Gesprek verwijderen?",
"message": "Gesprek wissen?",
"description": "Shown as the title in the confirmation modal for deleting a private message request"
},
"MessageRequests--delete-direct-confirm-body": {
@ -3564,7 +3564,7 @@
"description": "Shown as the body in the confirmation modal for deleting a private message request"
},
"MessageRequests--delete-group-confirm-title": {
"message": "$group$ verlaten en verwijderen?",
"message": "$group$ verlaten en wissen?",
"description": "Shown as the title in the confirmation modal for deleting a group message request",
"placeholders": {
"group": {
@ -3574,11 +3574,11 @@
}
},
"MessageRequests--delete-direct": {
"message": "Verwijderen",
"message": "Wissen",
"description": "Shown as a button to let the user delete a direct message request"
},
"MessageRequests--delete-group": {
"message": "Verwijderen en verlaten",
"message": "Wissen en verlaten",
"description": "Shown as a button to let the user delete a group message request"
},
"MessageRequests--delete-group-confirm-body": {
@ -6256,7 +6256,7 @@
"description": "Displayed when delete-for-everyone has failed to send to all recipients"
},
"ChatColorPicker__delete--title": {
"message": "Kleur verwijderen",
"message": "Kleur wissen",
"description": "Confirm title for deleting custom color"
},
"ChatColorPicker__delete--message": {
@ -6532,15 +6532,15 @@
"description": "Shown if something unknown has gone wrong with username save."
},
"ProfileEditor--username--delete-general-error": {
"message": "Je gebruikersnaam kan niet worden verwijderd. Ga na dat je apparaat met het internet is verbonden en probeer het opnieuw.",
"message": "Je gebruikersnaam kan niet worden gewist. Ga na dat je apparaat met het internet is verbonden en probeer het opnieuw.",
"description": "Shown if something unknown has gone wrong with username delete."
},
"ProfileEditor--username--delete-username": {
"message": "Gebruikersnaam verwijderen",
"message": "Gebruikersnaam wissen",
"description": "Shown as aria label for trash icon next to username"
},
"ProfileEditor--username--confirm-delete-body": {
"message": "Je staat op het punt je gebruikersnaam te verwijderen. Als je door gaat kunnen anderen deze naam claimen. Weet je het zeker?",
"message": "Je staat op het punt je gebruikersnaam te wissen. Als je door gaat kunnen anderen deze naam claimen. Weet je het zeker?",
"description": "Shown in dialog body if user has saved an empty string to delete their username"
},
"ProfileEditor--username--confirm-delete-button": {
@ -7013,6 +7013,10 @@
"message": "Een verhaal toevoegen",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Verborgen verhalen",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Er zijn op dit moment geen recente verhalen om weer te geven",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Verhaal",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Verhalen niet langer verbergen",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Verhaal verbergen",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Deze versie bevat een aantal kleine foutoplossingen waardoor Signal voor nog meer mensen goed werkt.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Korte berichten zijn vanaf nu nog korter, omdat de tijdsindicatie op dezelfde regel staat als de tekst van je bericht.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Er was een fout waardoor sommige stickerpakketten niet konden worden weergegeven in Signal-desktop. Vanaf nu kun je alle stickerpakketten zien net als op je telefoon.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Je kunt vanaf nu ook personen toevoegen aan groepen door alleen hun telefoonnummer in te voeren.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Ook personen die niet het Latijnse alfabet gebruiken kunnen vanaf nu contactpersonen zoeken.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Foutoplossingen, waaronder een oplossing voor een fout waarbij het soms moeilijk was op op menuknoppen te klikken.",
"description": "Release notes for v5.40"

View File

@ -221,6 +221,10 @@
"message": "Desse samtalane er arkiverte og vil berre dukka opp i innboksen viss du får nye meldingar.",
"description": "Shown at the top of the archived conversations list in the left pane"
},
"noArchivedConversations": {
"message": "No archived conversations.",
"description": "Shown at the top of the archived conversations list in the left pane if there is no any archived conversation"
},
"archiveConversation": {
"message": "Arkiver",
"description": "Shown in menu for conversation, and moves conversation out of main conversation list"
@ -6353,6 +6357,14 @@
"message": "Anna intervall",
"description": "Text for an option in Conversation Details Disappearing Messages setting when user previously selected custom time"
},
"DisappearingTimeDialog__label--value": {
"message": "Number",
"description": "aria-label for the number select box"
},
"DisappearingTimeDialog__label--units": {
"message": "Unit of time",
"description": "aria-label for the units of time select box"
},
"DisappearingTimeDialog__title": {
"message": "Anna intervall",
"description": "Title for the custom disappearing message timeout dialog"
@ -6799,6 +6811,24 @@
"message": "Please close it manually and click Retry to continue.",
"description": "Second line of the dialog displayed when Windows installer can't close application automatically and needs user intervention to complete the installation."
},
"NSIS__appRunning": {
"message": "$appName$ is running.\nClick OK to close it.\nIf it doesn't close, try closing it manually.",
"description": "The contents of a dialog displayed when Windows installer detect that the application is running and asks user to close it. Note: please keep the line breaks so that the text occupies three separate lines",
"placeholders": {
"appName": {
"content": "$1",
"example": "Signal"
}
}
},
"NSIS__decompressionFailed": {
"message": "Failed to decompress files. Please try running the installer again.",
"description": "Displayed when Windows installer cannot decompress application files"
},
"NSIS__uninstallFailed": {
"message": "Failed to uninstall old application files. Please try running the installer again.",
"description": "Displayed when Windows installer cannot uninstall the old application"
},
"CrashReportDialog__title": {
"message": "Application crashed",
"description": "A title of the dialog displayed when starting an application after a recent crash"
@ -6983,6 +7013,10 @@
"message": "Lag historie",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Gøymde historier",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "No recent stories to show right now",
"description": "Description for when there are no stories to show"
@ -7033,6 +7067,10 @@
"message": "Story",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Show stories",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Skjul historie",
"description": "Label for menu item to hide the story"
@ -7065,28 +7103,22 @@
"message": "This version contains a number of small tweaks and bug fixes to keep Signal running smoothly.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.36--1": {
"message": "Quickly scanning that group chat? There's more room for more messages on the screen at once. We now group sender's messages together if they're close together in time.",
"description": "Release notes for v5.36"
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"description": "Release notes for v5.40"
},
"WhatsNew__v5.36--2": {
"message": "When you perform a Delete for Everyone you'll now see a progress spinner letting you know whether it's been successfully sent or not. If it fails for some reason, you'll be able to retry too!",
"description": "Release notes for v5.36"
},
"WhatsNew__v5.37--1": {
"message": "We're keeping short messages short, by putting stuff like timestamps on the same line as the text. Now you've got more space on the screen for that quick 'hey' to check in on a friend.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Missing sticker packs begone! Desktop should now be able to handle all sticker packs that your phone can!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "You can now add people to groups using just their phone number.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Your favorite contacts are now just a few keystrokes away. Contact search now supports non-Latin alphabets like Cyrillic.",
"description": "Release notes for v5.39"
"WhatsNew__v5.40--2": {
"message": "Thanks to our open source contributors $dsanders11$ and $yusufsahinhamza$ for contributing to these improvements.",
"description": "Release notes for v5.40",
"placeholders": {
"dsanders11": {
"content": "$1",
"example": "dsanders11"
},
"yusufsahinhamza": {
"content": "$2",
"example": "yusufsahinhamza"
}
}
}
}

View File

@ -7013,6 +7013,10 @@
"message": "Dodaj historię",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Ukryte historie",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "W tej chwili nie ma nowych historii do pokazania",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Historia",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Pokaż historie",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Ukryj historię",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Ta wersja zawiera wiele drobnych ulepszeń i poprawek błędów, zapewniających płynne działanie aplikacji Signal.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Pilnujemy, żeby krótkie wiadomości pozostały krótkie, umieszczając stemple czasowe itp. w tej samej linii, co tekst. Masz teraz więcej przestrzeni na ekranie, żeby rzucić przyjaciołom krótkie \"cześć\".",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Przepadnijcie brakujące pakiety naklejek! Aplikacja Desktop powinna teraz obsługiwać wszystkie pakiety naklejek, które masz na telefonie!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Teraz możesz dodawać ludzi do grup, używając tylko ich numeru telefonu.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Twoje ulubione kontakty znajdą się już po naciśnięciu kilku klawiszy. Wyszukiwanie kontaktów obsługuje teraz alfabety inne, niż łaciński, takie jak cyrylica.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Poprawki błędów, w tym problemu powodującego czasem trudności z kliknięciem menu.",
"description": "Release notes for v5.40"

View File

@ -222,7 +222,7 @@
"description": "Shown at the top of the archived conversations list in the left pane"
},
"noArchivedConversations": {
"message": "No archived conversations.",
"message": "Nenhuma conversa arquivada.",
"description": "Shown at the top of the archived conversations list in the left pane if there is no any archived conversation"
},
"archiveConversation": {
@ -6358,11 +6358,11 @@
"description": "Text for an option in Conversation Details Disappearing Messages setting when user previously selected custom time"
},
"DisappearingTimeDialog__label--value": {
"message": "Number",
"message": "Número",
"description": "aria-label for the number select box"
},
"DisappearingTimeDialog__label--units": {
"message": "Unit of time",
"message": "Unidade de tempo",
"description": "aria-label for the units of time select box"
},
"DisappearingTimeDialog__title": {
@ -6812,7 +6812,7 @@
"description": "Second line of the dialog displayed when Windows installer can't close application automatically and needs user intervention to complete the installation."
},
"NSIS__appRunning": {
"message": "$appName$ is running.\nClick OK to close it.\nIf it doesn't close, try closing it manually.",
"message": "$appName$ está funcionando.\nClique no OK para fechar.\nSe não fechar, tente fechá-lo manualmente.",
"description": "The contents of a dialog displayed when Windows installer detect that the application is running and asks user to close it. Note: please keep the line breaks so that the text occupies three separate lines",
"placeholders": {
"appName": {
@ -6822,11 +6822,11 @@
}
},
"NSIS__decompressionFailed": {
"message": "Failed to decompress files. Please try running the installer again.",
"message": "Falha ao descompactar os arquivos. Por favor, tente iniciar o instalador novamente.",
"description": "Displayed when Windows installer cannot decompress application files"
},
"NSIS__uninstallFailed": {
"message": "Failed to uninstall old application files. Please try running the installer again.",
"message": "Falha ao desinstalar os arquivos do aplicativo antigo. Por favor, tente iniciar o instalador novamente.",
"description": "Displayed when Windows installer cannot uninstall the old application"
},
"CrashReportDialog__title": {
@ -7013,6 +7013,10 @@
"message": "Adicionar um story",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Stories ocultados",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Nenhum story em exibição no momento",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Story",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Mostrar Stories",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Ocultar story",
"description": "Label for menu item to hide the story"
@ -7095,28 +7103,12 @@
"message": "Essa versão contém pequenos retoques e consertos no Signal para ele continuar funcionando confortavelmente.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Estamos mantendo as mensagens curtas curtas, colocando coisas como registros de tempo na mesma linha que o texto. Agora você tem mais espaço na tela para enviar um rápido \"alô\" para descobrir como estão seus amigos.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Os pacotes de figurinhas que tanto faltava estão aqui! Agora o Desktop deve suportar os mesmos pacotes de figurinhas que seu telefone!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Agora você pode adicionar pessoas em grupos, por meio do número de telefone delas.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "A partir de agora, é mais fácil encontrar os seus contatos favoritos. A busca de contatos tem suporte para alfabetos não-latinos como o cirílico.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"message": "Correção de erros, incluindo correção da falha que às vezes tornava difícil clicar em menus. ",
"description": "Release notes for v5.40"
},
"WhatsNew__v5.40--2": {
"message": "Thanks to our open source contributors $dsanders11$ and $yusufsahinhamza$ for contributing to these improvements.",
"message": "Agradecimentos para nossos colaboradores de código aberto $dsanders11$ e $yusufsahinhamza$ por contribuir para essas melhorias.",
"description": "Release notes for v5.40",
"placeholders": {
"dsanders11": {

View File

@ -222,7 +222,7 @@
"description": "Shown at the top of the archived conversations list in the left pane"
},
"noArchivedConversations": {
"message": "No archived conversations.",
"message": "Sem conversas arquivadas",
"description": "Shown at the top of the archived conversations list in the left pane if there is no any archived conversation"
},
"archiveConversation": {
@ -6358,11 +6358,11 @@
"description": "Text for an option in Conversation Details Disappearing Messages setting when user previously selected custom time"
},
"DisappearingTimeDialog__label--value": {
"message": "Number",
"message": "Número",
"description": "aria-label for the number select box"
},
"DisappearingTimeDialog__label--units": {
"message": "Unit of time",
"message": "Unidade de tempo",
"description": "aria-label for the units of time select box"
},
"DisappearingTimeDialog__title": {
@ -6812,7 +6812,7 @@
"description": "Second line of the dialog displayed when Windows installer can't close application automatically and needs user intervention to complete the installation."
},
"NSIS__appRunning": {
"message": "$appName$ is running.\nClick OK to close it.\nIf it doesn't close, try closing it manually.",
"message": "$appName$ está a correr.\nClique em OK para o encerrar.\nSe não encerrar, tente encerrá-lo manualmente.",
"description": "The contents of a dialog displayed when Windows installer detect that the application is running and asks user to close it. Note: please keep the line breaks so that the text occupies three separate lines",
"placeholders": {
"appName": {
@ -6822,11 +6822,11 @@
}
},
"NSIS__decompressionFailed": {
"message": "Failed to decompress files. Please try running the installer again.",
"message": "Falha ao descomprimir ficheiros. Por favor, experimente correr o instalador de novo.",
"description": "Displayed when Windows installer cannot decompress application files"
},
"NSIS__uninstallFailed": {
"message": "Failed to uninstall old application files. Please try running the installer again.",
"message": "Falha ao desinstalar os ficheiros da aplicação antiga. Por favor, experimente correr novamente o instalador.",
"description": "Displayed when Windows installer cannot uninstall the old application"
},
"CrashReportDialog__title": {
@ -7013,6 +7013,10 @@
"message": "Adicionar uma história",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Histórias ocultas",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "De momento sem histórias recentes para exibir",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "História",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Exibir histórias",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Ocultar história",
"description": "Label for menu item to hide the story"
@ -7095,24 +7103,8 @@
"message": "Esta versão contém um número de pequenas funcionalidades e correções de erros de forma a manter o Signal a correr suavemente.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Estamos a manter as mensagens curtas, a colocar as coisas como carimbos da data/hora na mesma linha do texto. Agora você tem mais espaço na tela para aquele 'olá' rápido para verificar um amigo.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Os pacotes de autocolantes que faltavam apareceram! A área de trabalho agora deverá ser capaz de lidar com todos os pacotes de autocolantes que o seu telemóvel também pode!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Agora você pode adicionar pessoas a grupos, através do número de telefone delas.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "A partir de agora, é mais fácil encontrar os seus contactos favoritos. A procura de contactos tem suporte para alfabetos não-latinos como o cirílico.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"message": "Correção de erros incluindo uma correção para um problema que algumas vezes tornava difícil clicar em menus.",
"description": "Release notes for v5.40"
},
"WhatsNew__v5.40--2": {

View File

@ -7013,6 +7013,10 @@
"message": "Adaugă o poveste",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Povești ascunse",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Nu există povești recente",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Poveste",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Afișează povești",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Ascunde povestea",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Această versiune conține o serie de mici modificări și remedieri ale unor erori pentru ca Signal să funcționeze fără probleme.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Menținem mesajele scurte, punând elemente precum marcajele de timp pe aceeași linie cu textul. Acum ai mai mult spațiu pe ecran pentru acel \"salut\" rapid către un prieten.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Nu vor mai exista pachete de autocolante lipsă! Signal Desktop ar trebui să fie acum capabil să gestioneze toate pachetele de autocolante pe care le poate gestiona telefonul tău!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Acum poți adăuga persoane în grupuri folosind doar numărul lor de telefon.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Contactele tale preferate sunt acum la doar câteva apăsări de taste distanță. Căutarea de contacte acceptă acum alfabete non-latine, cum ar fi cel chirilic.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Remedieri de erori, printre care și o eroare ce făcea dificilă uneori folosirea meniurilor.",
"description": "Release notes for v5.40"

View File

@ -7013,6 +7013,10 @@
"message": "Добавьте историю",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Скрытые истории",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Нет недавних историй",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "История",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Показывать истории",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Скрыть историю",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Эта версия содержит несколько небольших изменений и исправлений ошибок.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Мы оставляем короткие сообщения короткими, помещая время и другие элементы на той же строке, что и текст. Теперь у вас на экране есть больше места для того, чтобы быстро узнать у друга, как дела.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Проблемы с недостатком наборов стикеров закончились! Теперь Signal Desktop поддерживает все наборы стикеров, которые поддерживает ваш телефон!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Теперь вы можете добавлять людей в группы, просто используя их номера телефонов.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Ваши любимые контакты теперь всего в нескольких нажатиях по клавишам от вас. Поиск по контактам теперь поддерживает не латинские алфавиты, например кириллический.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Исправления ошибок, включающие исправление проблемы, из-за которой было иногда сложно нажимать на меню.",
"description": "Release notes for v5.40"

View File

@ -7013,6 +7013,10 @@
"message": "Pridajte príbeh",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Skryté príbehy",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Momentálne nie sú k dispozícii žiadne najnovšie príbehy",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Príbeh",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Zobraziť príbehy",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Skryť príbeh",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Táto verzia obsahuje množstvo drobných vylepšení a opráv chýb, ktoré zaisťujú bezproblémový chod systému Signal.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Krátke správy sú krátke tým, že veci, ako sú časové pečiatky, umiestňujeme na rovnaký riadok ako text. Teraz máte na obrazovke viac miesta na rýchle „ahoj“ na kontrolu priateľa.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Chýbajúce balíčky nálepiek sú preč! Desktop by teraz mal zvládnuť všetky balíčky nálepiek, ktoré dokáže váš telefón!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Teraz môžete pridávať ľudí do skupín iba pomocou ich telefónneho čísla.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Vaše obľúbené kontakty sú teraz vzdialené len na niekoľko stlačení kláves. Vyhľadávanie kontaktov teraz podporuje aj inú ako latinskú abecedu, ako napríklad cyriliku.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Opravy chýb vrátane opravy problému, ktorý niekedy sťažoval klikanie na ponuky.",
"description": "Release notes for v5.40"

File diff suppressed because it is too large Load Diff

View File

@ -222,7 +222,7 @@
"description": "Shown at the top of the archived conversations list in the left pane"
},
"noArchivedConversations": {
"message": "No archived conversations.",
"message": "Ska biseda të arkivuara.",
"description": "Shown at the top of the archived conversations list in the left pane if there is no any archived conversation"
},
"archiveConversation": {
@ -6358,11 +6358,11 @@
"description": "Text for an option in Conversation Details Disappearing Messages setting when user previously selected custom time"
},
"DisappearingTimeDialog__label--value": {
"message": "Number",
"message": "Numër",
"description": "aria-label for the number select box"
},
"DisappearingTimeDialog__label--units": {
"message": "Unit of time",
"message": "Njësi kohe",
"description": "aria-label for the units of time select box"
},
"DisappearingTimeDialog__title": {
@ -6812,7 +6812,7 @@
"description": "Second line of the dialog displayed when Windows installer can't close application automatically and needs user intervention to complete the installation."
},
"NSIS__appRunning": {
"message": "$appName$ is running.\nClick OK to close it.\nIf it doesn't close, try closing it manually.",
"message": "$appName$ po xhiron.\nKlikoni mbi OK që të mbyllet.\nNëse smbyllet, provoni dorazi.",
"description": "The contents of a dialog displayed when Windows installer detect that the application is running and asks user to close it. Note: please keep the line breaks so that the text occupies three separate lines",
"placeholders": {
"appName": {
@ -6822,11 +6822,11 @@
}
},
"NSIS__decompressionFailed": {
"message": "Failed to decompress files. Please try running the installer again.",
"message": "Su arrit të çngjeshen kartela. Ju lutemi, provoni të xhironi sërish instaluesin.",
"description": "Displayed when Windows installer cannot decompress application files"
},
"NSIS__uninstallFailed": {
"message": "Failed to uninstall old application files. Please try running the installer again.",
"message": "Su arrit të çinstalohen kartela të vjetra aplikacioni. Ju lutemi, xhironi sërish instaluesin.",
"description": "Displayed when Windows installer cannot uninstall the old application"
},
"CrashReportDialog__title": {
@ -7013,6 +7013,10 @@
"message": "Shtoni një histori",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Histori të fshehura",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Tani për tani ska histori të freskëta për tu shfaqur",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Histori",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Shfaq histori",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Fshihe historinë",
"description": "Label for menu item to hide the story"
@ -7095,28 +7103,12 @@
"message": "Ky version përmban një numër përimtimesh të vockla dhe ndreqje të metash për ta mbajtur të rrjedhshme punën e Signal-it.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Po i mbajmë mesazhet të shkurtër, duke vënë gjëra të tilla si vulat kohore në të njëjtin rresht me tekstin. Tani keni më tepër hapësirë në ekran për atë “hej” të shpejtë për një shokun tuaj.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Ska më paketa ngjitësish që mungojnë! Desktopi duhet të jetë në gjendje tanimë të trajtojë krejt paketat e ngjitësve që trajton telefoni juaj!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Tani mund të shtoni persona te grupe duke përdorur thjesht numrin e tyre të telefonit.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Kontaktet tuaja të parapëlqyera tani janë vetëm disa taste larg. Kërkimi i kontakteve tani mbulon alfabete jolatine, bie fjala, cirilik.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"message": "Ndreqje të metash, përfshi një ndreqje për një problem që ndonjëherë e bënte të vështirë të klikohej te menutë ",
"description": "Release notes for v5.40"
},
"WhatsNew__v5.40--2": {
"message": "Thanks to our open source contributors $dsanders11$ and $yusufsahinhamza$ for contributing to these improvements.",
"message": "Falënderime për kontribuesit tanë në burimin e hapët$dsanders11$ dhe $yusufsahinhamza$, për sjelljen e këtyre përmirësimeve.",
"description": "Release notes for v5.40",
"placeholders": {
"dsanders11": {

View File

@ -221,6 +221,10 @@
"message": "Ове преписке су архивиране и у сандучету ће се појавити само по приспећу нових порука.",
"description": "Shown at the top of the archived conversations list in the left pane"
},
"noArchivedConversations": {
"message": "Нема архивиране преписке.",
"description": "Shown at the top of the archived conversations list in the left pane if there is no any archived conversation"
},
"archiveConversation": {
"message": "Архивирај",
"description": "Shown in menu for conversation, and moves conversation out of main conversation list"
@ -832,11 +836,11 @@
"description": "Shown to separate the types of search results"
},
"findByUsernameHeader": {
"message": "Find by username",
"message": "Пронађите корисничким именом",
"description": "Shown when search could be a valid username, with one sub-item that will kick off the search"
},
"findByPhoneNumberHeader": {
"message": "Find by phone number",
"message": "Пронађите по броју телефона",
"description": "Shown when search could be a valid phone number, with one sub-item that will kick off the search"
},
"at-username": {
@ -970,7 +974,7 @@
"description": "Confirmation dialog message for when the voice recording is interrupted due to app losing focus"
},
"voiceNoteLimit": {
"message": "Voice messages are limited to one hour. Recording will stop if you switch to another app.",
"message": "Говорне поруке су ограничене на 60 минута. Снимање ће се зауставити ако пређете на другу апликацију.",
"description": "Shown in toast to warn user about limited time and that window must be in focus"
},
"voiceNoteMustBeOnlyAttachment": {
@ -1070,7 +1074,7 @@
}
},
"cannotUpdateRequireManualDetail": {
"message": "Signal couldn't update. Visit $url$ to install it manually. Then, $support$ about this problem",
"message": "Signal није успео да се ажурира. Идите на $url$ да би ручно инсталирали. Онда, $support$ о проблему",
"description": "Shown if a general error happened while trying to install update package and manual update is required",
"placeholders": {
"url": {
@ -2402,7 +2406,7 @@
"description": "Shown if request to Signal servers to find username fails"
},
"Toast--failed-to-fetch-phone-number": {
"message": "Failed to fetch phone number. Check your connection and try again.",
"message": "Није могуће налазити број телефона. Проверите да ли сте повезани на интернет и покушајте поново.",
"description": "Shown if request to Signal servers to find phone number fails"
},
"startConversation--username-not-found": {
@ -2416,7 +2420,7 @@
}
},
"startConversation--phone-number-not-found": {
"message": "User not found. \"$phoneNumber$\" is not a Signal user.",
"message": "Корисник није нађен. \"$phoneNumber$\" није корисник Signal-а.",
"description": "Shown in dialog if phone number is not found.",
"placeholders": {
"phoneNumber": {
@ -2426,7 +2430,7 @@
}
},
"startConversation--phone-number-not-valid": {
"message": "User not found. \"$phoneNumber$\" is not a valid phone number.",
"message": "Корисник није нађен. \"$phoneNumber$\" није валидан број телефона.",
"description": "Shown in dialog if phone number is not valid.",
"placeholders": {
"phoneNumber": {
@ -6353,6 +6357,14 @@
"message": "Прилагодити време",
"description": "Text for an option in Conversation Details Disappearing Messages setting when user previously selected custom time"
},
"DisappearingTimeDialog__label--value": {
"message": "Број",
"description": "aria-label for the number select box"
},
"DisappearingTimeDialog__label--units": {
"message": "Јединица времена",
"description": "aria-label for the units of time select box"
},
"DisappearingTimeDialog__title": {
"message": "Прилагодити време",
"description": "Title for the custom disappearing message timeout dialog"
@ -6799,6 +6811,24 @@
"message": "Затворите га ручно и кликните на Покушај да наставите.",
"description": "Second line of the dialog displayed when Windows installer can't close application automatically and needs user intervention to complete the installation."
},
"NSIS__appRunning": {
"message": "$appName$ је у току.\nКликнути OK да би се затворило.\nАко се не затвори, покушајте да га ручно затворите.",
"description": "The contents of a dialog displayed when Windows installer detect that the application is running and asks user to close it. Note: please keep the line breaks so that the text occupies three separate lines",
"placeholders": {
"appName": {
"content": "$1",
"example": "Signal"
}
}
},
"NSIS__decompressionFailed": {
"message": "Декомпримовање датотека није успело. Покушајте поново да покренете инсталатер.",
"description": "Displayed when Windows installer cannot decompress application files"
},
"NSIS__uninstallFailed": {
"message": "Деинсталирање старих датотека апликације није успело. Покушајте поново да покренете инсталатер.",
"description": "Displayed when Windows installer cannot uninstall the old application"
},
"CrashReportDialog__title": {
"message": "Апликација се зауставила",
"description": "A title of the dialog displayed when starting an application after a recent crash"
@ -6983,6 +7013,10 @@
"message": "Додај причу",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Сакривене приче",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Тренутно нема недавних прича за приказ",
"description": "Description for when there are no stories to show"
@ -7033,6 +7067,10 @@
"message": "Прича",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Прикажи приче",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Сакриј причу",
"description": "Label for menu item to hide the story"
@ -7065,28 +7103,22 @@
"message": "This version contains a number of small tweaks and bug fixes to keep Signal running smoothly.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.36--1": {
"message": "Quickly scanning that group chat? There's more room for more messages on the screen at once. We now group sender's messages together if they're close together in time.",
"description": "Release notes for v5.36"
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"description": "Release notes for v5.40"
},
"WhatsNew__v5.36--2": {
"message": "When you perform a Delete for Everyone you'll now see a progress spinner letting you know whether it's been successfully sent or not. If it fails for some reason, you'll be able to retry too!",
"description": "Release notes for v5.36"
},
"WhatsNew__v5.37--1": {
"message": "We're keeping short messages short, by putting stuff like timestamps on the same line as the text. Now you've got more space on the screen for that quick 'hey' to check in on a friend.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Missing sticker packs begone! Desktop should now be able to handle all sticker packs that your phone can!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "You can now add people to groups using just their phone number.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Your favorite contacts are now just a few keystrokes away. Contact search now supports non-Latin alphabets like Cyrillic.",
"description": "Release notes for v5.39"
"WhatsNew__v5.40--2": {
"message": "Thanks to our open source contributors $dsanders11$ and $yusufsahinhamza$ for contributing to these improvements.",
"description": "Release notes for v5.40",
"placeholders": {
"dsanders11": {
"content": "$1",
"example": "dsanders11"
},
"yusufsahinhamza": {
"content": "$2",
"example": "yusufsahinhamza"
}
}
}
}

View File

@ -222,7 +222,7 @@
"description": "Shown at the top of the archived conversations list in the left pane"
},
"noArchivedConversations": {
"message": "No archived conversations.",
"message": "Inga arkiverade konversationer.",
"description": "Shown at the top of the archived conversations list in the left pane if there is no any archived conversation"
},
"archiveConversation": {
@ -464,7 +464,7 @@
"description": "Shown in conversation banner when more than one group member's safety number has changed, but they were previously verified."
},
"debugLogExplanation": {
"message": "When you click Submit, your log will be posted online for 30 days at a unique, unpublished URL. You may Save it locally first.",
"message": "När du klickar på Skicka kommer din logg att läggas upp på nätet i 30 dagar på en unik, opublicerad webbadress. Du kan spara den lokalt först.",
"description": "Description of what will happen with your debug log"
},
"debugLogError": {
@ -476,11 +476,11 @@
"description": "Title of the success page for submitting a debug log"
},
"debugLogSuccessNextSteps": {
"message": "Debug log uploaded. When you contact support, copy the URL below and attach it along with a description of the problem you saw and steps to reproduce it.",
"message": "Felsökningslogg uppladdad. När du kontaktar support kopierar du webbadressen nedan och bifogar den tillsammans med en beskrivning av problemet du såg och steg för att återskapa det.",
"description": "Explanation of next steps to take when submitting debug log"
},
"debugLogLogIsIncomplete": {
"message": "... to see the full log, click Save",
"message": "... för att se hela loggen, klicka på Spara",
"description": "Shown as the text for the copy button on the debug log screen"
},
"debugLogCopy": {
@ -744,7 +744,7 @@
"description": "Item under the Help menu, takes you to an article describing how to install the beta release of Signal Desktop"
},
"signalDesktopPreferences": {
"message": "Signal Desktop-inställningar",
"message": "Inställningar för Signal Desktop",
"description": "Title of the window that pops up with Signal Desktop preferences in it"
},
"signalDesktopStickerCreator": {
@ -836,11 +836,11 @@
"description": "Shown to separate the types of search results"
},
"findByUsernameHeader": {
"message": "Find by username",
"message": "Hitta via användarnamn",
"description": "Shown when search could be a valid username, with one sub-item that will kick off the search"
},
"findByPhoneNumberHeader": {
"message": "Find by phone number",
"message": "Hitta via telefonnummer",
"description": "Shown when search could be a valid phone number, with one sub-item that will kick off the search"
},
"at-username": {
@ -974,7 +974,7 @@
"description": "Confirmation dialog message for when the voice recording is interrupted due to app losing focus"
},
"voiceNoteLimit": {
"message": "Voice messages are limited to one hour. Recording will stop if you switch to another app.",
"message": "Röstmeddelanden är begränsade till en timme. Inspelningen avbryts om du byter till en annan app.",
"description": "Shown in toast to warn user about limited time and that window must be in focus"
},
"voiceNoteMustBeOnlyAttachment": {
@ -1074,7 +1074,7 @@
}
},
"cannotUpdateRequireManualDetail": {
"message": "Signal couldn't update. Visit $url$ to install it manually. Then, $support$ about this problem",
"message": "Signal kunde inte uppdateras. Besök $url$ för att installera det manuellt. Sedan, $support$ om det här problemet",
"description": "Shown if a general error happened while trying to install update package and manual update is required",
"placeholders": {
"url": {
@ -2406,7 +2406,7 @@
"description": "Shown if request to Signal servers to find username fails"
},
"Toast--failed-to-fetch-phone-number": {
"message": "Failed to fetch phone number. Check your connection and try again.",
"message": "Det gick inte att hämta telefonnummer. Kontrollera din anslutning och försök igen.",
"description": "Shown if request to Signal servers to find phone number fails"
},
"startConversation--username-not-found": {
@ -2420,7 +2420,7 @@
}
},
"startConversation--phone-number-not-found": {
"message": "User not found. \"$phoneNumber$\" is not a Signal user.",
"message": "Användaren hittades inte. \"$phoneNumber$\" är inte en Signal-användare.",
"description": "Shown in dialog if phone number is not found.",
"placeholders": {
"phoneNumber": {
@ -2430,7 +2430,7 @@
}
},
"startConversation--phone-number-not-valid": {
"message": "User not found. \"$phoneNumber$\" is not a valid phone number.",
"message": "Användaren hittades inte. \"$phoneNumber$\" är inte ett giltigt telefonnummer.",
"description": "Shown in dialog if phone number is not valid.",
"placeholders": {
"phoneNumber": {
@ -3960,7 +3960,7 @@
}
},
"calling__in-another-call-tooltip": {
"message": "Du har redan ett samtal",
"message": "Du är redan i ett samtal",
"description": "Tooltip in disabled notification button when you're on another call"
},
"calling__call-notification__button__call-full-tooltip": {
@ -4178,7 +4178,7 @@
"description": "The button to cancel request to join the group"
},
"GroupV2--join--cancel-request-to-join--confirmation": {
"message": "Avbryt din förfrågan om att gå med i denna grupp?",
"message": "Avbryt din förfrågan om att gå med i den här gruppen?",
"description": "A confirmation message that shows after you click the button"
},
"GroupV2--join--cancel-request-to-join--yes": {
@ -5196,7 +5196,7 @@
}
},
"GroupV2--admin-approval-bounce--one": {
"message": "$joinerName$ requested and cancelled their request to join via the group link",
"message": "$joinerName$ begärde och avbröt sin förfrågan om att gå med via grupplänken",
"description": "Shown in timeline or conversation preview when v2 group changes",
"placeholders": {
"joinerName": {
@ -5206,7 +5206,7 @@
}
},
"GroupV2--admin-approval-bounce": {
"message": "$joinerName$ requested and cancelled $numberOfRequests$ requests to join via the group link",
"message": "$joinerName$ begärt och avbröt $numberOfRequests$ förfrågningar om att gå med via grupplänken",
"description": "Shown in timeline or conversation preview when v2 group changes",
"placeholders": {
"joinerName": {
@ -5598,7 +5598,7 @@
"description": "This is the label for the disappearing messages setting panel"
},
"ConversationDetails--disappearing-messages-info--group": {
"message": "När det är aktiverat, kommer meddelanden som skickats och tagits emot i den här gruppen att försvinna när de har setts.",
"message": "När det är aktiverat försvinner meddelanden som skickas och tas emot i den här gruppen efter att de har setts.",
"description": "This is the info about the disappearing messages setting, in groups"
},
"ConversationDetails--disappearing-messages-info--direct": {
@ -5776,7 +5776,7 @@
}
},
"PendingRequests--approve-for": {
"message": "Godkänn begäran från \"$name$\"?",
"message": "Godkänn förfrågan från \"$name$\"?",
"description": "This is the modal content when confirming approving a group request to join",
"placeholders": {
"name": {
@ -5796,7 +5796,7 @@
}
},
"PendingRequests--deny-for--with-link": {
"message": "Deny request from \"$name$\"? They will not be able to request to join via the group link again.",
"message": "Avfärda förfrågan från \"$name$\"? De kommer inte att kunna begära att gå med via grupplänken igen.",
"description": "This is the modal content when confirming denying a group request to join",
"placeholders": {
"name": {
@ -5874,7 +5874,7 @@
"description": "This is the modal button to confirm revoking invites"
},
"PendingRequests--approve": {
"message": "Godkänn begäran",
"message": "Godkänn förfrågan",
"description": "This is the modal button to approve group request to join"
},
"PendingRequests--deny": {
@ -5904,7 +5904,7 @@
"description": "Title of dialog to block a user from requesting to join via the link again"
},
"PendingRequests--block--contents": {
"message": "$name$ will not be able to join or request to join this group via the group link. They can still be added to the group manually.",
"message": "$name$ kommer inte att kunna gå med i eller begära att gå med i den här gruppen via grupplänken. De kan fortfarande läggas till i gruppen manuellt.",
"description": "Details of dialog to block a user from requesting to join via the link again",
"placeholders": {
"name": {
@ -5914,7 +5914,7 @@
}
},
"PendingRequests--block--confirm": {
"message": "Block Request",
"message": "Blockera förfrågan",
"description": "Confirmation button of dialog to block a user from requesting to join via the link again"
},
"AvatarInput--no-photo-label--group": {
@ -6210,7 +6210,7 @@
}
},
"RemoveGroupMemberConfirmation__description__with-link": {
"message": "Remove \"$name$\" from the group? They will not be able to rejoin via the group link.",
"message": "Ta bort \"$name$\" från gruppen? De kommer inte att kunna gå med igen via grupplänken.",
"description": "When confirming the removal of a group member, show this text in the dialog",
"placeholders": {
"name": {
@ -6358,11 +6358,11 @@
"description": "Text for an option in Conversation Details Disappearing Messages setting when user previously selected custom time"
},
"DisappearingTimeDialog__label--value": {
"message": "Number",
"message": "Nummer",
"description": "aria-label for the number select box"
},
"DisappearingTimeDialog__label--units": {
"message": "Unit of time",
"message": "Tidsenhet",
"description": "aria-label for the units of time select box"
},
"DisappearingTimeDialog__title": {
@ -6492,7 +6492,7 @@
"description": "Placeholder for the username field"
},
"ProfileEditor--username--helper": {
"message": "Användarnamn på Signal är valfritt. Om du väljer att skapa ett användarnamn kommer andra Signal-användare att kunna hitta dig genom detta användarnamn och kontakta dig utan att veta ditt telefonnummer.",
"message": "Användarnamn på Signal är valfritt. Om du väljer att skapa ett användarnamn kommer andra Signal-användare att kunna hitta dig via detta användarnamn och kontakta dig utan att veta ditt telefonnummer.",
"description": "Shown on the edit username screen"
},
"ProfileEditor--username--check-characters": {
@ -6766,7 +6766,7 @@
"description": "Label for the see my phone number setting"
},
"Preferences--find-me": {
"message": "Hitta mig efter mitt telefonnummer",
"message": "Hitta mig via mitt telefonnummer",
"description": "Label for the find me by my phone number setting"
},
"Preferences--read-receipts": {
@ -6812,7 +6812,7 @@
"description": "Second line of the dialog displayed when Windows installer can't close application automatically and needs user intervention to complete the installation."
},
"NSIS__appRunning": {
"message": "$appName$ is running.\nClick OK to close it.\nIf it doesn't close, try closing it manually.",
"message": "$appName$ är igång.\nKlicka på OK för att stänga det.\nOm det inte stängs, försök att stänga det manuellt.",
"description": "The contents of a dialog displayed when Windows installer detect that the application is running and asks user to close it. Note: please keep the line breaks so that the text occupies three separate lines",
"placeholders": {
"appName": {
@ -6822,11 +6822,11 @@
}
},
"NSIS__decompressionFailed": {
"message": "Failed to decompress files. Please try running the installer again.",
"message": "Det gick inte att dekomprimera filer. Försök att köra installationsprogrammet igen.",
"description": "Displayed when Windows installer cannot decompress application files"
},
"NSIS__uninstallFailed": {
"message": "Failed to uninstall old application files. Please try running the installer again.",
"message": "Det gick inte att avinstallera gamla programfiler. Försök att köra installationsprogrammet igen.",
"description": "Displayed when Windows installer cannot uninstall the old application"
},
"CrashReportDialog__title": {
@ -6886,7 +6886,7 @@
"description": "Describes what attribute the color picker will change on the text"
},
"MediaEditor__text--highlight": {
"message": "Highlight",
"message": "Markera",
"description": "Describes what attribute the color picker will change on the text"
},
"MediaEditor__text--outline": {
@ -6902,7 +6902,7 @@
"description": "Type of brush to free draw"
},
"MediaEditor__draw--highlighter": {
"message": "Highlighter",
"message": "Markerare",
"description": "Type of brush to free draw"
},
"MediaEditor__draw--thin": {
@ -7013,6 +7013,10 @@
"message": "Lägg till en berättelse",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Dolda berättelser",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Inga nyliga berättelser att visa just nu",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Berättelse",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Visa berättelser",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Dölj berättelse",
"description": "Label for menu item to hide the story"
@ -7095,28 +7103,12 @@
"message": "Den här versionen innehåller ett antal små justeringar och felrättningar för att Signal ska fungera smidigt.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "We're keeping short messages short, by putting stuff like timestamps on the same line as the text. Now you've got more space on the screen for that quick 'hey' to check in on a friend.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Missing sticker packs begone! Desktop should now be able to handle all sticker packs that your phone can!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "You can now add people to groups using just their phone number.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Your favorite contacts are now just a few keystrokes away. Contact search now supports non-Latin alphabets like Cyrillic.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"message": "Felrättningar inklusive en korrigering av ett problem som ibland skulle göra det svårt att klicka på menyer.",
"description": "Release notes for v5.40"
},
"WhatsNew__v5.40--2": {
"message": "Thanks to our open source contributors $dsanders11$ and $yusufsahinhamza$ for contributing to these improvements.",
"message": "Tack till våra bidragsgivare $dsanders11$ och $yusufsahinhamza$ för att de har bidragit till dessa förbättringar med öppen källkod.",
"description": "Release notes for v5.40",
"placeholders": {
"dsanders11": {

View File

@ -5896,11 +5896,11 @@
"description": "Information shown below the invite list"
},
"PendingRequests--block--button": {
"message": "Block request",
"message": "İsteği engelle",
"description": "Shown in timeline if users cancel their request to join a group via a group link"
},
"PendingRequests--block--title": {
"message": "Block request?",
"message": "İstek engellensin mi?",
"description": "Title of dialog to block a user from requesting to join via the link again"
},
"PendingRequests--block--contents": {
@ -7013,6 +7013,10 @@
"message": "Bir hikaye ekle",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Gizlenmiş hikayeler",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "No recent stories to show right now",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Story",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Show stories",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Hikayeyi gizle",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Bu sürüm Signal'in sorunsuz çalışması için gereken bir takım küçük düzeltme ve hata gidermelerini içerir.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "We're keeping short messages short, by putting stuff like timestamps on the same line as the text. Now you've got more space on the screen for that quick 'hey' to check in on a friend.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Missing sticker packs begone! Desktop should now be able to handle all sticker packs that your phone can!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "You can now add people to groups using just their phone number.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Your favorite contacts are now just a few keystrokes away. Contact search now supports non-Latin alphabets like Cyrillic.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Bug fixes including a fix to an issue that would sometimes make it difficult to click on menus. ",
"description": "Release notes for v5.40"

View File

@ -7013,6 +7013,10 @@
"message": "Додати історію",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "Приховані історії",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "Нових історій немає",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "Історія",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "Show stories",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "Сховати історію",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "Ця версія містить ряд невеликих налаштувань і виправлень помилок для забезпечення безперебійної роботи Signal.",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "Ми зберігаємо короткі повідомлення короткими, розміщуючи такі речі, як позначки часу, в одному рядку з текстом. Тепер у вас є більше місця на екрані для швидкого «привіт», щоб дізнатись, як себе має ваш друг.",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "Зниклі стікер-паки знайшлись! Відтепер комп'ютерна версія застосунку підтримує усі стікер-паки, що й телефон!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "Відтепер можна додавати користувачів до груп за їхнім номером телефону.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "Ваші улюблені контакти усього у декількох натисканнях на клавіатуру від вас. Пошук контактів відтепер підтримує не лише латинські літери, як-от кирилицю.",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "Виправлення помилок, зокрема помилки, яка інколи призводила до важкостей з клацанням на меню.",
"description": "Release notes for v5.40"

View File

@ -7013,6 +7013,10 @@
"message": "新增一個報導",
"description": "Description hint to add a story"
},
"Stories__hidden-stories": {
"message": "已隱藏的限時動態",
"description": "Button label to go to hidden stories pane"
},
"Stories__list-empty": {
"message": "目前沒有可顯示的近期報導",
"description": "Description for when there are no stories to show"
@ -7063,6 +7067,10 @@
"message": "報導",
"description": "aria-label for the story list button"
},
"StoryListItem__unhide": {
"message": "顯示限時動態",
"description": "Label for menu item to un-hide the story"
},
"StoryListItem__hide": {
"message": "隱藏報導",
"description": "Label for menu item to hide the story"
@ -7095,22 +7103,6 @@
"message": "此版本包含許多小調整和錯誤修復,以維持 Signal 穩定運作。",
"description": "Release notes for releases that only include bug fixes"
},
"WhatsNew__v5.37--1": {
"message": "我們透過將時間戳之類的內容與文本放在同一行來保持簡短的訊息。 現在,你在螢幕上有更多空間可以快速說“嘿”與確認朋友。",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.37--2": {
"message": "想念遺失的貼圖包! 電腦版本現在能夠處理你的手機可以處理的所有貼圖包!",
"description": "Release notes for v5.37"
},
"WhatsNew__v5.39--1": {
"message": "你現在可以使用電話號碼將成員新增到群組。",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.39--2": {
"message": "你最喜歡的聯絡人現在只需幾個按鍵即可。 搜索聯絡人現在支援非拉丁字母,例如塞里爾字母。",
"description": "Release notes for v5.39"
},
"WhatsNew__v5.40--1": {
"message": "錯誤修復,包括修復有時難以點擊選單的問題。",
"description": "Release notes for v5.40"

View File

@ -4,7 +4,7 @@
"description": "Private messaging from your desktop",
"desktopName": "signal.desktop",
"repository": "https://github.com/signalapp/Signal-Desktop.git",
"version": "5.41.0-beta.1",
"version": "5.41.0",
"license": "AGPL-3.0-only",
"author": {
"name": "Signal Messenger, LLC",

View File

@ -779,7 +779,7 @@
width: calc(100% + 24px);
outline: none;
margin-top: -10px;
margin-top: -8px;
margin-bottom: 5px;
overflow: hidden;
@ -2589,30 +2589,10 @@ button.ConversationDetails__action-button {
left: 6px;
}
.module-image--soft-corners {
border-radius: 4px;
}
.module-image--cropped {
overflow: hidden;
}
.module-image--curved-top-left {
border-top-left-radius: 18px;
}
.module-image--curved-top-right {
border-top-right-radius: 18px;
}
.module-image--curved-bottom-left {
border-bottom-left-radius: 18px;
}
.module-image--curved-bottom-right {
border-bottom-right-radius: 18px;
}
.module-image--small-curved-top-left {
border-top-left-radius: 10px;
}
.module-image__border-overlay {
@include button-reset;

View File

@ -14,7 +14,7 @@
import { assert } from './util/assert';
import { isOlderThan } from './util/timestamp';
import { parseRetryAfter } from './util/parseRetryAfter';
import { parseRetryAfterWithDefault } from './util/parseRetryAfter';
import { clearTimeoutIfNecessary } from './util/clearTimeoutIfNecessary';
import { getEnvironment, Environment } from './environment';
import type { StorageInterface } from './types/Storage.d';
@ -70,7 +70,7 @@ export const STORAGE_KEY = 'challenge:conversations';
export type RegisteredChallengeType = Readonly<{
conversationId: string;
createdAt: number;
retryAt: number;
retryAt?: number;
token?: string;
}>;
@ -80,7 +80,12 @@ const CAPTCHA_STAGING_URL =
'https://signalcaptchas.org/staging/challenge/generate.html';
function shouldStartQueue(registered: RegisteredChallengeType): boolean {
if (!registered.retryAt || registered.retryAt <= Date.now()) {
// No retryAt provided; waiting for user to complete captcha
if (!registered.retryAt) {
return false;
}
if (registered.retryAt <= Date.now()) {
return true;
}
@ -214,21 +219,26 @@ export class ChallengeHandler {
return;
}
const waitTime = Math.max(0, challenge.retryAt - Date.now());
const oldTimer = this.startTimers.get(conversationId);
if (oldTimer) {
clearTimeoutIfNecessary(oldTimer);
if (challenge.retryAt) {
const waitTime = Math.max(0, challenge.retryAt - Date.now());
const oldTimer = this.startTimers.get(conversationId);
if (oldTimer) {
clearTimeoutIfNecessary(oldTimer);
}
this.startTimers.set(
conversationId,
setTimeout(() => {
this.startTimers.delete(conversationId);
this.startQueue(conversationId);
}, waitTime)
);
log.info(
`challenge: tracking ${conversationId} with waitTime=${waitTime}`
);
} else {
log.info(`challenge: tracking ${conversationId} with no waitTime`);
}
this.startTimers.set(
conversationId,
setTimeout(() => {
this.startTimers.delete(conversationId);
this.startQueue(conversationId);
}, waitTime)
);
log.info(`challenge: tracking ${conversationId} with waitTime=${waitTime}`);
if (data && !data.options?.includes('recaptcha')) {
log.error(
@ -379,7 +389,9 @@ export class ChallengeHandler {
throw error;
}
const retryAfter = parseRetryAfter(error.responseHeaders['retry-after']);
const retryAfter = parseRetryAfterWithDefault(
error.responseHeaders['retry-after']
);
log.info(`challenge: retry after ${retryAfter}ms`);
this.options.onChallengeFailed(retryAfter);

View File

@ -14,7 +14,7 @@ import classNames from 'classnames';
import * as grapheme from '../util/grapheme';
import type { LocalizerType } from '../types/Util';
import { getClassNamesFor } from '../util/getClassNamesFor';
import { refMerger } from '../util/refMerger';
import { useRefMerger } from '../hooks/useRefMerger';
import { byteLength } from '../Bytes';
export type PropsType = {
@ -84,6 +84,7 @@ export const Input = forwardRef<
const valueOnKeydownRef = useRef<string>(value);
const selectionStartOnKeydownRef = useRef<number>(value.length);
const [isLarge, setIsLarge] = useState(false);
const refMerger = useRefMerger();
const maybeSetLarge = useCallback(() => {
if (!expandable) {

View File

@ -3,7 +3,7 @@
import React from 'react';
import { Image } from './Image';
import { CurveType, Image } from './Image';
import { StagedGenericAttachment } from './StagedGenericAttachment';
import { StagedPlaceholderAttachment } from './StagedPlaceholderAttachment';
import type { LocalizerType } from '../../types/Util';
@ -109,7 +109,10 @@ export const AttachmentList = <T extends AttachmentType | AttachmentDraftType>({
i18n={i18n}
attachment={attachment}
isDownloaded={isDownloaded}
softCorners
curveBottomLeft={CurveType.Tiny}
curveBottomRight={CurveType.Tiny}
curveTopLeft={CurveType.Tiny}
curveTopRight={CurveType.Tiny}
playIconOverlay={isVideo}
height={IMAGE_HEIGHT}
width={IMAGE_WIDTH}

View File

@ -9,7 +9,7 @@ import { storiesOf } from '@storybook/react';
import { pngUrl } from '../../storybook/Fixtures';
import type { Props } from './Image';
import { Image } from './Image';
import { CurveType, Image } from './Image';
import { IMAGE_PNG } from '../../types/MIME';
import type { ThemeType } from '../../types/Util';
import { setupI18n } from '../../util/setupI18n';
@ -34,16 +34,22 @@ const createProps = (overrideProps: Partial<Props> = {}): Props => ({
blurHash: text('blurHash', overrideProps.blurHash || ''),
bottomOverlay: boolean('bottomOverlay', overrideProps.bottomOverlay || false),
closeButton: boolean('closeButton', overrideProps.closeButton || false),
curveBottomLeft: boolean(
curveBottomLeft: number(
'curveBottomLeft',
overrideProps.curveBottomLeft || false
overrideProps.curveBottomLeft || CurveType.None
),
curveBottomRight: boolean(
curveBottomRight: number(
'curveBottomRight',
overrideProps.curveBottomRight || false
overrideProps.curveBottomRight || CurveType.None
),
curveTopLeft: number(
'curveTopLeft',
overrideProps.curveTopLeft || CurveType.None
),
curveTopRight: number(
'curveTopRight',
overrideProps.curveTopRight || CurveType.None
),
curveTopLeft: boolean('curveTopLeft', overrideProps.curveTopLeft || false),
curveTopRight: boolean('curveTopRight', overrideProps.curveTopRight || false),
darkOverlay: boolean('darkOverlay', overrideProps.darkOverlay || false),
height: number('height', overrideProps.height || 100),
i18n,
@ -57,11 +63,6 @@ const createProps = (overrideProps: Partial<Props> = {}): Props => ({
'playIconOverlay',
overrideProps.playIconOverlay || false
),
smallCurveTopLeft: boolean(
'smallCurveTopLeft',
overrideProps.smallCurveTopLeft || false
),
softCorners: boolean('softCorners', overrideProps.softCorners || false),
tabIndex: number('tabIndex', overrideProps.tabIndex || 0),
theme: text('theme', overrideProps.theme || 'light') as ThemeType,
url: text('url', 'url' in overrideProps ? overrideProps.url || null : pngUrl),
@ -145,10 +146,10 @@ story.add('Pending w/blurhash', () => {
story.add('Curved Corners', () => {
const props = createProps({
curveBottomLeft: true,
curveBottomRight: true,
curveTopLeft: true,
curveTopRight: true,
curveBottomLeft: CurveType.Normal,
curveBottomRight: CurveType.Normal,
curveTopLeft: CurveType.Normal,
curveTopRight: CurveType.Normal,
});
return <Image {...props} />;
@ -156,7 +157,7 @@ story.add('Curved Corners', () => {
story.add('Small Curve Top Left', () => {
const props = createProps({
smallCurveTopLeft: true,
curveTopLeft: CurveType.Small,
});
return <Image {...props} />;
@ -164,7 +165,10 @@ story.add('Small Curve Top Left', () => {
story.add('Soft Corners', () => {
const props = createProps({
softCorners: true,
curveBottomLeft: CurveType.Tiny,
curveBottomRight: CurveType.Tiny,
curveTopLeft: CurveType.Tiny,
curveTopRight: CurveType.Tiny,
});
return <Image {...props} />;

View File

@ -13,6 +13,13 @@ import {
defaultBlurHash,
} from '../../types/Attachment';
export enum CurveType {
None = 0,
Tiny = 4,
Small = 10,
Normal = 18,
}
export type Props = {
alt: string;
attachment: AttachmentType;
@ -32,16 +39,13 @@ export type Props = {
noBackground?: boolean;
bottomOverlay?: boolean;
closeButton?: boolean;
curveBottomLeft?: boolean;
curveBottomRight?: boolean;
curveTopLeft?: boolean;
curveTopRight?: boolean;
smallCurveTopLeft?: boolean;
curveBottomLeft?: CurveType;
curveBottomRight?: CurveType;
curveTopLeft?: CurveType;
curveTopRight?: CurveType;
darkOverlay?: boolean;
playIconOverlay?: boolean;
softCorners?: boolean;
blurHash?: string;
i18n: LocalizerType;
@ -158,8 +162,6 @@ export class Image extends React.Component<Props> {
onError,
overlayText,
playIconOverlay,
smallCurveTopLeft,
softCorners,
tabIndex,
theme,
url,
@ -176,25 +178,25 @@ export class Image extends React.Component<Props> {
const resolvedBlurHash = blurHash || defaultBlurHash(theme);
const overlayClassName = classNames('module-image__border-overlay', {
'module-image__border-overlay--with-border': !noBorder,
'module-image__border-overlay--with-click-handler': canClick,
'module-image--curved-top-left': curveTopLeft,
'module-image--curved-top-right': curveTopRight,
'module-image--curved-bottom-left': curveBottomLeft,
'module-image--curved-bottom-right': curveBottomRight,
'module-image--small-curved-top-left': smallCurveTopLeft,
'module-image--soft-corners': softCorners,
'module-image__border-overlay--dark': darkOverlay,
'module-image--not-downloaded': imgNotDownloaded,
});
const curveStyles = {
borderTopLeftRadius: curveTopLeft || CurveType.None,
borderTopRightRadius: curveTopRight || CurveType.None,
borderBottomLeftRadius: curveBottomLeft || CurveType.None,
borderBottomRightRadius: curveBottomRight || CurveType.None,
};
const overlay = canClick ? (
// Not sure what this button does.
// eslint-disable-next-line jsx-a11y/control-has-associated-label
<button
type="button"
className={overlayClassName}
className={classNames('module-image__border-overlay', {
'module-image__border-overlay--with-border': !noBorder,
'module-image__border-overlay--with-click-handler': canClick,
'module-image__border-overlay--dark': darkOverlay,
'module-image--not-downloaded': imgNotDownloaded,
})}
style={curveStyles}
onClick={this.handleClick}
onKeyDown={this.handleKeyDown}
tabIndex={tabIndex}
@ -210,15 +212,13 @@ export class Image extends React.Component<Props> {
'module-image',
className,
!noBackground ? 'module-image--with-background' : null,
curveBottomLeft ? 'module-image--curved-bottom-left' : null,
curveBottomRight ? 'module-image--curved-bottom-right' : null,
curveTopLeft ? 'module-image--curved-top-left' : null,
curveTopRight ? 'module-image--curved-top-right' : null,
smallCurveTopLeft ? 'module-image--small-curved-top-left' : null,
softCorners ? 'module-image--soft-corners' : null,
cropWidth || cropHeight ? 'module-image--cropped' : null
)}
style={{ width: width - cropWidth, height: height - cropHeight }}
style={{
width: width - cropWidth,
height: height - cropHeight,
...curveStyles,
}}
>
{pending ? (
this.renderPending()
@ -248,11 +248,11 @@ export class Image extends React.Component<Props> {
) : null}
{bottomOverlay ? (
<div
className={classNames(
'module-image__bottom-overlay',
curveBottomLeft ? 'module-image--curved-bottom-left' : null,
curveBottomRight ? 'module-image--curved-bottom-right' : null
)}
className="module-image__bottom-overlay"
style={{
borderBottomLeftRadius: curveBottomLeft || CurveType.None,
borderBottomRightRadius: curveBottomRight || CurveType.None,
}}
/>
) : null}
{!pending && !imgNotDownloaded && playIconOverlay ? (

View File

@ -37,6 +37,7 @@ const createProps = (overrideProps: Partial<Props> = {}): Props => ({
}),
],
bottomOverlay: boolean('bottomOverlay', overrideProps.bottomOverlay || false),
direction: overrideProps.direction || 'incoming',
i18n,
isSticker: boolean('isSticker', overrideProps.isSticker || false),
onClick: action('onClick'),

View File

@ -14,18 +14,23 @@ import {
isVideoAttachment,
} from '../../types/Attachment';
import { Image } from './Image';
import { Image, CurveType } from './Image';
import type { LocalizerType, ThemeType } from '../../types/Util';
export type DirectionType = 'incoming' | 'outgoing';
export type Props = {
attachments: Array<AttachmentType>;
withContentAbove?: boolean;
withContentBelow?: boolean;
bottomOverlay?: boolean;
direction: DirectionType;
isSticker?: boolean;
shouldCollapseAbove?: boolean;
shouldCollapseBelow?: boolean;
stickerSize?: number;
tabIndex?: number;
withContentAbove?: boolean;
withContentBelow?: boolean;
i18n: LocalizerType;
theme?: ThemeType;
@ -36,27 +41,85 @@ export type Props = {
const GAP = 1;
function getCurves({
direction,
shouldCollapseAbove,
shouldCollapseBelow,
withContentAbove,
withContentBelow,
}: {
direction: DirectionType;
shouldCollapseAbove?: boolean;
shouldCollapseBelow?: boolean;
withContentAbove?: boolean;
withContentBelow?: boolean;
}): {
curveTopLeft: CurveType;
curveTopRight: CurveType;
curveBottomLeft: CurveType;
curveBottomRight: CurveType;
} {
let curveTopLeft = CurveType.None;
let curveTopRight = CurveType.None;
let curveBottomLeft = CurveType.None;
let curveBottomRight = CurveType.None;
if (shouldCollapseAbove && direction === 'incoming') {
curveTopLeft = CurveType.Tiny;
curveTopRight = CurveType.Normal;
} else if (shouldCollapseAbove && direction === 'outgoing') {
curveTopLeft = CurveType.Normal;
curveTopRight = CurveType.Tiny;
} else if (!withContentAbove) {
curveTopLeft = CurveType.Normal;
curveTopRight = CurveType.Normal;
}
if (shouldCollapseBelow && direction === 'incoming') {
curveBottomLeft = CurveType.Tiny;
curveBottomRight = CurveType.None;
} else if (shouldCollapseBelow && direction === 'outgoing') {
curveBottomLeft = CurveType.None;
curveBottomRight = CurveType.Tiny;
} else if (!withContentBelow) {
curveBottomLeft = CurveType.Normal;
curveBottomRight = CurveType.Normal;
}
return {
curveTopLeft,
curveTopRight,
curveBottomLeft,
curveBottomRight,
};
}
export const ImageGrid = ({
attachments,
bottomOverlay,
direction,
i18n,
isSticker,
stickerSize,
onError,
onClick,
shouldCollapseAbove,
shouldCollapseBelow,
tabIndex,
theme,
withContentAbove,
withContentBelow,
}: Props): JSX.Element | null => {
const curveTopLeft = !withContentAbove;
const curveTopRight = curveTopLeft;
const { curveTopLeft, curveTopRight, curveBottomLeft, curveBottomRight } =
getCurves({
direction,
shouldCollapseAbove,
shouldCollapseBelow,
withContentAbove,
withContentBelow,
});
const curveBottom = !withContentBelow;
const curveBottomLeft = curveBottom;
const curveBottomRight = curveBottom;
const withBottomOverlay = Boolean(bottomOverlay && curveBottom);
const withBottomOverlay = Boolean(bottomOverlay && !withContentBelow);
if (!attachments || !attachments.length) {
return null;

View File

@ -222,15 +222,30 @@ const renderMany = (propsArray: ReadonlyArray<Props>) =>
/>
));
const renderBothDirections = (props: Props) =>
renderMany([
props,
{
const renderThree = (props: Props) => renderMany([props, props, props]);
const renderBothDirections = (props: Props) => (
<>
{renderThree(props)}
{renderThree({
...props,
author: { ...props.author, id: getDefaultConversation().id },
direction: 'outgoing',
},
]);
})}
</>
);
const renderSingleBothDirections = (props: Props) => (
<>
<Message {...props} />
<Message
{...{
...props,
author: { ...props.author, id: getDefaultConversation().id },
direction: 'outgoing',
}}
/>
</>
);
story.add('Plain Message', () => {
const props = createProps({
@ -353,7 +368,7 @@ story.add('Delivered', () => {
text: 'Hello there from a pal! I am sending a long message so that it will wrap a bit, since I like that look.',
});
return <Message {...props} />;
return renderThree(props);
});
story.add('Read', () => {
@ -363,7 +378,7 @@ story.add('Read', () => {
text: 'Hello there from a pal! I am sending a long message so that it will wrap a bit, since I like that look.',
});
return <Message {...props} />;
return renderThree(props);
});
story.add('Sending', () => {
@ -373,7 +388,7 @@ story.add('Sending', () => {
text: 'Hello there from a pal! I am sending a long message so that it will wrap a bit, since I like that look.',
});
return <Message {...props} />;
return renderThree(props);
});
story.add('Expiring', () => {
@ -502,7 +517,7 @@ story.add('Reactions (wider message)', () => {
],
});
return renderBothDirections(props);
return renderSingleBothDirections(props);
});
const joyReactions = Array.from({ length: 52 }, () => getJoyReaction());
@ -577,7 +592,7 @@ story.add('Reactions (short message)', () => {
],
});
return renderBothDirections(props);
return renderSingleBothDirections(props);
});
story.add('Avatar in Group', () => {
@ -588,7 +603,7 @@ story.add('Avatar in Group', () => {
text: 'Hello it is me, the saxophone.',
});
return <Message {...props} />;
return renderThree(props);
});
story.add('Badge in Group', () => {
@ -599,7 +614,7 @@ story.add('Badge in Group', () => {
text: 'Hello it is me, the saxophone.',
});
return <Message {...props} />;
return renderThree(props);
});
story.add('Sticker', () => {
@ -673,8 +688,8 @@ story.add('Deleted with error', () => {
return (
<>
<Message {...propsPartialError} />
<Message {...propsError} />
{renderThree(propsPartialError)}
{renderThree(propsError)}
</>
);
});
@ -684,9 +699,10 @@ story.add('Can delete for everyone', () => {
status: 'read',
text: 'I hope you get this.',
canDeleteForEveryone: true,
direction: 'outgoing',
});
return <Message {...props} direction="outgoing" />;
return renderThree(props);
});
story.add('Error', () => {
@ -916,7 +932,7 @@ story.add('Link Preview with too new a date', () => {
});
story.add('Image', () => {
const props = createProps({
const darkImageProps = createProps({
attachments: [
fakeAttachment({
url: '/fixtures/tina-rolf-269345-unsplash.jpg',
@ -928,8 +944,25 @@ story.add('Image', () => {
],
status: 'sent',
});
const lightImageProps = createProps({
attachments: [
fakeAttachment({
url: pngUrl,
fileName: 'the-sax.png',
contentType: IMAGE_PNG,
height: 240,
width: 320,
}),
],
status: 'sent',
});
return renderBothDirections(props);
return (
<>
{renderBothDirections(darkImageProps)}
{renderBothDirections(lightImageProps)}
</>
);
});
for (let i = 2; i <= 5; i += 1) {
@ -937,39 +970,39 @@ for (let i = 2; i <= 5; i += 1) {
const props = createProps({
attachments: [
fakeAttachment({
url: '/fixtures/tina-rolf-269345-unsplash.jpg',
fileName: 'tina-rolf-269345-unsplash.jpg',
contentType: IMAGE_JPEG,
width: 128,
height: 128,
url: pngUrl,
fileName: 'the-sax.png',
contentType: IMAGE_PNG,
height: 240,
width: 320,
}),
fakeAttachment({
url: '/fixtures/tina-rolf-269345-unsplash.jpg',
fileName: 'tina-rolf-269345-unsplash.jpg',
contentType: IMAGE_JPEG,
width: 128,
height: 128,
url: pngUrl,
fileName: 'the-sax.png',
contentType: IMAGE_PNG,
height: 240,
width: 320,
}),
fakeAttachment({
url: '/fixtures/tina-rolf-269345-unsplash.jpg',
fileName: 'tina-rolf-269345-unsplash.jpg',
contentType: IMAGE_JPEG,
width: 128,
height: 128,
url: pngUrl,
fileName: 'the-sax.png',
contentType: IMAGE_PNG,
height: 240,
width: 320,
}),
fakeAttachment({
url: '/fixtures/tina-rolf-269345-unsplash.jpg',
fileName: 'tina-rolf-269345-unsplash.jpg',
contentType: IMAGE_JPEG,
width: 128,
height: 128,
url: pngUrl,
fileName: 'the-sax.png',
contentType: IMAGE_PNG,
height: 240,
width: 320,
}),
fakeAttachment({
url: '/fixtures/tina-rolf-269345-unsplash.jpg',
fileName: 'tina-rolf-269345-unsplash.jpg',
contentType: IMAGE_JPEG,
width: 128,
height: 128,
url: pngUrl,
fileName: 'the-sax.png',
contentType: IMAGE_PNG,
height: 240,
width: 320,
}),
].slice(0, i),
status: 'sent',
@ -1316,7 +1349,7 @@ story.add('TapToView Error', () => {
status: 'sent',
});
return <Message {...props} />;
return renderThree(props);
});
story.add('Dangerous File Type', () => {
@ -1419,23 +1452,23 @@ story.add('Not approved, with link preview', () => {
story.add('Custom Color', () => (
<>
<Message
{...createProps({ text: 'Solid.' })}
direction="outgoing"
customColor={{
{renderThree({
...createProps({ text: 'Solid.' }),
direction: 'outgoing',
customColor: {
start: { hue: 82, saturation: 35 },
}}
/>
},
})}
<br style={{ clear: 'both' }} />
<Message
{...createProps({ text: 'Gradient.' })}
direction="outgoing"
customColor={{
{renderThree({
...createProps({ text: 'Gradient.' }),
direction: 'outgoing',
customColor: {
deg: 192,
start: { hue: 304, saturation: 85 },
end: { hue: 231, saturation: 76 },
}}
/>
},
})}
</>
));
@ -1506,20 +1539,18 @@ story.add('Collapsing text-only group messages', () => {
story.add('Story reply', () => {
const conversation = getDefaultConversation();
return (
<Message
{...createProps({ text: 'Wow!' })}
storyReplyContext={{
authorTitle: conversation.title,
conversationColor: ConversationColors[0],
isFromMe: false,
rawAttachment: fakeAttachment({
url: '/fixtures/snow.jpg',
thumbnail: fakeThumbnail('/fixtures/snow.jpg'),
}),
}}
/>
);
return renderThree({
...createProps({ text: 'Wow!' }),
storyReplyContext: {
authorTitle: conversation.title,
conversationColor: ConversationColors[0],
isFromMe: false,
rawAttachment: fakeAttachment({
url: '/fixtures/snow.jpg',
thumbnail: fakeThumbnail('/fixtures/snow.jpg'),
}),
},
});
});
const fullContact = {
@ -1559,7 +1590,7 @@ story.add('EmbeddedContact: Full Contact', () => {
return renderBothDirections(props);
});
story.add('EmbeddedContact: 2x Incoming, with Send Message', () => {
story.add('EmbeddedContact: with Send Message', () => {
const props = createProps({
contact: {
...fullContact,
@ -1568,19 +1599,7 @@ story.add('EmbeddedContact: 2x Incoming, with Send Message', () => {
},
direction: 'incoming',
});
return renderMany([props, props]);
});
story.add('EmbeddedContact: 2x Outgoing, with Send Message', () => {
const props = createProps({
contact: {
...fullContact,
firstNumber: fullContact.number[0].value,
uuid: UUID.generate().toString(),
},
direction: 'outgoing',
});
return renderMany([props, props]);
return renderBothDirections(props);
});
story.add('EmbeddedContact: Only Email', () => {

View File

@ -28,7 +28,7 @@ import { MessageMetadata } from './MessageMetadata';
import { MessageTextMetadataSpacer } from './MessageTextMetadataSpacer';
import { ImageGrid } from './ImageGrid';
import { GIF } from './GIF';
import { Image } from './Image';
import { CurveType, Image } from './Image';
import { ContactName } from './ContactName';
import type { QuotedAttachmentType } from './Quote';
import { Quote } from './Quote';
@ -908,18 +908,17 @@ export class Message extends React.PureComponent<Props, State> {
<div className={containerClassName}>
<ImageGrid
attachments={attachments}
withContentAbove={
isSticker || withContentAbove || shouldCollapseAbove
}
withContentBelow={
isSticker || withContentBelow || shouldCollapseBelow
}
direction={direction}
withContentAbove={isSticker || withContentAbove}
withContentBelow={isSticker || withContentBelow}
isSticker={isSticker}
stickerSize={STICKER_SIZE}
bottomOverlay={bottomOverlay}
i18n={i18n}
theme={theme}
onError={this.handleImageError}
theme={theme}
shouldCollapseAbove={shouldCollapseAbove}
shouldCollapseBelow={shouldCollapseBelow}
tabIndex={tabIndex}
onClick={attachment => {
if (!isDownloaded(attachment)) {
@ -1060,6 +1059,7 @@ export class Message extends React.PureComponent<Props, State> {
openLink,
previews,
quote,
shouldCollapseAbove,
theme,
kickOffAttachmentDownload,
} = this.props;
@ -1113,6 +1113,8 @@ export class Message extends React.PureComponent<Props, State> {
<ImageGrid
attachments={[first.image]}
withContentAbove={withContentAbove}
direction={direction}
shouldCollapseAbove={shouldCollapseAbove}
withContentBelow
onError={this.handleImageError}
i18n={i18n}
@ -1124,10 +1126,14 @@ export class Message extends React.PureComponent<Props, State> {
{first.image && previewHasImage && !isFullSizeImage ? (
<div className="module-message__link-preview__icon_container">
<Image
smallCurveTopLeft={!withContentAbove}
noBorder
noBackground
softCorners
curveBottomLeft={
withContentAbove ? CurveType.Tiny : CurveType.Small
}
curveBottomRight={CurveType.Tiny}
curveTopRight={CurveType.Tiny}
curveTopLeft={CurveType.Tiny}
alt={i18n('previewThumbnail', [first.domain])}
height={72}
width={72}
@ -2668,6 +2674,10 @@ export class Message extends React.PureComponent<Props, State> {
className={containerClassnames}
style={containerStyles}
onContextMenu={this.showContextMenu}
role="row"
onKeyDown={this.handleKeyDown}
onClick={this.handleClick}
tabIndex={-1}
>
{this.renderAuthor()}
{this.renderContents()}
@ -2717,7 +2727,6 @@ export class Message extends React.PureComponent<Props, State> {
// cannot be within another button
role="button"
onKeyDown={this.handleKeyDown}
onClick={this.handleClick}
onFocus={this.handleFocus}
ref={this.focusRef}
>

View File

@ -1,7 +1,13 @@
// Copyright 2021-2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import React, { useRef, useEffect, useState } from 'react';
import React, {
useRef,
useEffect,
useState,
useReducer,
useCallback,
} from 'react';
import classNames from 'classnames';
import { noop } from 'lodash';
@ -9,6 +15,7 @@ import { assert } from '../../util/assert';
import type { LocalizerType } from '../../types/Util';
import type { AttachmentType } from '../../types/Attachment';
import { isDownloaded } from '../../types/Attachment';
import { missingCaseError } from '../../util/missingCaseError';
import type { DirectionType, MessageStatusType } from './Message';
import type { ComputePeaksResult } from '../GlobalAudioContext';
@ -133,6 +140,37 @@ const Button: React.FC<ButtonProps> = props => {
);
};
type StateType = Readonly<{
isPlaying: boolean;
currentTime: number;
lastAriaTime: number;
}>;
type ActionType = Readonly<
| {
type: 'SET_IS_PLAYING';
value: boolean;
}
| {
type: 'SET_CURRENT_TIME';
value: number;
}
>;
function reducer(state: StateType, action: ActionType): StateType {
if (action.type === 'SET_IS_PLAYING') {
return {
...state,
isPlaying: action.value,
lastAriaTime: state.currentTime,
};
}
if (action.type === 'SET_CURRENT_TIME') {
return { ...state, currentTime: action.value };
}
throw missingCaseError(action);
}
/**
* Display message audio attachment along with its waveform, duration, and
* toggle Play/Pause button.
@ -184,11 +222,27 @@ export const MessageAudio: React.FC<Props> = (props: Props) => {
activeAudioID === id && activeAudioContext === renderingContext;
const waveformRef = useRef<HTMLDivElement | null>(null);
const [isPlaying, setIsPlaying] = useState(
isActive && !(audio.paused || audio.ended)
const [{ isPlaying, currentTime, lastAriaTime }, dispatch] = useReducer(
reducer,
{
isPlaying: isActive && !(audio.paused || audio.ended),
currentTime: isActive ? audio.currentTime : 0,
lastAriaTime: isActive ? audio.currentTime : 0,
}
);
const [currentTime, setCurrentTime] = useState(
isActive ? audio.currentTime : 0
const setIsPlaying = useCallback(
(value: boolean) => {
dispatch({ type: 'SET_IS_PLAYING', value });
},
[dispatch]
);
const setCurrentTime = useCallback(
(value: number) => {
dispatch({ type: 'SET_CURRENT_TIME', value });
},
[dispatch]
);
// NOTE: Avoid division by zero
@ -326,7 +380,15 @@ export const MessageAudio: React.FC<Props> = (props: Props) => {
audio.removeEventListener('loadedmetadata', onLoadedMetadata);
audio.removeEventListener('durationchange', onDurationChange);
};
}, [id, audio, isActive, currentTime, duration]);
}, [
id,
audio,
isActive,
currentTime,
duration,
setCurrentTime,
setIsPlaying,
]);
// This effect detects `isPlaying` changes and starts/pauses playback when
// needed (+keeps waveform position and audio position in sync).
@ -457,10 +519,10 @@ export const MessageAudio: React.FC<Props> = (props: Props) => {
role="slider"
aria-label={i18n('MessageAudio--slider')}
aria-orientation="horizontal"
aria-valuenow={currentTime}
aria-valuenow={lastAriaTime}
aria-valuemin={0}
aria-valuemax={duration}
aria-valuetext={timeToText(currentTime)}
aria-valuetext={timeToText(lastAriaTime)}
>
{peaks.map((peak, i) => {
let height = Math.max(BAR_MIN_HEIGHT, BAR_MAX_HEIGHT * peak);
@ -531,6 +593,7 @@ export const MessageAudio: React.FC<Props> = (props: Props) => {
const metadata = (
<div className={`${CSS_BASE}__metadata`}>
<div
aria-hidden="true"
className={classNames(
`${CSS_BASE}__countdown`,
`${CSS_BASE}__countdown--${played ? 'played' : 'unplayed'}`

View File

@ -5,7 +5,7 @@ import React from 'react';
import classNames from 'classnames';
import { unescape } from 'lodash';
import { Image } from './Image';
import { CurveType, Image } from './Image';
import { LinkPreviewDate } from './LinkPreviewDate';
import type { AttachmentType } from '../../types/Attachment';
@ -51,7 +51,10 @@ export const StagedLinkPreview: React.FC<Props> = ({
<div className="module-staged-link-preview__icon-container">
<Image
alt={i18n('stagedPreviewThumbnail', [domain])}
softCorners
curveBottomLeft={CurveType.Tiny}
curveBottomRight={CurveType.Tiny}
curveTopRight={CurveType.Tiny}
curveTopLeft={CurveType.Tiny}
height={72}
width={72}
url={image.url}

View File

@ -3,7 +3,7 @@
import { isRecord } from '../../util/isRecord';
import { HTTPError } from '../../textsecure/Errors';
import { parseRetryAfter } from '../../util/parseRetryAfter';
import { parseRetryAfterWithDefault } from '../../util/parseRetryAfter';
export function findRetryAfterTimeFromError(err: unknown): number {
let rawValue: unknown;
@ -16,5 +16,5 @@ export function findRetryAfterTimeFromError(err: unknown): number {
}
}
return parseRetryAfter(rawValue);
return parseRetryAfterWithDefault(rawValue);
}

View File

@ -7,6 +7,7 @@ import { handleMessageSend } from '../../util/handleMessageSend';
import { getSendOptions } from '../../util/getSendOptions';
import {
isDirectConversation,
isGroup,
isGroupV2,
} from '../../util/whatTypeOfConversation';
import { SignalService as Proto } from '../../protobuf';
@ -22,10 +23,39 @@ import type {
ProfileKeyJobData,
} from '../conversationJobQueue';
import type { CallbackResultType } from '../../textsecure/Types.d';
import { getUntrustedConversationIds } from './getUntrustedConversationIds';
import { areAllErrorsUnregistered } from './areAllErrorsUnregistered';
import { isConversationAccepted } from '../../util/isConversationAccepted';
import { isConversationUnregistered } from '../../util/isConversationUnregistered';
import type { ConversationAttributesType } from '../../model-types.d';
import {
OutgoingIdentityKeyError,
SendMessageChallengeError,
SendMessageProtoError,
UnregisteredUserError,
} from '../../textsecure/Errors';
export function canAllErrorsBeIgnored(
conversation: ConversationAttributesType,
error: unknown
): boolean {
if (
error instanceof OutgoingIdentityKeyError ||
error instanceof SendMessageChallengeError ||
error instanceof UnregisteredUserError
) {
return true;
}
return Boolean(
isGroup(conversation) &&
error instanceof SendMessageProtoError &&
error.errors?.every(
item =>
item instanceof OutgoingIdentityKeyError ||
item instanceof SendMessageChallengeError ||
item instanceof UnregisteredUserError
)
);
}
// Note: because we don't have a recipient map, we will resend this message to folks that
// got it on the first go-round, if some sends fail. This is okay, because a recipient
@ -71,18 +101,7 @@ export async function sendProfileKey(
// Note: flags and the profileKey itself are all that matter in the proto.
const untrustedConversationIds = getUntrustedConversationIds(
conversation.getRecipients()
);
if (untrustedConversationIds.length) {
window.reduxActions.conversations.conversationStoppedByMissingVerification({
conversationId: conversation.id,
untrustedConversationIds,
});
throw new Error(
`Profile key send blocked because ${untrustedConversationIds.length} conversation(s) were untrusted. Failing this attempt.`
);
}
// Note: we don't check for untrusted conversations here; we attempt to send anyway
if (isDirectConversation(conversation.attributes)) {
if (!isConversationAccepted(conversation.attributes)) {
@ -149,9 +168,9 @@ export async function sendProfileKey(
sendType,
});
} catch (error: unknown) {
if (areAllErrorsUnregistered(conversation.attributes, error)) {
if (canAllErrorsBeIgnored(conversation.attributes, error)) {
log.info(
'Group send failures were all UnregisteredUserError, returning succcessfully.'
'Group send failures were all OutgoingIdentityKeyError, SendMessageChallengeError, or UnregisteredUserError. Returning succcessfully.'
);
return;
}

View File

@ -2667,17 +2667,17 @@ export class ConversationModel extends window.Backbone
}
}
const didSomethingChange = keyChange || beginningVerified !== verified;
const didVerifiedChange = beginningVerified !== verified;
const isExplicitUserAction = !options.viaStorageServiceSync;
const shouldShowFromStorageSync =
options.viaStorageServiceSync && verified !== UNVERIFIED;
if (
// The message came from an explicit verification in a client (not a contact sync
// or storage service sync)
(didSomethingChange && isExplicitUserAction) ||
// The verification value received by the contact sync is different from what we
// The message came from an explicit verification in a client (not
// storage service sync)
(didVerifiedChange && isExplicitUserAction) ||
// The verification value received by the storage sync is different from what we
// have on record (and it's not a transition to UNVERIFIED)
(didSomethingChange && shouldShowFromStorageSync) ||
(didVerifiedChange && shouldShowFromStorageSync) ||
// Our local verification status is VERIFIED and it hasn't changed, but the key did
// change (Key1/VERIFIED -> Key2/VERIFIED), but we don't want to show DEFAULT ->
// DEFAULT or UNVERIFIED -> UNVERIFIED
@ -4672,7 +4672,8 @@ export class ConversationModel extends window.Backbone
await markConversationRead(this.attributes, newestUnreadAt, options);
const unreadCount = await window.Signal.Data.getTotalUnreadForConversation(
this.id
this.id,
{ storyId: undefined, isGroup: isGroup(this.attributes) }
);
const prevUnreadCount = this.get('unreadCount');

View File

@ -1170,9 +1170,12 @@ async function getMessageBySender({
async function getTotalUnreadForConversation(
conversationId: string,
storyId?: UUIDStringType
options: {
storyId: UUIDStringType | undefined;
isGroup: boolean;
}
) {
return channels.getTotalUnreadForConversation(conversationId, storyId);
return channels.getTotalUnreadForConversation(conversationId, options);
}
async function getUnreadByConversationAndMarkRead(options: {

View File

@ -384,7 +384,10 @@ export type DataInterface = {
removeMessages: (ids: Array<string>) => Promise<void>;
getTotalUnreadForConversation: (
conversationId: string,
storyId?: UUIDStringType
options: {
storyId: UUIDStringType | undefined;
isGroup: boolean;
}
) => Promise<number>;
getUnreadByConversationAndMarkRead: (options: {
conversationId: string;

View File

@ -2676,14 +2676,22 @@ function getOldestUnreadMessageForConversation(
async function getTotalUnreadForConversation(
conversationId: string,
storyId?: UUIDStringType
options: {
storyId: UUIDStringType | undefined;
isGroup: boolean;
}
): Promise<number> {
return getTotalUnreadForConversationSync(conversationId, storyId);
return getTotalUnreadForConversationSync(conversationId, options);
}
function getTotalUnreadForConversationSync(
conversationId: string,
storyId?: UUIDStringType,
isGroup?: boolean
{
storyId,
isGroup,
}: {
storyId: UUIDStringType | undefined;
isGroup: boolean;
}
): number {
const db = getInstance();
const row = db
@ -2737,11 +2745,10 @@ function getMessageMetricsForConversationSync(
storyId,
isGroup
);
const totalUnread = getTotalUnreadForConversationSync(
conversationId,
const totalUnread = getTotalUnreadForConversationSync(conversationId, {
storyId,
isGroup
);
isGroup: Boolean(isGroup),
});
return {
oldest: oldest ? pick(oldest, ['received_at', 'sent_at', 'id']) : undefined,

View File

@ -4,25 +4,25 @@
import { assert } from 'chai';
import { MINUTE } from '../../util/durations';
import { parseRetryAfter } from '../../util/parseRetryAfter';
import { parseRetryAfterWithDefault } from '../../util/parseRetryAfter';
describe('parseRetryAfter', () => {
it('should return 1 minute when passed non-strings', () => {
assert.equal(parseRetryAfter(undefined), MINUTE);
assert.equal(parseRetryAfter(1234), MINUTE);
assert.equal(parseRetryAfterWithDefault(undefined), MINUTE);
assert.equal(parseRetryAfterWithDefault(1234), MINUTE);
});
it('should return 1 minute with invalid strings', () => {
assert.equal(parseRetryAfter('nope'), MINUTE);
assert.equal(parseRetryAfter('1ff'), MINUTE);
assert.equal(parseRetryAfterWithDefault('nope'), MINUTE);
assert.equal(parseRetryAfterWithDefault('1ff'), MINUTE);
});
it('should return milliseconds on valid input', () => {
assert.equal(parseRetryAfter('100'), 100000);
assert.equal(parseRetryAfterWithDefault('100'), 100000);
});
it('should return 1 second at minimum', () => {
assert.equal(parseRetryAfter('0'), 1000);
assert.equal(parseRetryAfter('-1'), 1000);
assert.equal(parseRetryAfterWithDefault('0'), 1000);
assert.equal(parseRetryAfterWithDefault('-1'), 1000);
});
});

View File

@ -124,7 +124,10 @@ describe('sql/markRead', () => {
assert.lengthOf(await _getAllMessages(), 7);
assert.strictEqual(
await getTotalUnreadForConversation(conversationId),
await getTotalUnreadForConversation(conversationId, {
storyId: undefined,
isGroup: false,
}),
4,
'unread count'
);
@ -137,7 +140,10 @@ describe('sql/markRead', () => {
assert.lengthOf(markedRead, 2, 'two messages marked read');
assert.strictEqual(
await getTotalUnreadForConversation(conversationId),
await getTotalUnreadForConversation(conversationId, {
storyId: undefined,
isGroup: false,
}),
2,
'unread count'
);
@ -164,7 +170,10 @@ describe('sql/markRead', () => {
assert.strictEqual(markedRead2[0].id, message7.id, 'should be message7');
assert.strictEqual(
await getTotalUnreadForConversation(conversationId),
await getTotalUnreadForConversation(conversationId, {
storyId: undefined,
isGroup: false,
}),
0,
'unread count'
);
@ -365,7 +374,10 @@ describe('sql/markRead', () => {
});
assert.strictEqual(
await getTotalUnreadForConversation(conversationId),
await getTotalUnreadForConversation(conversationId, {
storyId: undefined,
isGroup: false,
}),
2,
'unread count'
);
@ -384,7 +396,10 @@ describe('sql/markRead', () => {
'first should be message4'
);
assert.strictEqual(
await getTotalUnreadForConversation(conversationId),
await getTotalUnreadForConversation(conversationId, {
storyId: undefined,
isGroup: false,
}),
1,
'unread count'
);

View File

@ -112,7 +112,7 @@ describe('updater/differential', () => {
});
if (ranges.length === 1) {
res.writeHead(200, {
res.writeHead(206, {
'content-type': 'application/octet-stream',
});
if (shouldTimeout === 'response') {

View File

@ -310,8 +310,20 @@ export default class AccountManager extends EventTarget {
kind
);
await this.server.registerKeys(keys, kind);
await this.confirmKeys(keys, kind);
try {
await this.server.registerKeys(keys, kind);
await this.confirmKeys(keys, kind);
} catch (error) {
if (kind === UUIDKind.PNI) {
log.error(
'Failed to upload PNI prekeys. Moving on',
Errors.toLogFormat(error)
);
return;
}
throw error;
}
})
);
} finally {

View File

@ -156,7 +156,7 @@ export class SendMessageChallengeError extends ReplayableError {
public readonly data: SendMessageChallengeData | undefined;
public readonly retryAt: number;
public readonly retryAt?: number;
constructor(identifier: string, httpError: HTTPError) {
super({
@ -171,7 +171,10 @@ export class SendMessageChallengeError extends ReplayableError {
const headers = httpError.responseHeaders || {};
this.retryAt = Date.now() + parseRetryAfter(headers['retry-after']);
const retryAfter = parseRetryAfter(headers['retry-after']);
if (retryAfter) {
this.retryAt = Date.now() + retryAfter;
}
appendStack(this, httpError);
}

View File

@ -180,6 +180,13 @@ export abstract class Updater {
const mainWindow = this.getMainWindow();
mainWindow?.webContents.send('show-update-dialog', dialogType);
this.setUpdateListener(async () => {
this.logger.info('updater/markCannotUpdate: retrying after user action');
this.markedCannotUpdate = false;
await this.checkForUpdatesMaybeInstall();
});
}
//

View File

@ -386,8 +386,14 @@ export async function downloadRanges(
'response'
);
// When the result is single range we might get 200 status code
if (ranges.length === 1 && statusCode === 200) {
strictAssert(statusCode === 206, `Invalid status code: ${statusCode}`);
const match = headers['content-type']?.match(
/^multipart\/byteranges;\s*boundary=([^\s;]+)/
);
// When the result is single range we might non-multipart response
if (ranges.length === 1 && !match) {
await saveDiffStream({
diff: ranges[0],
stream,
@ -398,13 +404,6 @@ export async function downloadRanges(
return;
}
strictAssert(statusCode === 206, `Invalid status code: ${statusCode}`);
const match = headers['content-type']?.match(
/^multipart\/byteranges;\s*boundary=([^\s;]+)/
);
strictAssert(match, `Invalid Content-Type: ${headers['content-type']}`);
// eslint-disable-next-line prefer-destructuring
boundary = match[1];
} catch (error) {
@ -511,6 +510,12 @@ async function saveDiffStream({
await output.write(chunk, 0, chunk.length, offset + diff.writeOffset);
offset += chunk.length;
// Check for signal again so that we don't invoke status callback when
// aborted.
if (abortSignal?.aborted) {
return;
}
chunkStatusCallback(chunk.length);
}

View File

@ -9,9 +9,10 @@ import * as packageJson from '../../package.json';
import { getUserAgent } from '../util/getUserAgent';
import * as durations from '../util/durations';
export const GOT_CONNECT_TIMEOUT = 5 * durations.MINUTE;
export const GOT_LOOKUP_TIMEOUT = 5 * durations.MINUTE;
export const GOT_SOCKET_TIMEOUT = 5 * durations.MINUTE;
export const GOT_CONNECT_TIMEOUT = durations.MINUTE;
export const GOT_LOOKUP_TIMEOUT = durations.MINUTE;
export const GOT_SOCKET_TIMEOUT = durations.MINUTE;
const GOT_RETRY_LIMIT = 3;
export function getProxyUrl(): string | undefined {
return process.env.HTTPS_PROXY || process.env.https_proxy;
@ -47,5 +48,19 @@ export function getGotOptions(): GotOptions {
// This timeout is reset whenever we get new data on the socket
socket: GOT_SOCKET_TIMEOUT,
},
retry: {
limit: GOT_RETRY_LIMIT,
errorCodes: [
'ETIMEDOUT',
'ECONNRESET',
'ECONNREFUSED',
'EPIPE',
'ENOTFOUND',
'ENETUNREACH',
'EAI_AGAIN',
],
methods: ['GET', 'HEAD'],
statusCodes: [413, 429, 503],
},
};
}

View File

@ -42,6 +42,29 @@ const cachedIndices = new WeakMap<
Fuse<ConversationType>
>();
type CommandRunnerType = (
conversations: ReadonlyArray<ConversationType>,
query: string
) => Array<ConversationType>;
const COMMANDS = new Map<string, CommandRunnerType>();
COMMANDS.set('uuidEndsWith', (conversations, query) => {
return conversations.filter(convo => convo.uuid?.endsWith(query));
});
COMMANDS.set('idEndsWith', (conversations, query) => {
return conversations.filter(convo => convo.id?.endsWith(query));
});
COMMANDS.set('e164EndsWith', (conversations, query) => {
return conversations.filter(convo => convo.e164?.endsWith(query));
});
COMMANDS.set('groupIdEndsWith', (conversations, query) => {
return conversations.filter(convo => convo.groupId?.endsWith(query));
});
// See https://fusejs.io/examples.html#extended-search for
// extended search documentation.
function searchConversations(
@ -49,6 +72,16 @@ function searchConversations(
searchTerm: string,
regionCode: string | undefined
): Array<ConversationType> {
const maybeCommand = searchTerm.match(/^!([^\s]+):(.*)$/);
if (maybeCommand) {
const [, commandName, query] = maybeCommand;
const command = COMMANDS.get(commandName);
if (command) {
return command(conversations, query);
}
}
const phoneNumber = parseAndFormatPhoneNumber(searchTerm, regionCode);
// Escape the search term

View File

@ -7,15 +7,24 @@ import { isNormalNumber } from './isNormalNumber';
const DEFAULT_RETRY_AFTER = MINUTE;
const MINIMAL_RETRY_AFTER = SECOND;
export function parseRetryAfter(value: unknown): number {
if (typeof value !== 'string') {
export function parseRetryAfterWithDefault(value: unknown): number {
const retryAfter = parseRetryAfter(value);
if (retryAfter === undefined) {
return DEFAULT_RETRY_AFTER;
}
return Math.max(retryAfter, MINIMAL_RETRY_AFTER);
}
export function parseRetryAfter(value: unknown): number | undefined {
if (typeof value !== 'string') {
return undefined;
}
const retryAfter = parseInt(value, 10);
if (!isNormalNumber(retryAfter) || retryAfter.toString() !== value) {
return DEFAULT_RETRY_AFTER;
return undefined;
}
return Math.max(retryAfter * SECOND, MINIMAL_RETRY_AFTER);
return retryAfter * SECOND;
}