Compare commits

...

36 Commits
main ... 7.42.x

Author SHA1 Message Date
Scott Nonnenberg
e2c7dddde7 7.42.0
Some checks failed
On Release / Create release event in datadog (push) Has been cancelled
Stories / test (push) Has been cancelled
Benchmark / linux (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / Sticker Creator (push) Has been cancelled
Commits Check / linux (push) Has been cancelled
CI / macos (push) Has been cancelled
CI / linux (push) Has been cancelled
CI / windows (push) Has been cancelled
CI / mock-tests (push) Has been cancelled
2025-02-13 10:15:12 +10:00
Scott Nonnenberg
eb0e95127d Update strings 2025-02-13 10:15:11 +10:00
automated-signal
5855b259f8
Fix sql error when restoring from interrupted sync 2025-02-12 15:17:49 -05:00
automated-signal
3dfc61cae3
Enable link & sync in production
Co-authored-by: trevor-signal <131492920+trevor-signal@users.noreply.github.com>
2025-02-12 09:21:41 -08:00
automated-signal
3ed1c6d45a
Fix forwarding messages with undownloadable attachments
Co-authored-by: ayumi-signal <143036029+ayumi-signal@users.noreply.github.com>
2025-02-12 08:31:42 -08:00
automated-signal
00586f17d8
Update link & sync release notes 2025-02-11 21:02:34 -05:00
Scott Nonnenberg
388ce72541 7.42.0-beta.2
Some checks failed
On Release / Create release event in datadog (push) Has been cancelled
2025-02-11 08:32:09 +10:00
Scott Nonnenberg
db120f9945 Update strings 2025-02-11 08:32:08 +10:00
automated-signal
039c961b21
Update to RingRTC v2.49.4
Co-authored-by: Jim Gustafson <jim@signal.org>
2025-02-11 08:17:16 +10:00
automated-signal
686f74a95d
Fix handling of encrypted unprocessed envelopes
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2025-02-10 13:09:26 -08:00
automated-signal
7893640b0d
Fix persistence of last window size and position
Co-authored-by: ayumi-signal <143036029+ayumi-signal@users.noreply.github.com>
2025-02-07 09:37:18 -08:00
ayumi-signal
8add4e4f62 7.42.0-beta.1
Some checks failed
On Release / Create release event in datadog (push) Has been cancelled
2025-02-06 11:38:39 -08:00
ayumi-signal
11a8ecc3af Update strings 2025-02-06 11:27:52 -08:00
automated-signal
50bcc5ecca
Refactor sticker sync logic
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2025-02-06 11:21:45 -08:00
automated-signal
89b01338b2
Use other sync messages for conversations missing ACI
Co-authored-by: Scott Nonnenberg <scott@signal.org>
2025-02-06 09:45:18 -08:00
automated-signal
47a5379a25
downloadAttachment: Log presence/absence of downloadPath
Co-authored-by: Scott Nonnenberg <scott@signal.org>
2025-02-06 17:11:24 +10:00
automated-signal
6919393f86
Update better-sqlite3 to 9.0.11
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2025-02-05 22:35:16 -08:00
automated-signal
6d1368ee67
Send typingIndicator only when composer text and formatting has changed
Co-authored-by: Scott Nonnenberg <scott@signal.org>
2025-02-06 08:41:42 +10:00
automated-signal
2e5a08d9e6
(Re-)Enable Desktop's /v1/keepalive for libsignal chat websockets too
Co-authored-by: Jordan Rose <jrose@signal.org>
2025-02-05 14:23:32 -08:00
automated-signal
b9a25b7534
Fix message reaction picker moving when typing stops
Co-authored-by: ayumi-signal <143036029+ayumi-signal@users.noreply.github.com>
2025-02-05 12:53:36 -08:00
automated-signal
22584a1226
Upgrade libsignal to v0.65.5
Co-authored-by: Alex Bakon <akonradi@signal.org>
2025-02-05 12:01:42 -08:00
automated-signal
d189cf646f
Release Notes Channel: Add support for server body ranges
Co-authored-by: yash-signal <yash@signal.org>
2025-02-05 08:14:48 -08:00
automated-signal
320e06ed0f
Notification token on Windows
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2025-02-05 08:14:38 -08:00
automated-signal
83b076b5c4
Test processing of unprocessed envelopes
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2025-02-05 12:02:59 +10:00
automated-signal
2c01e6f4b8
Change header visibility in left pane
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2025-02-05 12:02:48 +10:00
automated-signal
7f74a9dd41
Avoid mute timeouts with invalid delay values
Co-authored-by: trevor-signal <131492920+trevor-signal@users.noreply.github.com>
2025-02-05 12:02:36 +10:00
automated-signal
490b4288c8
Fix window.SignalDebug.getMessage functions
Co-authored-by: Scott Nonnenberg <scott@signal.org>
2025-02-05 12:02:24 +10:00
automated-signal
986a07adb3
Update behavior during import for missing oneof fields
Co-authored-by: trevor-signal <131492920+trevor-signal@users.noreply.github.com>
2025-02-05 12:01:58 +10:00
automated-signal
73db71bc28
Notify libsignal-net on network availability
Co-authored-by: Alex Bakon <akonradi@signal.org>
2025-02-05 12:01:51 +10:00
automated-signal
db700fde40
getProfile: Only clear profile name if profile is missing it
Co-authored-by: Scott Nonnenberg <scott@signal.org>
2025-02-05 12:01:39 +10:00
automated-signal
3b441e4a94
Don't fetch remote config twice on startup
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2025-01-31 11:25:53 +10:00
automated-signal
fae6b0d467
Fix status of in-flight sticker packs after import
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2025-01-31 11:25:31 +10:00
automated-signal
7cc07f99d6
Composer: Listen for compose start/end and apply proper styling
Co-authored-by: Scott Nonnenberg <scott@signal.org>
2025-01-31 11:25:21 +10:00
automated-signal
f15d5049f8
Fix timestamp capping for storage service
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
2025-01-30 11:15:44 -08:00
automated-signal
5fc53ee435
modifyGroupV2: useCredentialsFrom only when profileKeyCredential needed
Co-authored-by: Scott Nonnenberg <scott@signal.org>
2025-01-30 11:15:35 -08:00
automated-signal
9f5c752eef
Fix copy/paste of a single-line of formatting text
Co-authored-by: Scott Nonnenberg <scott@signal.org>
2025-01-30 11:14:50 -08:00
142 changed files with 1896 additions and 1006 deletions

View File

@ -3957,7 +3957,7 @@ For more information on this, and how to apply and follow the GNU AGPL, see
```
## libsignal-account-keys, attest, libsignal-ffi, libsignal-jni, libsignal-jni-testing, libsignal-node, signal-neon-futures, signal-neon-futures-tests, libsignal-bridge, libsignal-bridge-macros, libsignal-bridge-testing, libsignal-bridge-types, libsignal-core, signal-crypto, device-transfer, libsignal-keytrans, signal-media, libsignal-message-backup, libsignal-message-backup-macros, libsignal-net, libsignal-net-infra, poksho, libsignal-protocol, libsignal-svr3, usernames, zkcredential, zkgroup
## libsignal-account-keys, attest, libsignal-ffi, libsignal-jni, libsignal-jni-impl, libsignal-jni-testing, libsignal-node, signal-neon-futures, signal-neon-futures-tests, libsignal-bridge, libsignal-bridge-macros, libsignal-bridge-testing, libsignal-bridge-types, libsignal-core, signal-crypto, device-transfer, libsignal-keytrans, signal-media, libsignal-message-backup, libsignal-message-backup-macros, libsignal-net, libsignal-net-infra, poksho, libsignal-protocol, libsignal-svr3, usernames, zkcredential, zkgroup
```
GNU AFFERO GENERAL PUBLIC LICENSE
@ -11922,7 +11922,7 @@ For more information on this, and how to apply and follow the GNU AGPL, see
```
## libsignal-account-keys 0.1.0, libsignal-core 0.1.0, mrp 2.49.3, protobuf 2.49.3, ringrtc 2.49.3, regex-aot 0.1.0, partial-default-derive 0.1.0
## libsignal-account-keys 0.1.0, libsignal-core 0.1.0, mrp 2.49.4, protobuf 2.49.4, ringrtc 2.49.4, regex-aot 0.1.0, partial-default-derive 0.1.0
```
GNU AFFERO GENERAL PUBLIC LICENSE

View File

@ -1593,7 +1593,7 @@
"messageformat": "Skrap alle data?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Skrap alle data en boodskappe in hierdie weergawe van Signal Desktop? Jou Signal-rekening en data op jou foon of ander gekoppelde toestelle sal nie geskrap word nie."
},
"icu:deleteAllDataProgress": {
"messageformat": "Ontkoppel en skrap tans alle data…"
@ -5819,6 +5819,6 @@
"messageformat": "Ons het 'n seldsame fout reggestel wat verhoed het dat sommige kletse korrek oopmaak."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Jy het nou die keuse om jou kletsgeskiedenis en jou laaste 45 dae se media na 'n nuwe gekoppelde toestel oor te dra. Die oordragproses is end-tot-end geënkripteer, en heeltemal opsioneel."
"messageformat": "Wanneer jy nou jou primêre Signal-toestel aan 'n nuwe rekenaar koppel, kan jy jou kletsgeskiedenis en jou laaste 45 dae se media saam oordra. Die oordragproses is end-tot-end geënkripteer, en heeltemal opsioneel."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "حذف جميع البيانات ؟"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "هل ترغبُ بحذف جميع البيانات والرسائل من هذا الإصدار من سيجنال Desktop؟ لن يُحذَف حساب سيجنال الخاص بك وبياناتك على هاتفك أو أي أجهزة أخرى مُرتبِطة."
},
"icu:deleteAllDataProgress": {
"messageformat": "جارٍ فصل وحذف جميع البيانات…"
@ -5819,6 +5819,6 @@
"messageformat": "أصلحنا خطأ نادر كان يَمنع بعض الدردشات من أن تُفتح بشكلٍ صحيح بعد اختيارها، بحيث أن سيجنال Desktop الآن لا يُظهر أي رد عندما تحاول أن تتذكر ما قاله الأشخاص الآخرون في الدردشة."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "الآن، عندما تربط جهازك الأساسي الذي يحمل تطبيق سيجنال بحاسوب أو جهاز آيباد جديد، يُمكنك أن تنقل سِجل الدردشة الخاص بك وآخر 45 يومًا من الوسائط. عملية النقل مُشفّرة من طرف لطرف واختيارية كليًا. إذا كُنتَ تُفكِّر في نقل بياناتك السابقة أو تجاهلها، دع أجهزتك تساعدك في ذلك."
"messageformat": "الآن، عندما تربط جهازك الأساسي الذي يحمل تطبيق سيجنال بحاسوب جديد، يُمكنك أن تنقل سِجل الدردشة الخاص بك وآخر 45 يومًا من الوسائط. عملية النقل مُشفّرة من طرف لطرف واختيارية كليًا. إذا كُنتَ تُفكِّر في نقل بياناتك السابقة أو تجاهلها، دع أجهزتك تساعدك في ذلك."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Bütün verilənlər silinsin?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal Desktop-un bu versiyasından bütün verilənlər və mesajlar silinsin? Signal hesabınız və telefonunuzdakı verilənlər, yaxud da əlaqələndirilmiş digər cihazlar silinməyəcək."
},
"icu:deleteAllDataProgress": {
"messageformat": "Bağlantı kəsilir və bütün verilənlər silinir…"
@ -5819,6 +5819,6 @@
"messageformat": "Seçildikdən sonra bəzi çatların düzgün açılmasına mane olan nadir görünən bir nasazlığı aradan qaldırdıq ki, siz həmin çatları xatırlayarkən Signal Desktop-da boşluq görünməsin."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "İndi əsas Signal cihazınızı yeni Masaüstü və ya iPad cihazınızla əlaqələndirdiyiniz zaman çat tarixçənizi və son 45 günlük media fayllarınızı da köçürə bilərsiniz. Köçürmə prosesi ucdan-uca şifrələnib və tamamilə öz seçiminizdən asılıdır. \"Keçmiş keçmişdə qaldı\" demək və ya onu özünüzlə daşımaq artıq yalnız sizdən asılıdır."
"messageformat": "İndi əsas Signal cihazınızı yeni Masaüstü cihazınızla əlaqələndirdiyiniz zaman çat tarixçənizi və son 45 günlük media fayllarınızı da köçürə bilərsiniz. Köçürmə prosesi ucdan-uca şifrələnib və tamamilə öz seçiminizdən asılıdır. \"Keçmiş keçmişdə qaldı\" demək və ya onu özünüzlə daşımaq artıq yalnız sizdən asılıdır."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Изтриване на всички данни?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Изтриване на всички данни и съобщения от тази версия на Signal Desktop? Вашият акаунт в Signal и данните на телефона ви или други свързани устройства няма да бъдат изтрити."
},
"icu:deleteAllDataProgress": {
"messageformat": "Прекъсване и изтриване на всички данни…"
@ -5819,6 +5819,6 @@
"messageformat": "Отстранихме рядък бъг, който пречеше на някои чатове да се отварят правилно."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Сега можете да изберете да пренесете историята на чата и мултимедийните файлове от последните 45 дни към ново свързано устройство. Процесът на прехвърляне е криптиран от край до край и е напълно незадължителен."
"messageformat": "Сега можете да изберете да пренесете историята на чата и мултимедийните файлове от последните 45 дни към ново свързано устройство. Процесът на прехвърляне е криптиран от край до край и е абсолютно незадължителен."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "সকল ডেটা মুছে ফেলবেন?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal ডেস্কটপের এই সংস্করণ থেকে সকল ডেটা ও মেসেজ মুছে ফেলবেন? আপনার Signal অ্যাকাউন্ট এবং আপনার ফোন বা অন্যান্য লিংককৃত ডিভাইসের ডেটা মুছে ফেলা হবে না।"
},
"icu:deleteAllDataProgress": {
"messageformat": "সংযোগ বিচ্ছিন্ন হচ্ছে এবং সকল ডেটা মুছে ফেলা হচ্ছে…"
@ -5819,6 +5819,6 @@
"messageformat": "আমরা এমন একটি বিরল বাগ সংশোধন করেছি যার কারণে কিছু চ্যাট সঠিকভাবে খুলতে পারতো না।"
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "এখন আপনি আপনার চ্যাটের ইতিহাস এবং আপনার শেষ 45 দিনের মিডিয়া একটি নতুন লিংক করা ডিভাইসে ট্রান্সফার করার জন্য নির্বাচন করতে পারবেন। ট্রান্সফার করার প্রক্রিয়া এন্ড-টু-এন্ড এনক্রিপ্টেড এবং সম্পূর্ণ ঐচ্ছিক।"
"messageformat": "এখন আপনি আপনার চ্যাট-এর ইতিহাস ও আপনার গত 45 দিনের মিডিয়া একটি নতুন লিংক করা ডিভাইসে ট্রান্সফার করার জন্য বেছে নিতে পারবেন।"
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Izbrisati sve podatke?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Izbrisati sve podatke i poruke iz ove verzije Signal Desktopa? Vaš Signal račun i podaci na vašem telefonu ili drugim povezanim uređajima neće biti izbrisani."
},
"icu:deleteAllDataProgress": {
"messageformat": "Prekidanje veze i brisanje svih podataka…"
@ -5819,6 +5819,6 @@
"messageformat": "Ispravili smo rijetku pogrešku koja je sprječavala ispravno otvaranje nekih chatova."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Sada možete odlučiti prenijeti svoju povijest razgovora i posljednjih 45 dana medijskih sadržaja na novi povezani uređaj. Proces prijenosa je end-to-end kriptiran i potpuno neobavezan."
"messageformat": "Sada možete odlučiti prenijeti svoju povijest razgovora i posljednjih 45 dana medija na novi povezani uređaj. Proces prijenosa je end-to-end kriptiran i potpuno neobavezan."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Vols suprimir totes les dades?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Vols eliminar totes les dades i missatges d'aquesta versió de Signal per a Escriptori? El teu compte de Signal i les dades del teu telèfon o altres dispositius enllaçats no s'eliminaran."
},
"icu:deleteAllDataProgress": {
"messageformat": "Desconnexió i eliminació de totes les dades…"

View File

@ -1593,7 +1593,7 @@
"messageformat": "Smazat všechna data?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Odstranit všechna data a zprávy z této verze aplikace Signal Desktop? Váš účet Signal a data v telefonu nebo jiných propojených zařízení nebudou odstraněny."
},
"icu:deleteAllDataProgress": {
"messageformat": "Odpojuji a mažu všechna data…"
@ -5819,6 +5819,6 @@
"messageformat": "Opravili jsme vzácnou chybu, která znemožňovala správné otevření některých chatů."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Nyní se můžete rozhodnout, zda chcete přenést historii chatů a médií za posledních 45 dní do nového propojeného zařízení. Přenos je koncově šifrovaný a zcela volitelný."
"messageformat": "Nyní se můžete rozhodnout, zda chcete přenést historii chatů a médií za posledních 45 dní do nového stolního počítače. Přenos je koncově šifrovaný a zcela volitelný."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Slet alle data?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Slette alle data og beskeder fra denne version af Signal Desktop? Din Signal-konto og data på din telefon eller andre forbundne enheder vil ikke blive slettet."
},
"icu:deleteAllDataProgress": {
"messageformat": "Afbryder og sletter alle data…"
@ -5819,6 +5819,6 @@
"messageformat": "Vi har rettet en sjælden fejl, der forhindrede nogle chats i at blive åbnet korrekt, efter de blev valgt, så nu er Signal Desktop ikke helt blank, når du forsøger at huske, hvad dine venner sagde sagde."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Når du forbinder din primære Signal-enhed til en ny computer eller iPad, kan du tage din chathistorik og medierne for de sidste 45 dage med dig. Overførselsprocessen er end-til-end-krypteret og helt valgfri. Når det kommer til at træffe valget om, hvorvidt du vil lade fortiden være fortid eller ej, er valget dit."
"messageformat": "Når du forbinder din primære Signal-enhed til en ny computer, kan du overføre din chathistorik og medierne for de sidste 45 dage. Overførselsprocessen er end-til-end-krypteret og helt valgfri. Når det kommer til at træffe valget om, hvorvidt du vil lade fortiden være fortid eller ej, er det helt op til dig."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Alle Daten löschen?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Alle Daten und Nachrichten von dieser Version von Signal Desktop löschen? Dein Signal-Konto und die Daten auf deinem Telefon oder auf anderen gekoppelten Geräten werden nicht gelöscht."
},
"icu:deleteAllDataProgress": {
"messageformat": "Verbindung wird getrennt und alle Daten werden gelöscht …"
@ -1677,7 +1677,7 @@
"messageformat": "1 Std."
},
"icu:hoursAgo": {
"messageformat": "{hours,number}Std."
"messageformat": "{hours,number} Std."
},
"icu:minutesAgo": {
"messageformat": "{minutes,number} Min."
@ -2325,7 +2325,7 @@
"messageformat": "Sticker-Auswahl öffnen"
},
"icu:Keyboard--begin-recording-voice-note": {
"messageformat": "Sprachnachrichtsaufnahme beginnen"
"messageformat": "Aufnahme der Sprachnachricht beginnen"
},
"icu:Keyboard--default-message-action": {
"messageformat": "Standardaktion für ausgewählte Nachricht"
@ -4620,7 +4620,7 @@
"messageformat": "Link-Vorschauen erzeugen"
},
"icu:Preferences__link-previews--description": {
"messageformat": "Um diese Einstellung zu ändern, öffne die Signal-App auf deinem Mobilgerät und gehe dort zu »Einstellungen« »Chats«"
"messageformat": "Um diese Einstellung zu ändern, öffne die Signal-App auf deinem Mobilgerät und gehe dort zu »Einstellungen« > »Chats«"
},
"icu:Preferences__auto-convert-emoji--title": {
"messageformat": "Eingegebene Emoticons in Emojis umwandeln"
@ -4795,7 +4795,7 @@
"ignoreUnused": true
},
"icu:NSIS__retry-dialog--second-line": {
"messageformat": "Schließ es bitte manuell und klicke auf »Wiederholen«, um fortzufahren.",
"messageformat": "Schließe Signal bitte manuell und klicke auf »Wiederholen«, um fortzufahren.",
"ignoreUnused": true
},
"icu:NSIS__appRunning": {
@ -5819,6 +5819,6 @@
"messageformat": "Wir haben einen seltenen Fehler behoben, der dazu führte, dass einige Chats, sobald sie ausgewählt waren, nicht korrekt geöffnet wurden."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Wenn du jetzt das Gerät, auf dem du Signal am häufigsten nutzt, mit einem neuen Desktop oder iPad koppelst, kannst du deinen Chat-Verlauf und deine Medien der letzten 45 Tage mitnehmen. Der Übertragungsprozess ist Ende-zu Ende-verschlüsselt und natürlich optional. Jetzt kannst du also selbst entscheiden, ob du die Vergangenheit komplett hinter dir lassen willst."
"messageformat": "Wenn du jetzt dein primäres Signal-Gerät mit einem neuen Rechner koppelst, kannst du deinen gesamten Chat-Verlauf und die Medien der letzten 45 Tage mitnehmen. Der Übertragungsprozess ist Ende-zu Ende-verschlüsselt und natürlich optional. Jetzt kannst du also selbst entscheiden, ob du die Vergangenheit komplett hinter dir lassen willst."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Διαγραφή όλων των δεδομένων;"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Να διαγραφούν όλα τα δεδομένα και τα μηνύματα από αυτή την έκδοση Signal για υπολογιστή; Ο λογαριασμός σου στο Signal, τα δεδομένα στο τηλέφωνό σου ή σε άλλες συνδεδεμένες συσκευές δεν θα διαγραφούν."
},
"icu:deleteAllDataProgress": {
"messageformat": "Αποσύνδεση και διαγραφή όλων των δεδομένων..."
@ -5819,6 +5819,6 @@
"messageformat": "Διορθώσαμε ένα σπάνιο σφάλμα που εμπόδιζε ορισμένες συνομιλίες να ανοίξουν σωστά."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Τώρα μπορείς να επιλέξεις να μεταφέρεις το ιστορικό συνομιλιών σου και τα πολυμέσα των τελευταίων 45 ημερών σε μια νέα συνδεδεμένη συσκευή. Η διαδικασία μεταφοράς είναι κρυπτογραφημένη από άκρο σε άκρο και εντελώς προαιρετική."
"messageformat": "Τώρα μπορείς να επιλέξεις να μεταφέρεις το ιστορικό συνομιλιών σου και τα πολυμέσα των τελευταίων 45 ημερών σε νέο υπολογιστή. Η διαδικασία μεταφοράς είναι κρυπτογραφημένη από άκρο σε άκρο και εντελώς προαιρετική."
}
}

View File

@ -7733,7 +7733,7 @@
"description": "(Deleted 2025/01/29) Release notes for version 7.40"
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Now when you link your primary Signal device to a new Desktop or iPad, you can bring your chat history and your last 45 days of media with you. The transfer process is end-to-end encrypted, and completely optional. When it comes to making the choice about whether or not to leave the past behind, you're left to your own devices.",
"messageformat": "Now when you link your primary Signal device to a new Desktop, you can bring your chat history and your last 45 days of media with you. The transfer process is end-to-end encrypted, and completely optional. When it comes to making the choice about whether or not to leave the past behind, you're left to your own devices.",
"description": "Release notes for version 7.40"
}
}

View File

@ -75,13 +75,13 @@
"messageformat": "Se ha producido un error en la base de datos. Puedes copiar el error y ponerte en contacto con el equipo de asistencia de Signal para que te ayude a solucionar el problema. Si necesitas usar Signal de inmediato, puedes eliminar tus datos y reiniciar la aplicación.\n\nContacta con el equipo de asistencia en {link}"
},
"icu:deleteAndRestart": {
"messageformat": "Borrar los datos y reiniciar"
"messageformat": "Borrar datos y reiniciar"
},
"icu:databaseError__deleteDataConfirmation": {
"messageformat": "¿Eliminar permanentemente todos los datos?"
},
"icu:databaseError__deleteDataConfirmation__detail": {
"messageformat": "Todo tu historial de mensajes y archivos multimedia se eliminarán permanentemente de este dispositivo. Podrás utilizar Signal en este dispositivo después de volver a vincularlo. Esto no eliminará ningún dato de tu teléfono."
"messageformat": "Todo tu historial de mensajes y archivos multimedia se eliminarán de forma permanente de este dispositivo. Podrás usar Signal en este dispositivo después de volver a vincularlo. Esta acción no eliminará ningún dato de tu teléfono."
},
"icu:databaseError__startOldVersion": {
"messageformat": "La versión de tu base de datos no coincide con esta versión de Signal. Asegúrate de abrir la versión más reciente de Signal en tu equipo de escritorio."
@ -93,7 +93,7 @@
"messageformat": "No se puede acceder a la clave de cifrado de la base de datos porque el backend del almacén de claves de cifrado del SO ha cambiado de {previousBackend} a {currentBackend}. Esto puede ocurrir si el entorno de escritorio cambia, por ejemplo, de GNOME a KDE.\n\nVuelve al entorno de escritorio anterior o intenta ejecutar Signal con la marca de línea de comandos --password-store=\"{previousBackendFlag}\"."
},
"icu:mainMenuFile": {
"messageformat": "&Archivo"
"messageformat": "A&rchivo"
},
"icu:mainMenuCreateStickers": {
"messageformat": "Crear/subir paquete de stickers"
@ -105,7 +105,7 @@
"messageformat": "&Ver"
},
"icu:mainMenuWindow": {
"messageformat": "&Ventana"
"messageformat": "Ve&ntana"
},
"icu:mainMenuHelp": {
"messageformat": "&Ayuda"
@ -207,7 +207,7 @@
"messageformat": "No hay sugerencias"
},
"icu:avatarMenuViewArchive": {
"messageformat": "Ver archivo"
"messageformat": "Ver archivados"
},
"icu:loading": {
"messageformat": "Cargando…"
@ -216,7 +216,7 @@
"messageformat": "Optimizando aplicación…"
},
"icu:migratingToSQLCipher": {
"messageformat": "Optimizando mensajes… {status} completados."
"messageformat": "Optimizando mensajes… {status} completado."
},
"icu:archivedConversations": {
"messageformat": "Chats archivados"
@ -234,7 +234,7 @@
"messageformat": "Corregir ahora"
},
"icu:LeftPane--corrupted-username-link--text": {
"messageformat": "Hubo un problema con el código QR y el enlace de tu alias; ya no es válido. Crea un nuevo enlace para compartir."
"messageformat": "Ha habido un problema con el código QR y el enlace de tu alias, por lo que ya no son válidos. Crea un nuevo enlace para compartir."
},
"icu:LeftPane--corrupted-username-link--action-text": {
"messageformat": "Corregir ahora"
@ -273,7 +273,7 @@
"messageformat": "Ocultar pestañas"
},
"icu:NavTabs__ItemIconLabel--HasError": {
"messageformat": "Ha habido un error"
"messageformat": "Se ha producido un error"
},
"icu:NavTabs__ItemIconLabel--UnreadCount": {
"messageformat": "{count,number} sin leer"
@ -303,7 +303,7 @@
"messageformat": "Atrás"
},
"icu:archiveHelperText": {
"messageformat": "Los chats archivados regresan a la lista principal si recibes mensajes nuevos."
"messageformat": "Los chats archivados se mostrarán en la lista principal si recibes mensajes nuevos."
},
"icu:noArchivedConversations": {
"messageformat": "No hay chats archivados."
@ -333,7 +333,7 @@
"messageformat": "Eliminar chat"
},
"icu:ContactListItem__menu": {
"messageformat": "Administrar Contactos"
"messageformat": "Gestionar contacto"
},
"icu:ContactListItem__menu__message": {
"messageformat": "Mensaje"
@ -363,7 +363,7 @@
"messageformat": "No se ha podido eliminar a {title}"
},
"icu:ContactListItem__remove-system--body": {
"messageformat": "Esta persona está entre los contactos guardados de tu dispositivo. Elimina a esta persona de los Contactos de tu dispositivo móvil y vuelve a intentarlo."
"messageformat": "Esta persona en la lista de contactos guardados en tu dispositivo. Elimínala de los contactos de tu dispositivo móvil y vuelve a intentarlo."
},
"icu:moveConversationToInbox": {
"messageformat": "Desarchivar"
@ -396,7 +396,7 @@
"messageformat": "Este grupo no es válido. Crea un nuevo grupo."
},
"icu:scrollDown": {
"messageformat": "Desplazarse al final del chat"
"messageformat": "Ir al final del chat"
},
"icu:messagesBelow": {
"messageformat": "Nuevos mensajes abajo"
@ -600,7 +600,7 @@
"messageformat": "No se pueden adjuntar más archivos a este mensaje."
},
"icu:fileSizeWarning": {
"messageformat": "Lo sentimos, el archivo seleccionado excede las restricciones de tamaño. {limit,number} {units}"
"messageformat": "El archivo seleccionado excede las restricciones de tamaño del mensaje. {limit,number} {units}"
},
"icu:unableToLoadAttachment": {
"messageformat": "No se ha podido cargar el archivo seleccionado."
@ -693,13 +693,13 @@
"messageformat": "Borrar búsqueda"
},
"icu:searchIn": {
"messageformat": "Buscar en chat"
"messageformat": "Buscar en el chat"
},
"icu:noSearchResults": {
"messageformat": "No se han encontrado resultados para \"{searchTerm}\""
"messageformat": "No hay ningún resultado para \"{searchTerm}\""
},
"icu:noSearchResultsWithUnreadFilter": {
"messageformat": "No se han encontrado resultados para \"{searchTerm}\" en chats no leídos"
"messageformat": "No hay ningún resultado para \"{searchTerm}\" en chats no leídos"
},
"icu:noSearchResultsOnlyUnreadFilter": {
"messageformat": "No hay chats sin leer"
@ -708,7 +708,7 @@
"messageformat": "Tus contactos con solo SMS/MMS no están disponibles en la aplicación de escritorio."
},
"icu:noSearchResultsInConversation": {
"messageformat": "No se encontró «{searchTerm}» en «{conversationName}»."
"messageformat": "No hay ningún resultado para \"{searchTerm}\" en {conversationName}"
},
"icu:conversationsUnreadHeader": {
"messageformat": "Filtrado por no leídos"
@ -747,7 +747,7 @@
"messageformat": "las novedades"
},
"icu:typingAlt": {
"messageformat": "Animación de tecleo para este chat"
"messageformat": "Indicador de escritura para este chat"
},
"icu:contactInAddressBook": {
"messageformat": "Esta persona está en tus contactos."
@ -819,7 +819,7 @@
"messageformat": "Mostrar en la carpeta"
},
"icu:attachmentStillDownloading": {
"messageformat": "{count, plural, one {No se puede guardar el archivo adjunto, ya que aún no ha terminado de descargarse} other {No se pueden guardar los {count,number} archivos adjuntos, ya que aún no han terminado de descargarse}}"
"messageformat": "{count, plural, one {No se puede guardar el archivo adjunto porque aún no ha terminado de descargarse} other {No se pueden guardar los {count,number} archivos adjuntos porque aún no han terminado de descargarse}}"
},
"icu:you": {
"messageformat": "Tú"
@ -912,13 +912,13 @@
"messageformat": "De"
},
"icu:searchResultHeader--sender-to-group": {
"messageformat": "{sender} a «{receiverGroup}»"
"messageformat": "{sender} para \"{receiverGroup}\""
},
"icu:searchResultHeader--sender-to-you": {
"messageformat": "De {sender} para ti"
},
"icu:searchResultHeader--you-to-group": {
"messageformat": "De ti para {receiverGroup}"
"messageformat": "De ti para \"{receiverGroup}\""
},
"icu:searchResultHeader--you-to-receiver": {
"messageformat": "De ti para {receiverContact}"
@ -1035,7 +1035,7 @@
"messageformat": "Abandonar grupo"
},
"icu:ConversationHeader__LeaveGroupConfirmation__title": {
"messageformat": "¿De verdad quieres abandonar el grupo?"
"messageformat": "¿Seguro que quieres abandonar el grupo?"
},
"icu:ConversationHeader__LeaveGroupConfirmation__description": {
"messageformat": "Ya no podrás enviar ni recibir mensajes en este grupo."
@ -1044,10 +1044,10 @@
"messageformat": "Abandonar"
},
"icu:ConversationHeader__CannotLeaveGroupBecauseYouAreLastAdminAlert__description": {
"messageformat": "Antes de abandonar, selecciona un@ nuev@ admin para este grupo."
"messageformat": "Antes de abandonar el grupo, designa a otra persona como admin."
},
"icu:sessionEnded": {
"messageformat": "Sesión segura reiniciada"
"messageformat": "Sesión segura restablecida"
},
"icu:ChatRefresh--notification": {
"messageformat": "Sesión de chat reiniciada"
@ -1086,10 +1086,10 @@
"messageformat": "Alguien de tus contactos ha comenzado a usar Signal"
},
"icu:ConversationMerge--notification": {
"messageformat": "{obsoleteConversationTitle} y {conversationTitle} son la misma cuenta. Tu historial de mensajes para ambos chats está aquí."
"messageformat": "{obsoleteConversationTitle} y {conversationTitle} corresponden a la misma cuenta. Tu historial de mensajes de ambos chats está aquí."
},
"icu:ConversationMerge--notification--with-e164": {
"messageformat": "Tu historial de mensajes con {conversationTitle} y su número {obsoleteConversationNumber} se han fusionado."
"messageformat": "Tu historial de mensajes con {conversationTitle} y su número {obsoleteConversationNumber} se ha fusionado."
},
"icu:ConversationMerge--notification--no-title": {
"messageformat": "Tu historial de mensajes con {conversationTitle} se ha fusionado con otro chat que tenías con esa misma persona."
@ -1098,10 +1098,10 @@
"messageformat": "Más información"
},
"icu:ConversationMerge--explainer-dialog--line-1": {
"messageformat": "Después de enviar un mensaje a {obsoleteConversationTitle}, supiste que este número pertenece a {conversationTitle}. Su número de teléfono es privado."
"messageformat": "Has enviado un mensaje a {obsoleteConversationTitle} y ahora sabes que este número pertenece a {conversationTitle}. Su número de teléfono es privado."
},
"icu:ConversationMerge--explainer-dialog--line-2": {
"messageformat": "Tu historial de mensajes para ambos chats se ha combinado aquí."
"messageformat": "Tu historial de mensajes de ambos chats se ha fusionado aquí."
},
"icu:PhoneNumberDiscovery--notification--withSharedGroup": {
"messageformat": "{phoneNumber} pertenece a {conversationTitle}. Ambos son miembros de {sharedGroup}."
@ -1227,7 +1227,7 @@
"messageformat": "Sincronizando contactos y grupos"
},
"icu:initialSync__subtitle": {
"messageformat": "Aviso: Tu historial de chat no se sincronizará con este dispositivo."
"messageformat": "Nota: Tu historial de chat no se sincronizará con este dispositivo"
},
"icu:installConnectionFailed": {
"messageformat": "No se ha podido conectar con el servidor."
@ -1563,7 +1563,7 @@
"messageformat": "Revisar la ortografía al escribir un mensaje"
},
"icu:textFormattingDescription": {
"messageformat": "Mostrar ventana emergente de formato de texto al seleccionar texto"
"messageformat": "Muestra ventana emergente de formato de texto al seleccionar texto"
},
"icu:spellCheckWillBeEnabled": {
"messageformat": "El corrector ortográfico se activará la próxima vez que se inicie Signal."
@ -1581,10 +1581,10 @@
"messageformat": "Abrir al iniciar sesión en este dispositivo"
},
"icu:clearDataHeader": {
"messageformat": "Eliminar datos en la aplicación"
"messageformat": "Eliminar datos de la app"
},
"icu:clearDataExplanation": {
"messageformat": "Esto eliminará todos los datos de la aplicación, incluidos los mensajes y la información de la cuenta."
"messageformat": "Se eliminarán todos los datos de la aplicación, incluidos los mensajes y la información de la cuenta."
},
"icu:clearDataButton": {
"messageformat": "Eliminar datos"
@ -1593,7 +1593,7 @@
"messageformat": "¿Eliminar todos los datos?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "¿Eliminar todos los datos y mensajes de esta versión de Signal Desktop? No se eliminará tu cuenta de Signal ni los datos de tu teléfono u otros dispositivos vinculados."
},
"icu:deleteAllDataProgress": {
"messageformat": "Desconectando Signal y eliminando datos…"
@ -1632,13 +1632,13 @@
"messageformat": "No eliminado"
},
"icu:editFailed": {
"messageformat": "Falló al editar. Haz clic para más detalles"
"messageformat": "No se ha podido editar el mensaje. Haz clic para ver más."
},
"icu:sendPaused": {
"messageformat": "Envío pausado"
},
"icu:partiallySent": {
"messageformat": "Enviado parcialmente. Haz clic para reintentar."
"messageformat": "Enviado parcialmente. Haz clic para ver más."
},
"icu:partiallyDeleted": {
"messageformat": "Eliminado parcialmente. Haz clic para reintentar."
@ -1737,7 +1737,7 @@
"messageformat": "Duración de los mensajes: {time}"
},
"icu:audioNotificationDescription": {
"messageformat": "Sonidos de las notificaciones push"
"messageformat": "Sonido de las notificaciones push"
},
"icu:callRingtoneNotificationDescription": {
"messageformat": "Emitir sonido de llamada"
@ -2010,16 +2010,16 @@
"messageformat": "Se ha eliminado este mensaje."
},
"icu:message--attachmentTooBig--one": {
"messageformat": "Archivo adjunto demasiado grande para mostrarlo."
"messageformat": "El archivo es demasiado grande para visualizarlo."
},
"icu:message--attachmentTooBig--multiple": {
"messageformat": "Algunos archivos adjuntos son demasiado grandes para mostrarlos."
"messageformat": "Algunos archivos son demasiado grandes para visualizarlos."
},
"icu:message--call-link-description": {
"messageformat": "Usa este enlace para unirte a una llamada de Signal"
},
"icu:donation--missing": {
"messageformat": "Fallo al recuperar los detalles de la donación"
"messageformat": "No se han podido recuperar los detalles de la donación"
},
"icu:message--donation--unopened--incoming": {
"messageformat": "Abre este mensaje en tu dispositivo móvil"
@ -2028,13 +2028,13 @@
"messageformat": "Abre este mensaje en tu dispositivo móvil para ver tu donación"
},
"icu:message--donation--unopened--label": {
"messageformat": "{sender} ha donado a Signal en tu nombre"
"messageformat": "{sender} ha hecho una donación a Signal en tu nombre"
},
"icu:message--donation--unopened--toast--incoming": {
"messageformat": "Comprueba tu teléfono para abrir la donación"
"messageformat": "Ve a Signal en tu teléfono para abrir esta donación"
},
"icu:message--donation--unopened--toast--outgoing": {
"messageformat": "Comprueba tu teléfono para ver tu donación"
"messageformat": "Ve a Signal en tu teléfono para ver tu donación"
},
"icu:message--donation--preview--unopened": {
"messageformat": "{sender} ha hecho una donación en tu nombre"
@ -2043,7 +2043,7 @@
"messageformat": "Has canjeado una donación"
},
"icu:message--donation--preview--sent": {
"messageformat": "Has hecho una donación por {recipient}"
"messageformat": "Has hecho una donación en nombre de {recipient}"
},
"icu:message--donation": {
"messageformat": "Donación"
@ -2064,7 +2064,7 @@
"messageformat": "Caducada"
},
"icu:message--donation--view": {
"messageformat": "Ver más"
"messageformat": "Ver"
},
"icu:message--donation--redeemed": {
"messageformat": "Canjeada"
@ -2079,7 +2079,7 @@
"messageformat": "¡Gracias por tu apoyo!"
},
"icu:modal--donation--description": {
"messageformat": "Has hecho una donación a Signal en nombre de {name}. Tendrá la opción de mostrar su apoyo en su perfil."
"messageformat": "Has hecho una donación a Signal en nombre de {name}. Podrá añadir la insignia a su perfil para mostrar que apoya a Signal."
},
"icu:stickers--toast--InstallFailed": {
"messageformat": "No se ha podido instalar el paquete de stickers"
@ -2157,7 +2157,7 @@
"messageformat": "Aquí se mostrarán los stickers usados recientemente."
},
"icu:stickers__StickerPicker__recent": {
"messageformat": "Más usados"
"messageformat": "Recientes"
},
"icu:stickers__StickerPicker__featured": {
"messageformat": "Destacados"
@ -2232,13 +2232,13 @@
"messageformat": "El mensaje es demasiado largo para mostrarlo completo."
},
"icu:Message--unsupported-message": {
"messageformat": "{contact} te ha enviado un mensaje que no se puede procesar ni mostrar, ya que usa una función nueva de Signal."
"messageformat": "{contact} te ha enviado un mensaje que no se puede procesar ni mostrar porque usa una función nueva de Signal."
},
"icu:Message--unsupported-message-ask-to-resend": {
"messageformat": "Puedes pedirle a {contact} que te vuelva a enviar el mensaje ahora que ya tienes una versión actualizada de Signal."
},
"icu:Message--from-me-unsupported-message": {
"messageformat": "Has enviado un mensaje desde uno de tus dispositivos que no se puede procesar ni mostrar, ya que usa una función nueva de Signal."
"messageformat": "Has enviado un mensaje desde uno de tus dispositivos que no se puede procesar ni mostrar porque usa una función nueva de Signal."
},
"icu:Message--from-me-unsupported-message-ask-to-resend": {
"messageformat": "Si recibes más mensajes como este, se podrán sincronizar ahora que usas una versión actualizada de Signal."
@ -2256,7 +2256,7 @@
"messageformat": "Ya has visto este mensaje."
},
"icu:Message--tap-to-view--outgoing--expired-toast": {
"messageformat": "Los mensajes para ver solo una vez no se almacenan en tu historial de chat."
"messageformat": "Los mensajes de visualización única no se almacenan en tu historial de chat."
},
"icu:Message--tap-to-view--incoming": {
"messageformat": "Ver foto"
@ -2274,16 +2274,16 @@
"messageformat": "(borrador)"
},
"icu:Keyboard--focus-most-recent-message": {
"messageformat": "Centrarse en el último mensaje no leído o el más antiguo"
"messageformat": "Centrarse en el último mensaje no leído o el más reciente"
},
"icu:Keyboard--navigate-by-section": {
"messageformat": "Navegar por sección"
},
"icu:Keyboard--previous-conversation": {
"messageformat": "Chat previo"
"messageformat": "Chat anterior"
},
"icu:Keyboard--next-conversation": {
"messageformat": "Siguiente chat"
"messageformat": "Chat siguiente"
},
"icu:Keyboard--previous-unread-conversation": {
"messageformat": "Chat anterior con mensajes no leídos"
@ -2295,7 +2295,7 @@
"messageformat": "Ajustes"
},
"icu:Keyboard--open-conversation-menu": {
"messageformat": "Abrir el menú de chat"
"messageformat": "Abrir el menú del chat"
},
"icu:Keyboard--new-conversation": {
"messageformat": "Iniciar nuevo chat"
@ -2367,7 +2367,7 @@
"messageformat": "Eliminar todos los archivos adjuntos en borrador"
},
"icu:Keyboard--conversation-by-index": {
"messageformat": "Saltar al chat"
"messageformat": "Ir al chat"
},
"icu:Keyboard--edit-last-message": {
"messageformat": "Editar el mensaje anterior"
@ -2406,19 +2406,19 @@
"messageformat": "Campo de escritura"
},
"icu:Keyboard--composer--bold": {
"messageformat": "Poner texto seleccionado en negrita"
"messageformat": "Aplicar negrita al texto seleccionado"
},
"icu:Keyboard--composer--italic": {
"messageformat": "Poner texto seleccionado en cursiva"
"messageformat": "Aplicar cursiva al texto seleccionado"
},
"icu:Keyboard--composer--strikethrough": {
"messageformat": "Tachar texto seleccionado"
},
"icu:Keyboard--composer--monospace": {
"messageformat": "Poner texto seleccionado como monoespaciado"
"messageformat": "Aplicar monoespaciado al texto seleccionado"
},
"icu:Keyboard--composer--spoiler": {
"messageformat": "Marcar texto seleccionado como spoiler"
"messageformat": "Aplicar spoiler al texto seleccionado"
},
"icu:Keyboard--open-context-menu": {
"messageformat": "Abrir menú contextual para el mensaje seleccionado"
@ -2484,7 +2484,7 @@
"messageformat": "Eliminar archivo adjunto"
},
"icu:backToInbox": {
"messageformat": "Volver al buzón de entrada"
"messageformat": "Regresar a la lista de chats"
},
"icu:conversationArchived": {
"messageformat": "Chat archivado"
@ -2493,7 +2493,7 @@
"messageformat": "Deshacer"
},
"icu:conversationReturnedToInbox": {
"messageformat": "Chat devuelto al buzón de entrada"
"messageformat": "Chat regresado a la lista principal de chats"
},
"icu:conversationMarkedUnread": {
"messageformat": "Chat marcado como no leído"
@ -2835,7 +2835,7 @@
"messageformat": "{overflowCount, plural, one {{name}, {otherName} y {overflowCount,number} más han levantado la mano.} other {{name}, {otherName} y {overflowCount,number} más han levantado la mano.}}"
},
"icu:CallControls__RaiseHands--open-queue": {
"messageformat": "Abrir cola"
"messageformat": "Abrir lista"
},
"icu:CallControls__RaiseHands--lower": {
"messageformat": "Bajar"
@ -2880,13 +2880,13 @@
"messageformat": "Cambiar la vista"
},
"icu:calling__view_mode--paginated": {
"messageformat": "Vista en cuadrícula"
"messageformat": "Vista de galería"
},
"icu:calling__view_mode--overflow": {
"messageformat": "Vista con barra lateral"
},
"icu:calling__view_mode--speaker": {
"messageformat": "Ver solo al orador"
"messageformat": "Vista de orador"
},
"icu:calling__view_mode--updated": {
"messageformat": "Vista actualizada"
@ -3006,7 +3006,7 @@
"messageformat": "No se puede editar el mensaje"
},
"icu:MessageMaxEditsModal__Description": {
"messageformat": "{max, plural, one {Solo se puede hacer {max,number} cambio en este mensaje de texto.} other {Solo se pueden hacer {max,number} cambios en este mensaje de texto.}}"
"messageformat": "{max, plural, one {Solo se puede hacer {max,number} cambio en este mensaje.} other {Solo se pueden hacer {max,number} cambios en este mensaje.}}"
},
"icu:unknown-sgnl-link": {
"messageformat": "El enlace sgnl:// no es válido."
@ -3345,10 +3345,10 @@
"messageformat": "Una persona ha rechazado la invitación al grupo."
},
"icu:GroupV2--pending-remove--revoke--one--other": {
"messageformat": "{memberName} ha retirado la invitación enviada a una persona."
"messageformat": "{memberName} ha retirado la invitación al grupo enviada a una persona."
},
"icu:GroupV2--pending-remove--revoke--one--you": {
"messageformat": "Has retirado la invitación enviada a una persona."
"messageformat": "Has retirado la invitación al grupo enviada a una persona."
},
"icu:GroupV2--pending-remove--revoke-own--to-you": {
"messageformat": "{inviterName} ha retirado tu invitación al grupo."
@ -3390,10 +3390,10 @@
"messageformat": "{count, plural, one {{adminName} ha retirado la invitación al grupo que {memberName} envió a {count,number} persona.} other {{adminName} ha retirado las invitaciones al grupo que {memberName} envió a {count,number} personas.}}"
},
"icu:GroupV2--pending-remove--revoke-invite-from--many--you": {
"messageformat": "{count, plural, one {Has retirado la invitación al grupo enviada por {memberName} a {count,number} persona.} other {Has retirado las invitaciones al grupo enviadas por {memberName} a {count,number} personas.}}"
"messageformat": "{count, plural, one {Has retirado la invitación al grupo que {memberName} envió a {count,number} persona.} other {Has retirado las invitaciones al grupo que {memberName} envió a {count,number} personas.}}"
},
"icu:GroupV2--pending-remove--revoke-invite-from--many--unknown": {
"messageformat": "{count, plural, one {Alguien con permisos de admin ha retirado la invitación al grupo enviada por {memberName} a {count,number} persona.} other {Alguien con permisos de admin ha retirado las invitaciones al grupo enviadas por {memberName} a {count,number} personas.}}"
"messageformat": "{count, plural, one {Alguien con permisos de admin ha retirado la invitación al grupo que {memberName} envió a {count,number} persona.} other {Alguien con permisos de admin ha retirado las invitaciones al grupo que {memberName} envió a {count,number} personas.}}"
},
"icu:GroupV2--pending-remove--revoke-invite-from-you--many--other": {
"messageformat": "{count, plural, one {{adminName} ha retirado la invitación al grupo que enviaste a {count,number} persona.} other {{adminName} ha retirado las invitaciones al grupo que enviaste a {count,number} personas.}}"
@ -3429,7 +3429,7 @@
"messageformat": "Se ha rechazado la solicitud de {joinerName} para unirse al grupo."
},
"icu:GroupV2--admin-approval-bounce--pluralized": {
"messageformat": "{numberOfRequests, plural, one {{joinerName} ha solicitado y cancelado su solicitud para unirse al grupo mediante enlace} other {{joinerName} ha solicitado y cancelado {numberOfRequests,number} veces unirse al grupo mediante enlace}}"
"messageformat": "{numberOfRequests, plural, one {{joinerName} ha enviado y cancelado una solicitud para unirse al grupo mediante enlace} other {{joinerName} ha enviado y cancelado {numberOfRequests,number} solicitudes para unirse al grupo mediante enlace}}"
},
"icu:GroupV2--group-link-add--disabled--you": {
"messageformat": "Has activado el enlace para unirse al grupo sin aprobación de admin."
@ -3504,7 +3504,7 @@
"messageformat": "Los ajustes del grupo han cambiado para que cualquiera pueda enviar mensajes."
},
"icu:GroupV2--summary": {
"messageformat": "Los miembros o la configuración de este grupo han cambiado."
"messageformat": "Han cambiado los participantes o los ajustes de este grupo."
},
"icu:GroupV1--Migration--disabled--link": {
"messageformat": "Actualiza este grupo para activar funciones como @menciones y admins. Las personas que aún no compartan su nombre y foto de perfil con este grupo recibirán una invitación para unirse. <learnMoreLink>Más información.</learnMoreLink>"
@ -3546,22 +3546,22 @@
"messageformat": "{count, plural, one {{count,number} persona tiene que aceptar la invitación para unirse al grupo de nuevo y no recibirá ningún mensaje del grupo hasta que la acepte.} other {{count,number} personas tienen que aceptar la invitación para unirse al grupo de nuevo y no recibirán ningún mensaje del grupo hasta que la acepten.}}"
},
"icu:GroupV1--Migration--info--removed--before--many": {
"messageformat": "Se eliminará a estas personas del grupo, ya que no pueden unirse a los nuevos grupos:"
"messageformat": "Se eliminará a estas personas del grupo porque no pueden unirse a los nuevos grupos:"
},
"icu:GroupV1--Migration--info--removed--before--one": {
"messageformat": "Se eliminará a esta persona del grupo, ya que no puede unirse a los nuevos grupos:"
"messageformat": "Se eliminará a esta persona del grupo porque no puede unirse a los nuevos grupos:"
},
"icu:GroupV1--Migration--info--removed--before--count": {
"messageformat": "{count, plural, one {Se eliminará a {count,number} persona del grupo, ya que no puede unirse a los nuevos grupos:} other {Se eliminará a {count,number} personas del grupo, ya que no pueden unirse a los nuevos grupos:}}"
"messageformat": "{count, plural, one {Se eliminará a {count,number} persona del grupo porque no puede unirse a los nuevos grupos:} other {Se eliminará a {count,number} personas del grupo porque no pueden unirse a los nuevos grupos:}}"
},
"icu:GroupV1--Migration--info--removed--after--many": {
"messageformat": "Se ha eliminado a estas personas del grupo, ya que no han podido unirse a los nuevos grupos:"
"messageformat": "Se ha eliminado a estas personas del grupo porque no han podido unirse a los nuevos grupos:"
},
"icu:GroupV1--Migration--info--removed--after--one": {
"messageformat": "Se ha eliminado a esta persona del grupo, ya que no ha podido unirse a los nuevos grupos:"
"messageformat": "Se ha eliminado a esta persona del grupo porque no ha podido unirse a los nuevos grupos:"
},
"icu:GroupV1--Migration--info--removed--after--count": {
"messageformat": "{count, plural, one {Se ha eliminado a {count,number} persona del grupo, ya que no ha podido unirse a los nuevos grupos.} other {Se ha eliminado a {count,number} personas del grupo, ya que no han podido unirse a los nuevos grupos.}}"
"messageformat": "{count, plural, one {Se ha eliminado a {count,number} persona del grupo porque no ha podido unirse a los nuevos grupos.} other {Se ha eliminado a {count,number} personas del grupo porque no han podido unirse a los nuevos grupos.}}"
},
"icu:GroupV1--Migration--invited--you": {
"messageformat": "No te han podido añadir al nuevo grupo, pero te han invitado a unirte."
@ -3726,7 +3726,7 @@
"messageformat": "Descartar mensaje"
},
"icu:CompositionArea__edit-action--send": {
"messageformat": "Envía el mensaje editado"
"messageformat": "Enviar mensaje editado"
},
"icu:CompositionInput__editing-message": {
"messageformat": "Editar mensaje"
@ -3780,7 +3780,7 @@
"messageformat": "Si se activa esta función, los mensajes enviados y recibidos en este grupo desaparecerán tras ser vistos."
},
"icu:ConversationDetails--disappearing-messages-info--direct": {
"messageformat": "Si se activa esta función, los mensajes enviados y recibidos en este chat individual desaparecerán tras ser vistos."
"messageformat": "Si activas esta función, los mensajes enviados y recibidos en este chat individual desaparecerán tras ser vistos."
},
"icu:ConversationDetails--nickname-label": {
"messageformat": "Apodo"
@ -4095,7 +4095,7 @@
"messageformat": "Deseleccionar contacto {name}"
},
"icu:cannotSelectContact": {
"messageformat": "No se puede seleccionar contacto {name}"
"messageformat": "No se puede seleccionar el contacto {name}"
},
"icu:alreadyAMember": {
"messageformat": "Ya forma parte del grupo"
@ -4161,13 +4161,13 @@
"messageformat": "Acerca de las solicitudes de mensaje"
},
"icu:ContactSpoofing__same-name--link": {
"messageformat": "Revisa cuidadosamente las solicitudes. Signal ha encontrado otro contacto con el mismo nombre. <reviewRequestLink>Revisar solicitud</reviewRequestLink>"
"messageformat": "Revisa detenidamente las solicitudes. Signal ha encontrado otro contacto con el mismo nombre. <reviewRequestLink>Revisar solicitud</reviewRequestLink>"
},
"icu:ContactSpoofing__same-name-in-group--link": {
"messageformat": "{count, plural, one {{count,number} participante usa el mismo nombre. <reviewRequestLink>Revisar participantes</reviewRequestLink>} other {{count,number} participantes usan el mismo nombre. <reviewRequestLink>Revisar participantes</reviewRequestLink>}}"
"messageformat": "{count, plural, one {{count,number} participante tiene el mismo nombre. <reviewRequestLink>Revisar participantes</reviewRequestLink>} other {{count,number} participantes tienen el mismo nombre. <reviewRequestLink>Revisar participantes</reviewRequestLink>}}"
},
"icu:ContactSpoofing__same-names-in-group--link": {
"messageformat": "{count, plural, one {Se encontró {count,number} conflicto de nombre en este grupo. <reviewRequestLink>Revisar participantes</reviewRequestLink>} other {Se encontraron {count,number} conflictos de nombre en este grupo. <reviewRequestLink>Revisar participantes</reviewRequestLink>}}"
"messageformat": "{count, plural, one {Se ha encontrado {count,number} conflicto de nombre en este grupo. <reviewRequestLink>Revisar participantes</reviewRequestLink>} other {Se han encontrado {count,number} conflictos de nombre en este grupo. <reviewRequestLink>Revisar participantes</reviewRequestLink>}}"
},
"icu:ContactSpoofingReviewDialog__title": {
"messageformat": "Revisar solicitud"
@ -4185,10 +4185,10 @@
"messageformat": "Revisar participantes"
},
"icu:ContactSpoofingReviewDialog__group__description": {
"messageformat": "{count, plural, one {{count,number} participante del grupo usa el mismo nombre. Revisa la lista de participantes a continuación y selecciona la opción que desees.} other {{count,number} participantes del grupo usan el mismo nombre. Revisa la lista de participantes a continuación y selecciona la opción que desees.}}"
"messageformat": "{count, plural, one {{count,number} participante del grupo tiene el mismo nombre. Revisa la lista de participantes a continuación y selecciona la opción que desees.} other {{count,number} participantes del grupo tienen el mismo nombre. Revisa la lista de participantes a continuación y selecciona la opción que desees.}}"
},
"icu:ContactSpoofingReviewDialog__group__multiple-conflicts__description": {
"messageformat": "{count, plural, one {Hemos encontrado {count,number} conflicto de nombre en este grupo. Revisa la lista de participantes a continuación y selecciona la opción que desees.} other {Hemos encontrado {count,number} conflictos de nombre en este grupo. Revisa la lista de participantes a continuación y selecciona la opción que desees.}}"
"messageformat": "{count, plural, one {Se ha encontrado {count,number} conflicto de nombre en este grupo. Revisa la lista de participantes a continuación y selecciona la opción que desees.} other {Se han encontrado {count,number} conflictos de nombre en este grupo. Revisa la lista de participantes a continuación y selecciona la opción que desees.}}"
},
"icu:ContactSpoofingReviewDialog__group__members__no-shared-groups": {
"messageformat": "No tienes otros grupos en común"
@ -4350,10 +4350,10 @@
"messageformat": "La duración de los mensajes temporales será de {timeValue} cuando inicies un chat con alguien."
},
"icu:ContactRemovedNotification__text": {
"messageformat": "Has eliminado a esta persona, envíale un mensaje de nuevo y se la volverá a agregar a tu lista."
"messageformat": "Has eliminado a esta persona, envíale un mensaje de nuevo y se la volverá a añadir a tu lista."
},
"icu:ErrorBoundaryNotification__text": {
"messageformat": "No se puede mostrar el mensaje. Haz clic para enviar un registro de depuración."
"messageformat": "No se ha podido mostrar el mensaje. Haz clic para enviar un registro de depuración."
},
"icu:GroupDescription__read-more": {
"messageformat": "leer más"
@ -4422,7 +4422,7 @@
"messageformat": "Código QR o enlace"
},
"icu:ProfileEditor__username__error-icon": {
"messageformat": "El alias necesita restablecerse"
"messageformat": "Es necesario restablecer el alias"
},
"icu:ProfileEditor__username-link__error-icon": {
"messageformat": "Es necesario restablecer el enlace del alias"
@ -4467,7 +4467,7 @@
"messageformat": "No se ha podido guardar tu alias. Comprueba tu conexión e inténtalo de nuevo."
},
"icu:ProfileEditor--username--reservation-gone": {
"messageformat": "{username} ya no está disponible. Se asignará un nuevo conjunto de dígitos para tu alias. Intenta guardarlo nuevamente."
"messageformat": "{username} ya no está disponible. Se te asignará un nuevo conjunto de dígitos para tu alias. Intenta guardarlo de nuevo."
},
"icu:ProfileEditor--username--delete-general-error": {
"messageformat": "No se ha podido eliminar tu alias. Comprueba tu conexión e inténtalo de nuevo."
@ -4662,7 +4662,7 @@
"messageformat": "Tu número de teléfono no será visible para nadie a menos que lo tenga guardado en los contactos de su teléfono."
},
"icu:Preferences__pnp__sharing--description--nobody--not-discoverable": {
"messageformat": "Tu número de teléfono ya no es visible para nadie."
"messageformat": "Tu número de teléfono no será visible para nadie."
},
"icu:Preferences__pnp--page-title": {
"messageformat": "Número de teléfono"
@ -4740,13 +4740,13 @@
"messageformat": "Buscar idiomas"
},
"icu:Preferences__Language__NoResults": {
"messageformat": "No se encontraron resultados para «{searchTerm}»"
"messageformat": "No hay ningún resultado para \"{searchTerm}\""
},
"icu:Preferences__LanguageModal__Set": {
"messageformat": "Definir"
},
"icu:Preferences__LanguageModal__Restart__Title": {
"messageformat": "Reiniciar Signal para aplicar cambios"
"messageformat": "Reinicia Signal para aplicar los cambios"
},
"icu:Preferences__LanguageModal__Restart__Description": {
"messageformat": "Para cambiar el idioma, la app debe reiniciarse."
@ -4935,7 +4935,7 @@
"messageformat": "¿Eliminar esta historia? También se eliminará para quien la haya recibido."
},
"icu:payment-event-notification-message-you-label": {
"messageformat": "Has iniciado un pago a {receiver}"
"messageformat": "Has iniciado un pago para {receiver}"
},
"icu:payment-event-notification-message-you-label-without-receiver": {
"messageformat": "Has iniciado un pago"
@ -4944,10 +4944,10 @@
"messageformat": "{sender} ha iniciado un pago para ti"
},
"icu:payment-event-activation-request-label": {
"messageformat": "{sender} quiere que actives Pagos. Envía pagos solamente a las personas en las que confíes. Para activar Pagos, abre Signal en tu dispositivo móvil y ve a Ajustes > Pagos."
"messageformat": "{sender} quiere que actives Pagos. Envía pagos solo a personas de confianza. Para activar Pagos, abre Signal en tu dispositivo móvil y ve a Ajustes > Pagos."
},
"icu:payment-event-activation-request-you-label": {
"messageformat": "Has enviado una solicitud a {receiver} para que active Pagos."
"messageformat": "Has enviado una solicitud a {receiver} para que active Pagos."
},
"icu:payment-event-activation-request-you-label-without-receiver": {
"messageformat": "Has enviado una solicitud para activar Pagos."
@ -5076,7 +5076,7 @@
"messageformat": "No se ha podido enviar esta historia a algunas personas. Comprueba tu conexión e inténtalo de nuevo."
},
"icu:StoriesSettings__title": {
"messageformat": "Privacidad de las historias"
"messageformat": "Privacidad de mis historias"
},
"icu:StoriesSettings__description": {
"messageformat": "Las historias desaparecerán automáticamente después de 24 horas. Elige quién puede ver tus historias o crea historias nuevas para compartir con personas o grupos específicos."
@ -5148,10 +5148,10 @@
"messageformat": "Compartir solo con…"
},
"icu:StoriesSettings__mine__disclaimer--link": {
"messageformat": "Elige quién puede ver tu historia. Los cambios no afectarán a las historias que ya hayas compartido.<learnMoreLink>Más información.</learnMoreLink>"
"messageformat": "Elige quién puede ver tu historia. Los cambios no afectarán a las historias que ya hayas compartido. <learnMoreLink>Más información.</learnMoreLink>"
},
"icu:StoriesSettings__context-menu": {
"messageformat": "Privacidad de las historias"
"messageformat": "Privacidad de mis historias"
},
"icu:StoriesSettings__view-receipts--label": {
"messageformat": "Confirmaciones de visualización"
@ -5208,7 +5208,7 @@
"messageformat": "Nueva historia de grupo"
},
"icu:SendStoryModal__new-group--description": {
"messageformat": "Compartir en un grupo"
"messageformat": "Compartir con un grupo"
},
"icu:SendStoryModal__choose-groups": {
"messageformat": "Elegir grupos"
@ -5217,7 +5217,7 @@
"messageformat": "Privacidad de mis historias"
},
"icu:SendStoryModal__privacy-disclaimer--link": {
"messageformat": "Elige quiénes de tus contactos de Signal pueden ver tus historias.'{'0'}' Siempre podrás cambiarlo en los Ajustes de privacidad. <learnMoreLink>Más información.</learnMoreLink>"
"messageformat": "Elige quiénes de tus contactos de Signal pueden ver tus historias. Siempre podrás cambiarlo en los Ajustes de privacidad. <learnMoreLink>Más información.</learnMoreLink>"
},
"icu:SendStoryModal__delete-story": {
"messageformat": "Eliminar historia"
@ -5316,7 +5316,7 @@
"messageformat": "Eliminar para todos"
},
"icu:StoryViewsNRepliesModal__copy-reply-timestamp": {
"messageformat": "Copiar timestamp"
"messageformat": "Copiar marca de tiempo"
},
"icu:StoryListItem__label": {
"messageformat": "Historia"
@ -5355,7 +5355,7 @@
"messageformat": "{maxDurationInSec, plural, one {No se ha podido publicar este vídeo en tu historia porque dura más de 1 segundo.} other {No se ha podido publicar este vídeo en tu historia porque dura más de {maxDurationInSec,number} segundos.}}"
},
"icu:StoryCreator__error--video-too-big": {
"messageformat": "No se ha podido publicar este vídeo en tu historia porque es mayor de {limit,number}{units}."
"messageformat": "No se puede publicar este vídeo en tu historia porque supera los {limit,number} {units}."
},
"icu:StoryCreator__error--video-error": {
"messageformat": "No se ha podido cargar el vídeo"
@ -5400,7 +5400,7 @@
"messageformat": "Añadir enlace"
},
"icu:StoryCreator__link-preview-placeholder": {
"messageformat": "Escribe o añade una URL"
"messageformat": "Escribe o pega una URL"
},
"icu:StoryCreator__link-preview-empty": {
"messageformat": "Añade un enlace para compartir en tu historia"
@ -5485,16 +5485,16 @@
"messageformat": "Copiar al portapapeles"
},
"icu:UsernameLinkModalBody__help": {
"messageformat": "Comparte tu código QR y enlace solo con personas en las que confíes. Cuando lo compartas, otras personas podrán ver tu alias e iniciar un chat contigo."
"messageformat": "Comparte tu código QR y enlace solo con personas de confianza. Cuando los compartas, otras personas podrán ver tu alias e iniciar un chat contigo."
},
"icu:UsernameLinkModalBody__reset": {
"messageformat": "Reiniciar"
"messageformat": "Restablecer"
},
"icu:UsernameLinkModalBody__done": {
"messageformat": "Listo"
},
"icu:UsernameLinkModalBody__color__radio": {
"messageformat": "Color del enlace del alias, {index,number} de {total,number}"
"messageformat": "Color del enlace del alias: {index,number} de {total,number}"
},
"icu:UsernameLinkModalBody__reset__confirm": {
"messageformat": "Si cambias tu código QR y tu enlace, tu código QR y tu enlace actuales dejarán de funcionar."
@ -5602,10 +5602,10 @@
"messageformat": "Eliminar"
},
"icu:CallsTab__ToastCallHistoryCleared": {
"messageformat": "Se borró el historial de llamadas"
"messageformat": "Se eliminó el historial de llamadas"
},
"icu:CallsTab__ClearCallHistoryError--call-links": {
"messageformat": "No se han podido eliminar todos los enlaces de llamada. Comprueba tu conexión e inténtalo de nuevo."
"messageformat": "No se han podido eliminar todos los enlaces. Comprueba tu conexión e inténtalo de nuevo."
},
"icu:CallsTab__ClearCallHistoryError": {
"messageformat": "No se ha podido eliminar todo el historial de llamadas. Comprueba tu conexión e inténtalo de nuevo."
@ -5626,7 +5626,7 @@
"messageformat": "Filtrar por perdidas"
},
"icu:CallsList__ToggleFilterByMissed__RoleDescription": {
"messageformat": "Mostrar"
"messageformat": "Activar/Desactivar"
},
"icu:CallsList__EmptyState--noQuery__title": {
"messageformat": "No hay llamadas"
@ -5635,10 +5635,10 @@
"messageformat": "Aquí se mostrarán las llamadas recientes."
},
"icu:CallsList__EmptyState--hasQuery": {
"messageformat": "No se encontraron resultados para «{query}»"
"messageformat": "No hay ningún resultado para \"{query}\""
},
"icu:CallsList__EmptyState--hasQueryAndMissedCalls": {
"messageformat": "No se han encontrado resultados para \"{query}\" en llamadas perdidas"
"messageformat": "No hay ningún resultado para \"{query}\" en llamadas perdidas"
},
"icu:CallsList__EmptyState--missedCalls": {
"messageformat": "No hay llamadas perdidas"
@ -5677,7 +5677,7 @@
"messageformat": "No hay conversaciones recientes."
},
"icu:CallsNewCall__EmptyState--hasQuery": {
"messageformat": "No se encontraron resultados para «{query}»"
"messageformat": "No hay ningún resultado para \"{query}\""
},
"icu:CallsNewCallButton--return": {
"messageformat": "Atrás"
@ -5793,7 +5793,7 @@
"ignoreUnused": true
},
"icu:WhatsNew__bugfixes--2": {
"messageformat": "Hemos corregido varios errores para que tu aplicación funcione sin problemas. ¡Se vienen más cambios emocionantes!",
"messageformat": "Hemos corregido varios errores para que tu app funcione sin problemas. ¡Se vienen más cambios emocionantes!",
"ignoreUnused": true
},
"icu:WhatsNew__bugfixes--3": {
@ -5801,7 +5801,7 @@
"ignoreUnused": true
},
"icu:WhatsNew__bugfixes--4": {
"messageformat": "Estamos trabajando para corregir errores y hacer otras mejoras en el rendimiento para que la aplicación te funcione sin problemas. ",
"messageformat": "Estamos trabajando para corregir errores y hacer otras mejoras en el rendimiento para que la app te funcione sin problemas. ",
"ignoreUnused": true
},
"icu:WhatsNew__bugfixes--5": {
@ -5819,6 +5819,6 @@
"messageformat": "Hemos corregido un error poco frecuente que impedía que algunos chats se abrieran correctamente después de seleccionarlos. Así que ahora, cuando te cueste recordar qué te habían dicho, al menos tendrás la certeza de que Signal Desktop puede ayudarte con la respuesta."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Ahora, al vincular tu dispositivo Signal principal a un nuevo ordenador o iPad, podrás llevarte contigo tu historial de chats y tus últimos 45 días de archivos multimedia. El proceso de transferencia está cifrado de extremo a extremo y es completamente opcional. Así, la decisión de dejar tu pasado atrás solo dependerá de ti (¡y de tus dispositivos!)."
"messageformat": "Ahora, al vincular tu dispositivo Signal principal a un nuevo ordenador, podrás llevarte contigo tu historial de chats y tus últimos 45 días de archivos multimedia. El proceso de transferencia está cifrado de extremo a extremo y es completamente opcional. Así, la decisión de dejar tu pasado atrás solo dependerá de ti (¡y de tus dispositivos!)."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Kas kustutada kõik andmed?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Kas kustutada sellest Signal Desktopi versioonist kõik andmed ja sõnumid? Sinu Signali kontot ja telefonis või muudes lingitud seadmetes olevaid andmeid ei kustutata."
},
"icu:deleteAllDataProgress": {
"messageformat": "Ühenduse lõpetamine ja kõigi andmete kustutamine …"
@ -5819,6 +5819,6 @@
"messageformat": "Parandasime haruldase vea, mille tõttu mõned vestlused korralikult ei avanenud."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Nüüd saad otsustada oma vestluste ajaloo ja viimase 45 päeva meedia uuele lingitud seadmele üle kanda. Edastusprotsess on otspunktkrüptitud ja täiesti vabatahtlik."
"messageformat": "Nüüd saad otsustada oma vestluste ajaloo ja viimase 45 päeva meedia uuele lingitud seadmele üle kanda."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Datu guztiak garbitu nahi dituzu?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal-en ordenagailurako bertsio honetako datu eta mezu guztiak ezabatu nahi dituzu? Telefonoan nahiz lotutako beste gailu batzuetan, Signal-eko kontua eta datuak ez dira ezabatuko."
},
"icu:deleteAllDataProgress": {
"messageformat": "Deskonektatzen eta datu guztiak ezabatzen…"

View File

@ -1593,7 +1593,7 @@
"messageformat": "پاک کردن همه اطلاعات؟"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "همۀ داده‌ها و پیام‌ها از این نسخه سیگنال دسکتاپ پاک شود؟ داده‌ها و حساب سیگنال شما در تلفن‌تان و سایر دستگاههای متصل‌شده پاک نخواهد شد."
},
"icu:deleteAllDataProgress": {
"messageformat": "در حال قطع اتصال و حذف تمام داده‌ها…"
@ -5819,6 +5819,6 @@
"messageformat": "یک اشکال نادر را برطرف کردیم که مانع از باز شدن صحیح برخی از گفتگوها می‌شد."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "اکنون می‌توانید انتخاب کنید که تاریخچه گفتگو و رسانه ۴۵ روز گذشته خود را به یک دستگاه متصل‌شده جدید منتقل کنید. فرآیند انتقال سرتاسر رمزگذاری‌شده و کاملاً اختیاری است."
"messageformat": "اکنون می‌توانید انتخاب کنید که کل تاریخچه گفتگوها و رسانه ۴۵ روز گذشته خود را به یک دستگاه متصل‌شده جدید منتقل کنید. فرآیند انتقال سرتاسر رمزگذاری‌شده و کاملاً اختیاری است."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Poistetaanko kaikki tiedot?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Poista kaikki tiedot ja viestit tästä Signal Desktop -versiosta? Signal-tiliäsi ja puhelimesi tai muiden yhdistettyjen laitteiden tietoja ei poisteta."
},
"icu:deleteAllDataProgress": {
"messageformat": "Katkaistaan yhteyttä ja poistetaan kaikki tiedot…"
@ -5819,6 +5819,6 @@
"messageformat": "Korjasimme harvinaisen virheen, joka esti joitakin keskusteluja avautumasta oikein."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Nyt voit halutessasi tuoda keskusteluhistoriasi ja viimeisten 45 päivän mediasisällön mukanasi uuteen yhdistettyyn laitteeseen. Siirtoprosessi on salattu päästä päähän ja täysin valinnainen."
"messageformat": "Nyt voit halutessasi tuoda keskusteluhistoriasi ja viimeisten 45 päivän mediasisällön mukanasi uuteen yhdistettyyn laitteeseen. Siirtoprosessi on salattu päästä päähän ja täysin valinnainen. Voit valita, tuotko historian mukanasi uuteen laitteeseen siirtyessä."
}
}

View File

@ -18,7 +18,7 @@
"messageformat": "Vous avez ajouté {contact} à \"{group}\""
},
"icu:AddUserToAnotherGroupModal__toast--adding-user-to-group": {
"messageformat": "Ajout de {contact}…"
"messageformat": "Nous ajoutons {contact}…"
},
"icu:RecordingComposer__cancel": {
"messageformat": "Annuler"
@ -27,7 +27,7 @@
"messageformat": "Envoyer"
},
"icu:GroupListItem__message-default": {
"messageformat": "{count, plural, one {{count,number} membre} other {{count,number} membres}}"
"messageformat": "{count, plural, one {{count,number} membre} other {{count,number} membres}}"
},
"icu:GroupListItem__message-already-member": {
"messageformat": "Déjà membre"
@ -45,7 +45,7 @@
"messageformat": "Haute qualité"
},
"icu:softwareAcknowledgments": {
"messageformat": "Reconnaissance de logiciels"
"messageformat": "Informations relatives aux logiciels tiers utilisés"
},
"icu:privacyPolicy": {
"messageformat": "Conditions générales dutilisation et règles de confidentialité"
@ -60,7 +60,7 @@
"messageformat": "{appEnv} (Intel)"
},
"icu:copyErrorAndQuit": {
"messageformat": "Copier lerreur et fermer lappli"
"messageformat": "Copier le message d'erreur et quitter l'appli"
},
"icu:unknownContact": {
"messageformat": "Contact inconnu"
@ -126,7 +126,7 @@
"messageformat": "Tout afficher"
},
"icu:appMenuQuit": {
"messageformat": "Fermer Signal"
"messageformat": "Quitter Signal"
},
"icu:editMenuUndo": {
"messageformat": "Annuler"
@ -144,7 +144,7 @@
"messageformat": "Coller"
},
"icu:editMenuPasteAndMatchStyle": {
"messageformat": "Coller et faire correspondre le style"
"messageformat": "Coller sans la mise en forme"
},
"icu:editMenuDelete": {
"messageformat": "Supprimer"
@ -168,7 +168,7 @@
"messageformat": "Agrandir"
},
"icu:windowMenuBringAllToFront": {
"messageformat": "Tout amener à lavant-plan"
"messageformat": "Tout ramener au premier plan"
},
"icu:viewMenuResetZoom": {
"messageformat": "Taille réelle"
@ -180,7 +180,7 @@
"messageformat": "Zoom arrière"
},
"icu:viewMenuToggleFullScreen": {
"messageformat": "Activer ou désactiver le plein écran"
"messageformat": "Activer ou désactiver le mode plein écran"
},
"icu:viewMenuToggleDevTools": {
"messageformat": "Afficher ou masquer les outils pour développeurs"
@ -195,13 +195,13 @@
"messageformat": "Configurer comme appareil autonome"
},
"icu:messageContextMenuButton": {
"messageformat": "Davantage dactions"
"messageformat": "Autres actions"
},
"icu:contextMenuCopyLink": {
"messageformat": "Copier le lien"
},
"icu:contextMenuCopyImage": {
"messageformat": "Copier limage"
"messageformat": "Copier l'image"
},
"icu:contextMenuNoSuggestions": {
"messageformat": "Aucune suggestion"
@ -213,7 +213,7 @@
"messageformat": "Chargement…"
},
"icu:optimizingApplication": {
"messageformat": "Optimisation de lapplication…"
"messageformat": "Optimisation de l'application…"
},
"icu:migratingToSQLCipher": {
"messageformat": "Optimisation des messages… {status} terminés."
@ -363,7 +363,7 @@
"messageformat": "Impossible de supprimer {title}"
},
"icu:ContactListItem__remove-system--body": {
"messageformat": "Cette personne est sauvegardée dans les contacts de votre appareil. Supprimez-la de vos contacts sur votre appareil et essayez de nouveau."
"messageformat": "Vous avez enregistré cette personne dans les contacts de votre appareil. Supprimez-la des contacts de votre appareil et réessayez."
},
"icu:moveConversationToInbox": {
"messageformat": "Désarchiver"
@ -372,7 +372,7 @@
"messageformat": "Épingler la conversation"
},
"icu:unpinConversation": {
"messageformat": "Désépingler la conversation"
"messageformat": "Détacher la conversation"
},
"icu:pinnedConversationsFull": {
"messageformat": "Vous pouvez épingler jusqu'à 4 conversations."
@ -390,7 +390,7 @@
"messageformat": "Afficher"
},
"icu:youLeftTheGroup": {
"messageformat": "Vous nêtes plus membre du groupe."
"messageformat": "Vous n'êtes plus membre de ce groupe."
},
"icu:invalidConversation": {
"messageformat": "Ce groupe n'est pas valide. Veuillez créer un nouveau groupe."
@ -423,7 +423,7 @@
"messageformat": "Vous avez confirmé le numéro de sécurité associé à {name} depuis un autre appareil"
},
"icu:changedRightAfterVerify": {
"messageformat": "Le numéro de sécurité que vous essayez de confirmer a changé. Veuillez vérifier votre nouveau numéro de sécurité avec {name1}. Noubliez pas que ce changement peut signifier que quelquun essaie dintercepter vos communications ou que {name2} a simplement réinstallé Signal."
"messageformat": "Le numéro de sécurité que vous tentez de confirmer a changé. Veuillez vérifier le numéro de sécurité associé à {name1}. Rappel : ce changement peut signifier que quelqu'un tente d'intercepter vos communications. Mais il est aussi possible que {name2} ait tout simplement réinstallé Signal."
},
"icu:safetyNumberChangeDialog__message": {
"messageformat": "Les contacts suivants ont peut-être réinstallé Signal ou changé d'appareil. Sélectionnez un contact pour confirmer son nouveau numéro de sécurité. Cette étape est facultative."
@ -432,19 +432,19 @@
"messageformat": "Envoyer les messages en attente"
},
"icu:safetyNumberChangeDialog__review": {
"messageformat": "Vérifier"
"messageformat": "Examiner"
},
"icu:safetyNumberChangeDialog__many-contacts": {
"messageformat": "{count, plural, one {{count,number} contact a peut-être réinstallé Signal ou changé d'appareil. Si vous le souhaitez, vous pouvez vérifier son numéro de sécurité avant d'envoyer votre message.} other {{count,number} contacts ont peut-être réinstallé Signal ou changé d'appareil. Si vous le souhaitez, vous pouvez vérifier leur numéro de sécurité avant d'envoyer votre message.}}"
},
"icu:safetyNumberChangeDialog__post-review": {
"messageformat": "Toutes les connexions ont été vérifiées, appuyez sur envoyer pour continuer."
"messageformat": "Vous avez examiné tous les contacts. Appuyez sur \"Envoyer\" pour continuer."
},
"icu:safetyNumberChangeDialog__confirm-remove-all": {
"messageformat": "{count, plural, one {Êtes-vous sûr de vouloir retirer {count,number} contact de la story {story} ?} other {Êtes-vous sûr de vouloir retirer {count,number} contacts de la story {story} ?}}"
},
"icu:safetyNumberChangeDialog__remove-all": {
"messageformat": "Retirer tous"
"messageformat": "Retirer tous les contacts"
},
"icu:safetyNumberChangeDialog__verify-number": {
"messageformat": "Confirmer le numéro de sécurité"
@ -453,13 +453,13 @@
"messageformat": "Retirer de la story"
},
"icu:safetyNumberChangeDialog__actions-contact": {
"messageformat": "Menu pour les contacts {contact}"
"messageformat": "Actions sur le contact {contact}"
},
"icu:safetyNumberChangeDialog__actions-story": {
"messageformat": "Menu pour la Story {story}"
},
"icu:sendAnyway": {
"messageformat": "Envoyer quand même"
"messageformat": "Envoyer quand même"
},
"icu:safetyNumberChangeDialog_send": {
"messageformat": "Envoyer"
@ -468,13 +468,13 @@
"messageformat": "OK"
},
"icu:callAnyway": {
"messageformat": "Appeler quand même"
"messageformat": "Appeler quand même"
},
"icu:joinAnyway": {
"messageformat": "Rejoindre quand même"
},
"icu:debugLogExplanation": {
"messageformat": "Après avoir cliqué sur Envoyer, votre journal sera publié en ligne pendant 30 jours sur une URL unique et non publiée. Vous pouvez dabord lenregistrer localement."
"messageformat": "Après avoir cliqué sur \"Envoyer\", votre journal sera publié en ligne pendant 30 jours sur une URL non publique unique. Vous pouvez d'abord l'enregistrer localement."
},
"icu:debugLogError": {
"messageformat": "Un problème sest produit lors de limportation. Merci de nous envoyer le journal au format texte à ladresse suivante : support@signal.org."
@ -495,10 +495,10 @@
"messageformat": "Enregistrer"
},
"icu:debugLogLinkCopied": {
"messageformat": "Le lien a été copié dans votre presse-papiers"
"messageformat": "Lien copié dans le presse-papiers"
},
"icu:reportIssue": {
"messageformat": "Contacter lassistance"
"messageformat": "Contacter l'assistance"
},
"icu:submit": {
"messageformat": "Envoyer"
@ -546,7 +546,7 @@
"messageformat": "Vous navez aucun document dans cette conversation."
},
"icu:today": {
"messageformat": "Aujourdhui"
"messageformat": "Aujourd'hui"
},
"icu:yesterday": {
"messageformat": "Hier"
@ -555,7 +555,7 @@
"messageformat": "Cette semaine"
},
"icu:thisMonth": {
"messageformat": "Ce mois"
"messageformat": "Ce mois-ci"
},
"icu:unsupportedAttachment": {
"messageformat": "Type de pièce jointe non pris en charge. Cliquez pour l'enregistrer."
@ -567,7 +567,7 @@
"messageformat": "Ce type de pièce jointe n'est pas autorisé pour des raisons de sécurité."
},
"icu:loadingPreview": {
"messageformat": "Chargement de laperçu…"
"messageformat": "Chargement de l'aperçu…"
},
"icu:stagedPreviewThumbnail": {
"messageformat": "Brouillon de laperçu miniature du lien {domain}"
@ -576,10 +576,10 @@
"messageformat": "Aperçu miniature du lien {domain}"
},
"icu:stagedImageAttachment": {
"messageformat": "Brouillon dimage jointe : {path}"
"messageformat": "Brouillon (image jointe) : {path}"
},
"icu:decryptionErrorToast": {
"messageformat": "Signal Desktop a rencontré une erreur de déchiffrement de {name}, appareil {deviceId}."
"messageformat": "Une erreur s'est produite lors du déchiffrement du message de {name}, sur l'appareil {deviceId}."
},
"icu:Toast__ActionLabel--SubmitLog": {
"messageformat": "Envoyer le journal"
@ -591,7 +591,7 @@
"messageformat": "Failed to process some frames during backup import. Please share your logs."
},
"icu:cannotSelectPhotosAndVideosAlongWithFiles": {
"messageformat": "Vous ne pouvez pas sélectionner de photos ni de vidéos avec les fichiers."
"messageformat": "Impossible de joindre des photos et vidéos en même temps que des documents."
},
"icu:cannotSelectMultipleFileAttachments": {
"messageformat": "Vous ne pouvez sélectionner qu'un seul fichier à la fois."
@ -612,10 +612,10 @@
"messageformat": "Connexion…"
},
"icu:connect": {
"messageformat": "Cliquer pour vous reconnecter."
"messageformat": "Cliquez pour vous reconnecter."
},
"icu:connectingHangOn": {
"messageformat": "Ça ne devrait pas être long"
"messageformat": "Vous y êtes presque !"
},
"icu:offline": {
"messageformat": "Hors ligne"
@ -633,7 +633,7 @@
"messageformat": "Forcer la mise à jour"
},
"icu:helpMenuShowKeyboardShortcuts": {
"messageformat": "Afficher les raccourcis-clavier"
"messageformat": "Afficher les raccourcis clavier"
},
"icu:contactUs": {
"messageformat": "Nous contacter"
@ -645,7 +645,7 @@
"messageformat": "Accéder aux forums"
},
"icu:goToSupportPage": {
"messageformat": "Accéder à la page dassistance"
"messageformat": "Accéder à l'assistance Signal"
},
"icu:joinTheBeta": {
"messageformat": "Tester la version bêta"
@ -660,7 +660,7 @@
"messageformat": "À propos de Signal Desktop"
},
"icu:screenShareWindow": {
"messageformat": "Partage décran"
"messageformat": "Écran partagé"
},
"icu:callingDeveloperTools": {
"messageformat": "Outils dappel pour développeurs"
@ -678,7 +678,7 @@
"messageformat": "Masquer"
},
"icu:quit": {
"messageformat": "Fermer"
"messageformat": "Quitter"
},
"icu:signalDesktop": {
"messageformat": "Signal Desktop"
@ -750,7 +750,7 @@
"messageformat": "Animation de saisie pour cette conversation"
},
"icu:contactInAddressBook": {
"messageformat": "Cette personne est dans vos contacts."
"messageformat": "Cette personne se trouve dans vos contacts."
},
"icu:contactAvatarAlt": {
"messageformat": "Photo de profil du contact {name}"
@ -762,7 +762,7 @@
"messageformat": "domicile"
},
"icu:work": {
"messageformat": "travail"
"messageformat": "pro"
},
"icu:mobile": {
"messageformat": "mobile"
@ -783,7 +783,7 @@
"messageformat": "Téléchargement"
},
"icu:downloadFullMessage": {
"messageformat": "Télécharger le message complet"
"messageformat": "Télécharger l'intégralité du message"
},
"icu:downloadAttachment": {
"messageformat": "Télécharger la pièce jointe"
@ -795,16 +795,16 @@
"messageformat": "Répondre au message"
},
"icu:originalMessageNotFound": {
"messageformat": "Le message original est introuvable"
"messageformat": "Message d'origine introuvable"
},
"icu:voiceRecording--start": {
"messageformat": "Commencer lenregistrement dun message vocal"
"messageformat": "Cliquer pour enregistrer un message vocal"
},
"icu:voiceRecordingInterruptedMax": {
"messageformat": "Lenregistrement du message vocal sest arrêté, car vous avez atteint la limite de temps maximale."
"messageformat": "Arrêt de l'enregistrement : le message vocal a atteint la durée maximale."
},
"icu:voiceNoteLimit": {
"messageformat": "Les messages vocaux sont limités à une heure. Lenregistrement sarrêtera si vous changez dappli."
"messageformat": "La durée maximale des messages vocaux est de 60 minutes. L'enregistrement s'arrête si vous changez d'application."
},
"icu:voiceNoteMustBeOnlyAttachment": {
"messageformat": "Un message vocal ne peut comporter qu'une seule pièce jointe."
@ -1593,7 +1593,7 @@
"messageformat": "Supprimer toutes les données?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Supprimer toutes les données et tous les messages de cette version de Signal Desktop ? Cela ne supprime pas les données et le compte Signal stockés sur votre téléphone ou sur vos autres appareils associés."
},
"icu:deleteAllDataProgress": {
"messageformat": "Déconnexion et suppression de toutes les données…"
@ -1794,7 +1794,7 @@
"messageformat": "Cette conversation est dédiée à vos notes personnelles. Si des appareils sont associés à votre compte, les nouvelles notes que vous ajoutez ici sont synchronisées sur tous vos appareils."
},
"icu:notificationDrawAttention": {
"messageformat": "Attirer lattention sur cette fenêtre quand une notification arrive"
"messageformat": "Attirer l'attention sur la fenêtre Signal à l'arrivée d'une notification"
},
"icu:hideMenuBar": {
"messageformat": "Masquer la barre de menu"
@ -2394,7 +2394,7 @@
"messageformat": "1 à 9"
},
"icu:Keyboard--header": {
"messageformat": "Raccourcis-clavier"
"messageformat": "Raccourcis clavier"
},
"icu:Keyboard--navigation-header": {
"messageformat": "Navigation"
@ -4161,7 +4161,7 @@
"messageformat": "À propos des invitations par message"
},
"icu:ContactSpoofing__same-name--link": {
"messageformat": "Examinez les demandes avec attention. Signal a trouvé un autre contact avec le même nom. <reviewRequestLink>Examiner la demande</reviewRequestLink>"
"messageformat": "Examinez attentivement les demandes. Signal a trouvé un autre contact portant le même nom. <reviewRequestLink>Examiner la demande</reviewRequestLink>"
},
"icu:ContactSpoofing__same-name-in-group--link": {
"messageformat": "{count, plural, one {{count,number} membre du groupe porte le même nom. <reviewRequestLink>Examiner les membres</reviewRequestLink>} other {{count,number} membres du groupe portent le même nom. <reviewRequestLink>Examiner les membres</reviewRequestLink>}}"
@ -4209,7 +4209,7 @@
"messageformat": "Retirer {name} du groupe? Cette personne ne pourra plus rejoindre le groupe via le lien."
},
"icu:CaptchaDialog__title": {
"messageformat": "Vérifier pour continuer à communiquer"
"messageformat": "Confirmer le reCAPTCHA pour continuer d'échanger des messages"
},
"icu:CaptchaDialog__first-paragraph": {
"messageformat": "Pour nous aider à lutter contre le spam sur Signal, merci de confirmer le reCAPTCHA."
@ -4947,10 +4947,10 @@
"messageformat": "{sender} souhaite que vous activiez les paiements. Nenvoyez de paiements quaux personnes en qui vous avez confiance. Vous pouvez activer les paiements depuis votre téléphone mobile via Paramètres > Paiements."
},
"icu:payment-event-activation-request-you-label": {
"messageformat": "Vous avez envoyé une demande dactivation des paiements à {receiver}"
"messageformat": "Vous avez envoyé une demande d'activation des paiements à {receiver}."
},
"icu:payment-event-activation-request-you-label-without-receiver": {
"messageformat": "Vous avez envoyé une demande dactivation des paiements."
"messageformat": "Vous avez envoyé une demande d'activation des paiements."
},
"icu:payment-event-activated-label": {
"messageformat": "{sender} accepte désormais les paiements."
@ -5064,7 +5064,7 @@
"messageformat": "{name} à {group}"
},
"icu:Stories__toast--sending-reply": {
"messageformat": "Envoyer une réponse"
"messageformat": "Envoi de la réponse..."
},
"icu:Stories__toast--sending-reaction": {
"messageformat": "Réaction en cours…"
@ -5244,7 +5244,7 @@
"messageformat": "Lire"
},
"icu:StoryViewer__reply": {
"messageformat": "Répondre"
"messageformat": "Réagir"
},
"icu:StoryViewer__reply-placeholder": {
"messageformat": "Répondre à {firstName}"
@ -5289,7 +5289,7 @@
"messageformat": "Activer les confirmations de vue pour savoir qui a consulté vos Stories. Ouvrez lapplication Signal depuis votre appareil mobile puis rendez-vous dans Paramètres > Confidentialité."
},
"icu:StoryViewsNRepliesModal__no-replies": {
"messageformat": "Aucune réponse pour le moment"
"messageformat": "Aucune réaction pour le moment"
},
"icu:StoryViewsNRepliesModal__no-views": {
"messageformat": "Aucune vue pour le moment"
@ -5482,7 +5482,7 @@
"messageformat": "Couleur"
},
"icu:UsernameLinkModalBody__copy": {
"messageformat": "Copier dans le presse-papier"
"messageformat": "Copier dans le presse-papiers"
},
"icu:UsernameLinkModalBody__help": {
"messageformat": "Partagez votre code QR et votre lien unique avec les personnes en qui vous avez confiance. Lorsque vous les partagez, les autres utilisateurs pourront voir votre nom dutilisateur et démarrer une conversation avec vous."
@ -5819,6 +5819,6 @@
"messageformat": "Il arrivait que certaines conversations ne s'affichent pas correctement lorsqu'on les sélectionnait. Voilà au moins un bug qui ne vous fera plus bugger au moment de répondre à vos amis."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Lorsque vous associez votre principal appareil Signal à un nouvel ordinateur ou à un nouvel iPad, vous pouvez maintenant transférer toutes vos conversations, ainsi que vos médias des 45 derniers jours. Chiffré de bout en bout, ce processus de transfert est complètement facultatif : à vous de voir si vous préférez faire table rase du passé ou emmener vos souvenirs avec vous."
"messageformat": "Lorsque vous associez votre principal appareil Signal à un nouvel ordinateur, vous pouvez maintenant transférer toutes vos conversations, ainsi que vos médias des 45 derniers jours."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Scrios na sonraí go léir?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Scrios na sonraí agus na teachtaireachtaí uile ón leagan seo de Dheasc Signal? Ní scriosfar do chuntas Signal ná sonraí ar do ghuthán nó ar aon ghléas eile atá nasctha."
},
"icu:deleteAllDataProgress": {
"messageformat": "Dínascadh agus na sonraí go léir á scriosadh…"
@ -5819,6 +5819,6 @@
"messageformat": "Réitíomar fabht annamh a chuir cosc ar roinnt comhráite a oscailt i gceart."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Anois is féidir leat roghnú do stair comhráite agus na 45 lá deiridh de do mheáin a aistriú chuig gléas nua nasctha. Tá an próiseas aistrithe criptithe ó cheann go ceann, agus go hiomlán roghnach."
"messageformat": "Anois nuair a nascann tú do phríomhghléas Signal le Deasc nua, is féidir leat do stair comhráite agus na 45 lá deiridh de do mheáin a thabhairt leat. Tá an próiseas aistrithe criptithe ó cheann ceann, agus go hiomlán roghnach. Is leatsa an rogha cibé acu an ndéanfaidh tú na seansonraí a fhágáil i do dhiaidh nó a thabhairt leat."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Queres eliminar todos os datos?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Borrar toda a información e todas as mensaxes desta versión de Signal Desktop? Non se borrará a túa conta de Signal nin os datos do teu teléfono ou doutros dispositivos vinculados."
},
"icu:deleteAllDataProgress": {
"messageformat": "Desconectando e eliminando todos os datos…"

View File

@ -1593,7 +1593,7 @@
"messageformat": "બધા ડેટા ડિલીટ કરીએ?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal ડેસ્કટોપના આ વર્ઝનમાંથી તમામ ડેટા અને મેસેજ ડિલીટ કરવા છે? તમારું Signal એકાઉન્ટ અને તમારા ફોન અથવા અન્ય લિંક કરેલા ડિવાઇસ પરનો ડેટા ડિલીટ કરવામાં નહીં આવે."
},
"icu:deleteAllDataProgress": {
"messageformat": "ડિસ્કનેક્ટ થઈ રહ્યું છે અને બધા ડેટા ડિલીટ થઈ રહ્યાં છે…"
@ -5819,6 +5819,6 @@
"messageformat": "અમે એક દુર્લભ બગને ઠીક કર્યો છે જે કેટલીક ચેટને યોગ્ય રીતે ખુલવાથી અટકાવતો હતો."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "હવે તમે તમારી ચેટ હિસ્ટ્રી અને તમારા છેલ્લા 45 દિવસના મીડિયાને એક નવા લિંક કરેલા ડિવાઇસ પર ટ્રાન્સફર કરવાનું પસંદ કરી શકો છો. ટ્રાન્સફર પ્રક્રિયા એન્ડ-ટુ-એન્ડ એન્ક્રિપ્ટેડ છે અને સંપૂર્ણ રીતે વૈકલ્પિક છે."
"messageformat": "હવે જ્યારે તમે તમારા પ્રાથમિક Signal ડિવાઇસને નવા ડેસ્કટોપ પર લિંક કરો છો ત્યારે તમે તમારી ચેટ હિસ્ટ્રી અને તમારા છેલ્લા 45 દિવસના મીડિયાને તમારી સાથે લઈ જઈ શકો છો. ટ્રાન્સફર પ્રક્રિયા એન્ડ-ટુ-એન્ડ એન્ક્રિપ્ટેડ છે અને સંપૂર્ણ રીતે વૈકલ્પિક છે. જ્યારે ભૂતકાળને પાછળ છોડી દેવો કે નહીં તે અંગે પસંદગી કરવાની વાત આવે છે, ત્યારે તમને તમારા પોતાના ડિવાઇસ પર છોડી દેવામાં આવે છે."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "למחוק את כל הנתונים?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "למחוק את כל הנתונים וההודעות מגרסה זו של Signal לשולחן העבודה? חשבון Signal שלך והנתונים בטלפון שלך או במכשירים מקושרים אחרים לא יימחקו."
},
"icu:deleteAllDataProgress": {
"messageformat": "התנתקות ומחיקת כל הנתונים בתהליך…"
@ -5819,6 +5819,6 @@
"messageformat": "תיקנו באג נדיר שמנע מחלק מהצ׳אטים להיפתח כהלכה."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "עכשיו אפשר לבחור להעביר את היסטוריית הצ׳אט ואת 45 ימי המדיה האחרונים שלך למכשיר מקושר חדש. תהליך ההעברה מוצפן מקצה לקצה, והוא לגמרי לא חובה."
"messageformat": "עכשיו אפשר לקשר את מכשיר Signal העיקרי שלך לשולחן עבודה חדש ולהעביר איתך גם את היסטוריית הצ׳אט ואת 45 ימי המדיה האחרונים שלך."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "सारा डाटा डिलीट करें?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal डेस्कटॉप के इस संस्करण से सभी डेटा और संदेश हटाएं? आपका Signal खाता और आपके फोन या अन्य लिंक की गईं डिवाइस पर मौजूदा डेटा हटाया नहीं जाएगा।"
},
"icu:deleteAllDataProgress": {
"messageformat": "सारा डेटा डिसकनेक्ट और डिलीट किया जा रहा है…"
@ -5819,6 +5819,6 @@
"messageformat": "हमने एक ऐसी बड़ी गड़बड़ी को ठीक किया है जिसकी वजह से कुछ चैट चुने जाने के बाद ठीक से खुल नहीं पा रही थीं, इसलिए अब जब आप यह याद करने की कोशिश कर रहे होते हैं कि उन्होंने क्या कहा था, तो Signal डेस्कटॉप आपको खाली स्क्रीन नहीं दिखाता।"
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "अब, जब आप अपने मुख्य Signal डिवाइस को किसी नए डेस्कटॉप या iPad से लिंक करते हैं, तो आप उसमें अपनी चैट का इतिहास और पिछले 45 दिनों का अपना मीडिया ले सकते हैं। ट्रांसफ़र की प्रोसेस एंड-टू-एंड एनक्रिप्टेड और पूरी तरह वैकल्पिक होती है। जब बात आती है कि अपने अतीत को पीछे छोड़ा जाए या नहीं, तो सारी ज़िम्मेदारी आपके डिवाइस पर आ जाती है।"
"messageformat": "अब, जब आप अपने मुख्य Signal डिवाइस को किसी नए डेस्कटॉप से लिंक करते हैं, तो आप उसमें अपनी चैट का इतिहास और पिछले 45 दिनों का अपना मीडिया ले सकते हैं। ट्रांसफ़र की प्रोसेस एंड-टू-एंड एनक्रिप्टेड और पूरी तरह वैकल्पिक होती है। जब बात आती है कि अपने अतीत को पीछे छोड़ा जाए या नहीं, तो सारी ज़िम्मेदारी आपके डिवाइस पर आ जाती है।"
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Izbriši sve podatke?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Želite izbrisati sve podatke i poruke s ove verzije Signala za desktop? Vaš Signal račun i podaci na vašem telefonu ili drugim povezanim uređajima neće biti izbrisani."
},
"icu:deleteAllDataProgress": {
"messageformat": "Prekidanje veze i brisanje svih podataka…"
@ -5819,6 +5819,6 @@
"messageformat": "Ispravili smo rijetku pogrešku koja je sprječavala ispravno otvaranje određenih razgovora."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Sada možete prenijeti svoju povijest razgovora i medijske zapise iz posljednjih 45 dana na novi povezani uređaj. Proces prijenosa je sveobuhvatno šifriran i potpuno neobavezan."
"messageformat": "Sada, kad povežete novo računalo sa svojim Signal računom, možete prenijeti svoju povijest razgovora i medijske zapise iz posljednjih 45 dana na novi povezani uređaj. Proces prijenosa je sveobuhvatno šifriran i potpuno neobavezan."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Törlöd az összes adatot?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Törlöd az összes adatot és üzenetet a Signal Desktop ezen verziójából? A Signal-fiókod és a telefonodon vagy más társított eszközökön lévő adatok nem törlődnek."
},
"icu:deleteAllDataProgress": {
"messageformat": "Lecsatlakozás és az összes adat törlése…"
@ -5819,6 +5819,6 @@
"messageformat": "Kijavítottunk egy ritka hibát, amely megakadályozta, hogy néhány csevegés megfelelően nyíljon meg."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Mostantól dönthetsz úgy, hogy a csevegési előzményeidet és az elmúlt 45 nap médiatartalmát áthelyezed egy új kapcsolt eszközre. Az átviteli folyamat végponttól végpontig titkosított, és teljesen opcionális."
"messageformat": "Amikor összekapcsolod elsődleges Signal-eszközödet egy új asztali számítógéppel, magaddal viheted csevegési előzményeidet és az elmúlt 45 nap médiatartalmát. Az átviteli folyamat végponttól végpontig titkosított, és teljesen opcionális. Amikor arról kell döntened, hogy magad mögött hagyod-e a múltat vagy sem, a saját eszközeidre kell hagyatkoznod."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Hapus semua data?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Hapus semua data dan pesan dari versi Signal Desktop ini? Akun Signal dan data di ponsel Anda atau perangkat terhubung lainnya tidak akan dihapus."
},
"icu:deleteAllDataProgress": {
"messageformat": "Memutus koneksi dan menghapus semua data…"
@ -5819,6 +5819,6 @@
"messageformat": "Kami telah mengatasi bug langka yang mencegah Anda membuka chat di Signal Desktop. Anda kini tidak akan melihat layar kosong lagi dan tidak perlu mengingat-ingat chat sebelumnya."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Kini Anda bisa menghubungkan Signal yang terinstal di perangkat utama Anda ke Desktop atau iPad baru. Anda juga bisa memindahkan riwayat chat dan media dari 45 hari terakhir ke perangkat yang baru. Proses transfernya dienkripsi secara menyeluruh dan bersifat opsional. Anda bisa bebas untuk tetap menyimpan riwayat aktivitas atau menghapusnya."
"messageformat": "Anda kini dapat mentransfer riwayat chat dan media dari 45 hari terakhir ke Desktop yang baru saat Anda menghubungkan Signal dari perangkat utama. Proses transfernya dienkripsi secara menyeluruh dan bersifat opsional. Anda bisa bebas untuk tetap menyimpan atau menghapus riwayat chat dan media."
}
}

View File

@ -243,13 +243,13 @@
"messageformat": "Cerca tramite nome utente"
},
"icu:LeftPane__compose__findByPhoneNumber": {
"messageformat": "Trovarmi tramite numero di telefono"
"messageformat": "Cerca tramite numero di telefono"
},
"icu:LeftPaneFindByHelper__title--findByUsername": {
"messageformat": "Cerca tramite nome utente"
},
"icu:LeftPaneFindByHelper__title--findByPhoneNumber": {
"messageformat": "Trovarmi tramite numero di telefono"
"messageformat": "Cerca tramite numero di telefono"
},
"icu:LeftPaneFindByHelper__placeholder--findByUsername": {
"messageformat": "Nome utente"
@ -447,7 +447,7 @@
"messageformat": "Rimuovi tutto"
},
"icu:safetyNumberChangeDialog__verify-number": {
"messageformat": "Verifica numero sicuro"
"messageformat": "Verifica codice di sicurezza"
},
"icu:safetyNumberChangeDialog__remove": {
"messageformat": "Rimuovi dalla Storia"
@ -735,7 +735,7 @@
"messageformat": "Cerca tramite nome utente"
},
"icu:findByPhoneNumberHeader": {
"messageformat": "Trovarmi tramite numero di telefono"
"messageformat": "Cerca tramite numero di telefono"
},
"icu:welcomeToSignal": {
"messageformat": "Benvenuto in Signal"
@ -1593,7 +1593,7 @@
"messageformat": "Vuoi eliminare tutti i dati?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Vuoi eliminare tutti i dati e i messaggi da questa versione di Signal Desktop? Il tuo account Signal e i relativi dati sul tuo telefono (o altri dispositivi collegati) non verranno eliminati."
},
"icu:deleteAllDataProgress": {
"messageformat": "Disconnessione e cancellazione di tutti i dati…"
@ -5819,6 +5819,6 @@
"messageformat": "Abbiamo risolto un raro bug che impediva ad alcune chat di aprirsi correttamente quando selezionate: insomma, da ora Signal Desktop non dovrebbe più avere problemi di memoria e si ricorderà subito quale chat aprire."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Da ora quando colleghi il tuo dispositivo principale di Signal a un nuovo Desktop o iPad, puoi importare la cronologia delle tue chat e gli ultimi 45 giorni di media inviati/ricevuti. Il trasferimento è crittografato e del tutto opzionale. Insomma, scegli tu se lasciarti il passato alle spalle o meno!"
"messageformat": "Da ora quando colleghi il tuo dispositivo principale di Signal a un nuovo desktop, puoi importare la cronologia delle tue chat e gli ultimi 45 giorni di media inviati/ricevuti. Il trasferimento è crittografato e del tutto opzionale. Insomma, scegli tu se lasciarti il passato alle spalle o meno!"
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "すべてのデータを消去しますか?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal Desktopからすべてのデータとメッセージを消去しますかSignalアカウントやスマートフォンのデータ、その他のリンク済み端末のデータは消去されません。"
},
"icu:deleteAllDataProgress": {
"messageformat": "接続を切って全データを消去しています…"

View File

@ -1593,7 +1593,7 @@
"messageformat": "წავშალოთ ყველა მონაცემი?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "გსურს, Signal Desktop-ის ამ ვერსიიდან ყველა მონაცემი და მიმოწერა წაშალო? შენი Signal-ის პროფილი და მონაცემები შენს ტელეფონზე ან სხვა დაკავშირებულ მოწყობილობებზე არ წაიშლება."
},
"icu:deleteAllDataProgress": {
"messageformat": "მიმდინარეობს გათიშვა და ყველა მონაცემის წაშლა…"
@ -5819,6 +5819,6 @@
"messageformat": "ჩვენ გამოვასწორეთ ჩატებთან დაკავშირებული იშვიათი ხარვეზი, რომელიც მათი შერჩევის შემდეგ, ზოგიერთი ჩატის სწორად გახსნას ხელს უშლიდა."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "უკვე შეგიძლია, Signal-ის ძირითადი მოწყობილობის ახალ დესკტოპთან ან iPad-თან დაკავშირებისას, შენი ჩატის ისტორია და ბოლო 45 დღის მედია ფაილებიც თან გამოიყოლო. გადატანის პროცესი ბოლომდე დაშიფრული და სრულიად არჩევითია. ასე რომ, შენზეა დამოკიდებული, წარსულს უკან მოიტოვებ თუ არა."
"messageformat": "უკვე შეგიძლია, Signal-ის ძირითადი მოწყობილობის ახალ დესკტოპთან დაკავშირებისას, შენი ჩატის ისტორია და ბოლო 45 დღის მედია ფაილებიც თან გამოიყოლო. გადატანის პროცესი ბოლომდე დაშიფრული და სრულიად არჩევითია. ასე რომ, შენზეა დამოკიდებული, წარსულს უკან მოიტოვებ თუ არა."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Барлық деректі жою керек пе?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal Desktop-тың осы нұсқасынан барлық деректі және хатты жою керек пе? Signal аккаунтыңыз және телефоныңыздағы деректер немесе басқа да байланыстырылған құрылғылар жойылмайды."
},
"icu:deleteAllDataProgress": {
"messageformat": "Қолданба ажыратылып жатыр және деректер толығымен жойылып жатыр…"
@ -5819,6 +5819,6 @@
"messageformat": "Кейбір чаттардың дұрыс ашылуына сирек кедергі келтіретін ақауды түзеттік. Енді чаттар Signal Desktop-та дұрыс ашылып, онда болып жатқан қызу талқыға тез орала аласыз."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Енді Signal қолданылатын негізгі құрылғыңызды жаңа компьютермен немесе iPad-пен байланыстырғанда, чат тарихы мен соңғы 45 күндегі мультимедиа файлдарыңызды да тасымалдай аласыз. Тасымалдау процесі тура шифрланады және қосымша опция болып саналады. Сондықтан өткенді артта қалдырмаймын десеңіз де, жаңа құрылғыда бәрін жаңадан бастаймын десеңіз де, кез келген шешім өз еркіңізде."
"messageformat": "Енді Signal қолданылатын негізгі құрылғыңызды жаңа компьютермен байланыстырғанда, чат тарихы мен соңғы 45 күндегі мультимедиа файлдарыңызды да тасымалдай аласыз. Тасымалдау процесі тура шифрланады және қосымша опция болып саналады. Сондықтан өткенді артта қалдырмаймын десеңіз де, жаңа құрылғыда бәрін жаңадан бастаймын десеңіз де, кез келген шешім өз еркіңізде."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "លុបទិន្នន័យទាំងអស់?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "លុបទិន្នន័យ និងសារទាំងអស់ចេញពីកំណែ Signal Desktop នេះឬ? ទិន្នន័យ និងគណនី Signal របស់អ្នកនៅលើទូរសព្ទរបស់អ្នក ឬឧបករណ៍ដែលបានភ្ជាប់ផ្សេងទៀតនឹងមិនត្រូវបានលុបឡើយ។"
},
"icu:deleteAllDataProgress": {
"messageformat": "កំពុងផ្តាច់ និងលុបទិន្នន័យទាំងអស់…"
@ -5819,6 +5819,6 @@
"messageformat": "យើងបានដោះស្រាយបញ្ហាដ៏កម្រមួយដែលបានធ្វើឱ្យការជជែកមួយចំនួនមិនអាចបើកបានត្រឹមត្រូវ បន្ទាប់ពីពួកវាត្រូវបានជ្រើសរើស ដូច្នេះឥឡូវនេះ Signal Desktop ក៏មិនរអាក់រអួលទៀតដែរ ពេលអ្នកកំពុងព្យាយាមរកនឹកអ្វីដែលពួកគេបាននិយាយ។"
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "ឥឡូវនេះ នៅពេលដែលអ្នកភ្ជាប់ឧបករណ៍ Signal ចម្បងរបស់អ្នកជាមួយ Desktop ឬ iPad ថ្មី អ្នកអាចយកប្រវត្តិជជែក និងមេឌៀរយៈពេល 45 ថ្ងៃចុងក្រោយរបស់អ្នកទៅជាមួយអ្នកបាន។ ដំណើរការផ្ទេរគឺត្រូវបានអ៊ីនគ្រីបពីដើមដល់ចប់ ហើយជាជម្រើសរបស់អ្នកទាំងស្រុង។ នៅពេលដែលគិតថាតើគួរតែបំភ្លេចរឿងអតីតចោលឬទេ ការសម្រេចគឺស្ថិតនៅលើអ្នកទាំងស្រុង។"
"messageformat": "ឥឡូវនេះ នៅពេលដែលអ្នកភ្ជាប់ឧបករណ៍ Signal ចម្បងរបស់អ្នកជាមួយ Desktop ថ្មី អ្នកអាចយកប្រវត្តិជជែករបស់អ្នក និងមេឌៀរយៈពេល 45 ថ្ងៃចុងក្រោយរបស់អ្នកទៅជាមួយអ្នកបាន។ ដំណើរការផ្ទេរគឺត្រូវបានអ៊ីនគ្រីបពីដើមដល់ចប់ ហើយជាជម្រើសរបស់អ្នកទាំងស្រុង។ នៅពេលដែលគិតថាតើគួរតែបំភ្លេចរឿងអតីតចោលឬទេ ការសម្រេចគឺស្ថិតនៅលើអ្នកទាំងស្រុង។"
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "ಎಲ್ಲ ಡೇಟಾ ಅಳಿಸುವುದೇ?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal Desktop ನ ಈ ಆವೃತ್ತಿಯಿಂದ ಎಲ್ಲಾ ಡೇಟಾ ಮತ್ತು ಮೆಸೇಜ್‌ಗಳನ್ನು ಅಳಿಸಬೇಕೇ? ನಿಮ್ಮ ಫೋನ್ ಅಥವಾ ಇತರ ಲಿಂಕ್ ಮಾಡಲಾದ ಸಾಧನಗಳಲ್ಲಿನ ನಿಮ್ಮ Signal ಖಾತೆ ಮತ್ತು ಡೇಟಾವನ್ನು ಅಳಿಸಲಾಗುವುದಿಲ್ಲ."
},
"icu:deleteAllDataProgress": {
"messageformat": "ಡಿಸ್‌ಕನೆಕ್ಟ್ ಮಾಡಲಾಗುತ್ತಿದೆ ಮತ್ತು ಎಲ್ಲ ಡೇಟಾ ಅಳಿಸಲಾಗುತ್ತಿದೆ…"
@ -5819,6 +5819,6 @@
"messageformat": "ಕೆಲವು ಚಾಟ್‌ಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಿದ ನಂತರ ಅವುಗಳನ್ನು ಸರಿಯಾಗಿ ತೆರೆಯುವುದನ್ನು ತಡೆಯುವ ಅಪರೂಪದ ದೋಷವನ್ನು ನಾವು ಸರಿಪಡಿಸಿದ್ದೇವೆ, ಆದ್ದರಿಂದ ಈಗ ನೀವು ಅವರು ಹೇಳಿದ್ದನ್ನು ನೆನಪಿಟ್ಟುಕೊಳ್ಳಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರುವಾಗ ಸಿಗ್ನಲ್ ಡೆಸ್ಕ್‌ಟಾಪ್ ಕೂಡ ನೆನಪಿಸಿಕೊಳ್ಳಲು ತಡಕಾಡುವುದಿಲ್ಲ."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "ಈಗ ನೀವು ನಿಮ್ಮ ಪ್ರಾಥಮಿಕ Signal ಸಾಧನವನ್ನು ಹೊಸ ಡೆಸ್ಕ್‌ಟಾಪ್ ಅಥವಾ iPad ಗೆ ಲಿಂಕ್ ಮಾಡಿದಾಗ, ನಿಮ್ಮ ಚಾಟ್ ಇತಿಹಾಸ ಮತ್ತು ನಿಮ್ಮ ಕಳೆದ 45 ದಿನಗಳ ಮೀಡಿಯಾವನ್ನು ನಿಮ್ಮೊಂದಿಗೆ ತರಬಹುದು. ವರ್ಗಾವಣೆ ಪ್ರಕ್ರಿಯೆಯು ಎಂಡ್-ಟು-ಎಂಡ್ ಎನ್ಕ್ರಿಪ್ಟ್ ಆಗಿದೆ ಮತ್ತು ಸಂಪೂರ್ಣವಾಗಿ ಐಚ್ಛಿಕವಾಗಿರುತ್ತದೆ. ಹಿಂದಿನದನ್ನು ಬಿಡಬೇಕೆ ಅಥವಾ ಬೇಡವೇ ಎಂಬುದರ ಕುರಿತು ಆಯ್ಕೆ ಮಾಡುವ ಸಂದರ್ಭ ಬಂದಾಗ, ನಿಮ್ಮ ಸ್ವಂತ ವಿವೇಚನೆಯ ಮೇಲೆ ನಿರ್ಣಯ ತೆಗೆದುಕೊಳ್ಳಬೇಕಾಗುತ್ತದೆ."
"messageformat": "ಈಗ ನೀವು ನಿಮ್ಮ ಪ್ರಾಥಮಿಕ Signal ಸಾಧನವನ್ನು ಹೊಸ ಡೆಸ್ಕ್‌ಟಾಪ್ ಲಿಂಕ್ ಮಾಡಿದಾಗ, ನಿಮ್ಮ ಚಾಟ್ ಇತಿಹಾಸ ಮತ್ತು ನಿಮ್ಮ ಕಳೆದ 45 ದಿನಗಳ ಮೀಡಿಯಾವನ್ನು ನಿಮ್ಮೊಂದಿಗೆ ತರಬಹುದು. ವರ್ಗಾವಣೆ ಪ್ರಕ್ರಿಯೆಯು ಎಂಡ್-ಟು-ಎಂಡ್ ಎನ್ಕ್ರಿಪ್ಟ್ ಆಗಿದೆ ಮತ್ತು ಸಂಪೂರ್ಣವಾಗಿ ಐಚ್ಛಿಕವಾಗಿರುತ್ತದೆ. ಹಿಂದಿನದನ್ನು ಬಿಡಬೇಕೆ ಅಥವಾ ಬೇಡವೇ ಎಂಬುದರ ಕುರಿತು ಆಯ್ಕೆ ಮಾಡುವ ಸಂದರ್ಭ ಬಂದಾಗ, ನಿಮ್ಮ ಸ್ವಂತ ವಿವೇಚನೆಯ ಮೇಲೆ ನಿರ್ಣಯ ತೆಗೆದುಕೊಳ್ಳಬೇಕಾಗುತ್ತದೆ."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "모든 데이터를 삭제하시겠습니까?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "이 Signal 데스크톱 버전에서 모든 데이터와 메시지를 삭제하시겠습니까? 휴대폰 또는 기타 연결된 장치의 Signal 계정과 데이터는 삭제되지 않습니다."
},
"icu:deleteAllDataProgress": {
"messageformat": "연결 해제 및 모든 데이터 삭제 중…"
@ -5819,6 +5819,6 @@
"messageformat": "아주 가끔씩 일부 대화가 제대로 열리지 않는 버그를 해결했습니다."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "이제 대화 기록과 지난 45일간의 미디어를 새로운 연결 기기로 전송하도록 선택할 수 있습니다. 전송 프로세스는 종단 간 암호화로 보호되지만, 전적으로 선택 가능합니다."
"messageformat": "이제 Signal 기기를 새 데스크톱으로 연결할 때 대화 기록과 지난 45일간의 미디어를 가져올 수 있습니다. 전송 프로세스는 종단 간 암호화로 보호되지만, 전적으로 선택 가능합니다."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Бардык берилмелер өчүрөсүзбү?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal Desktop'тун бул версиясындагы бардык нерселерди жана билдирүүлөрдү өчүрөсүзбү? Signal аккаунтуңуз жана телефонуңуздагы жана башка байланышкан түзмөктөрдөгү нерселер өчпөйт."
},
"icu:deleteAllDataProgress": {
"messageformat": "Ажыратылып, бардык нерселер өчүрүлүүдө…"
@ -5819,6 +5819,6 @@
"messageformat": "Кээ бир маектердин туура эмес ачылышын оңдоп койдук."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Негизги Signal түзмөгүңүздү жаңы компьютерге же iPad'га туташтырып, ал жерге билдирүүлөрүңүздү жана соңку 45 күндөгү медиа файлдарды өткөрө аласыз. Өткөрүү процесси баштан аяк шифрленип жана милдеттүү эмес. Өткөн күндөрдү өзүңүз менен ала жүрүштү же артка калтырышты өзүңүз гана чечесиз."
"messageformat": "Негизги Signal түзмөгүңүздү жаңы компьютерге туташтырып, ал жерге билдирүүлөрүңүздү жана соңку 45 күндөгү медиа файлдарды өткөрө аласыз. Өткөрүү процесси баштан аяк шифрленген жана милдеттүү эмес. Өткөн күндөрдү өзүңүз менен ала жүрүштү же артка калтырышты өзүңүз гана чечесиз."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Ištrinti visus duomenis?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Ištrinti visus duomenis ir žinutes iš šios „Signal Desktop“ versijos? Jūsų „Signal“ paskyra ir duomenys telefone ar kituose susietuose įrenginiuose nebus ištrinti."
},
"icu:deleteAllDataProgress": {
"messageformat": "Atsijungiama ir ištrinami visi duomenys…"
@ -5819,6 +5819,6 @@
"messageformat": "Ištaisėme retą klaidą, dėl kurios tam tikrų pokalbių nebuvo galima tinkamai atidaryti."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Dabar galite perkelti savo pokalbių istoriją ir paskutinių 45 dienų įrašus į naują susietąjį įrenginį. Perkėlimo procesas yra visiškai užšifruotas ir neprivalomas."
"messageformat": "Dabar galite perkelti savo pokalbių istoriją ir paskutinių 45 dienų įrašus į naują susietąjį įrenginį."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Vai dzēst visus datus?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Vai dzēst visus datus un ziņas no šīs Signal Desktop versijas? Jūsu Signal konts un dati tālrunī vai citās piesaistītās ierīcēs netiks dzēsti."
},
"icu:deleteAllDataProgress": {
"messageformat": "Notiek atvienošana un visu datu dzēšana…"
@ -5819,6 +5819,6 @@
"messageformat": "Mēs izlabojām kļūdu reti sastopamu kļūdu, kuras dēļ nebija iespējams pareizi atvērt dažas sarunas pēc to atlasīšanas. Signal Desktop turpmāk vairs nebūs atmiņas problēmu, cenšoties atcerēties jūsu sarunas."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "★ Tagad, piesaistot savu galveno Signal ierīci jaunam datoram vai iPad, varat pārsūtīt uz jauno ierīci savu sarunu vēsturi un pēdējo 45 dienu multividi. Pārsūtīšanas process ir pilnībā šifrēts un nav obligāts."
"messageformat": "Tagad, piesaistot savu galveno Signal ierīci jaunam datoram, varat pārsūtīt uz jauno ierīci savu sarunu vēsturi un pēdējo 45 dienu multividi."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Избришете ги сите податоци?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Сакате да се избришат сите податоци и пораки од оваа верзија на Signal Desktop? Вашата Signal сметка и податоците на вашиот телефон или други поврзани уреди нема да бидат избришани."
},
"icu:deleteAllDataProgress": {
"messageformat": "Го прекинуваме поврзувањето и ги бришеме сите податоци…"
@ -5819,6 +5819,6 @@
"messageformat": "Решивме грешка која спречуваше правилно отворање на одредени разговори."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Сега можете да ја пренесете вашата историја на разговори и вашите медиумски датотеки од последните 45 дена на нов поврзан уред. Преносот е целосно шифриран и незадолжителен."
"messageformat": "Сега можете да ја пренесете вашата историја на разговори и вашите медиумски датотеки од последните 45 дена на нов поврзан уред."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "എല്ലാ ഡാറ്റയും ഇല്ലാതാക്കണോ?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal Desktop-ന്റെ ഈ പതിപ്പിൽ നിന്ന് എല്ലാ ഡാറ്റയും സന്ദേശങ്ങളും ഇല്ലാതാക്കണോ? നിങ്ങളുടെ ഫോണിലെയോ മറ്റ് ലിങ്ക് ചെയ്‌തിരിക്കുന്ന ഉപകരണങ്ങളിലെയോ നിങ്ങളുടെ Signal അക്കൗണ്ടും ഡാറ്റയും ഇല്ലാതാക്കില്ല."
},
"icu:deleteAllDataProgress": {
"messageformat": "എല്ലാ ഡാറ്റയും വിച്ഛേദിക്കുകയും ഇല്ലാതാക്കുകയും ചെയ്യുന്നു…"
@ -5819,6 +5819,6 @@
"messageformat": "തിരഞ്ഞെടുത്തതിന് ശേഷം ചില ചാറ്റുകൾ ശരിയായി തുറക്കുന്നതിൽ നിന്ന് തടയുന്ന ഒരു അപൂർവ ബഗ് ഞങ്ങൾ പരിഹരിച്ചു, അതിനാൽ, നിങ്ങൾ അവർ പറഞ്ഞത് ഓർക്കാൻ ശ്രമിക്കുമ്പോൾ ഇപ്പോൾ Signal ഡെസ്‌ക്‌ടോപ്പും ശൂന്യമായിപ്പോകില്ല."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "ഇപ്പോൾ നിങ്ങളുടെ പ്രാഥമിക Signal ഉപകരണം ഒരു പുതിയ ഡെസ്‌ക്‌ടോപ്പിലേക്കോ iPad-ലേക്കോ ലിങ്ക് ചെയ്യുമ്പോൾ, നിങ്ങളുടെ ചാറ്റ് ചരിത്രവും കഴിഞ്ഞ 45 ദിവസത്തെ മീഡിയയും കൊണ്ടുവരാനാകും. കൈമാറ്റ പ്രക്രിയ എൻഡ്-ടു-എൻഡ് എന്‍ക്രിപ്റ്റ് ചെയ്തതാണ്, പൂർണ്ണമായും ഓപ്ഷണലും ആണ്. ഭൂതകാലത്തെ ഉപേക്ഷിക്കണമോ വേണ്ടയോ എന്നതിനെക്കുറിച്ചുള്ള തിരഞ്ഞെടുപ്പ് നടത്തേണ്ടി വരുമ്പോൾ, നിങ്ങൾക്ക് നിങ്ങളുടെ സ്വന്തം ഉപകരണങ്ങളേക്കുറിച്ച് സ്വയം തീരുമാനമെടുക്കാം."
"messageformat": "ഇപ്പോൾ നിങ്ങളുടെ പ്രാഥമിക Signal ഉപകരണം ഒരു പുതിയ ഡെസ്‌ക്‌ടോപ്പിലേക്കോ ലിങ്ക് ചെയ്യുമ്പോൾ, നിങ്ങളുടെ ചാറ്റ് ചരിത്രവും കഴിഞ്ഞ 45 ദിവസത്തെ മീഡിയയും കൊണ്ടുവരാനാകും. കൈമാറ്റ പ്രക്രിയ എൻഡ്-ടു-എൻഡ് എന്‍ക്രിപ്റ്റ് ചെയ്തതാണ്, പൂർണ്ണമായും ഓപ്ഷണലും ആണ്. ഭൂതകാലത്തെ ഉപേക്ഷിക്കണമോ വേണ്ടയോ എന്നതിനെക്കുറിച്ചുള്ള തിരഞ്ഞെടുപ്പ് നടത്തേണ്ടി വരുമ്പോൾ, നിങ്ങൾക്ക് നിങ്ങളുടെ സ്വന്തം ഉപകരണങ്ങളേക്കുറിച്ച് സ്വയം തീരുമാനമെടുക്കാം."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "सर्व डेटा हटवायचा?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal Desktop च्या या आवृत्तीमधील सर्व डेटा आणि संदेश हटवायचे? आपले Signal खाते आणि आपल्या फोनवरील डेटा किंवा इतर लिंंक केलेली डिव्हाइसेस हटवले जाणार नाहीत."
},
"icu:deleteAllDataProgress": {
"messageformat": "डिस्कनेक्ट करत आहे आणि सर्व डेटा हटवत आहे…"
@ -5819,6 +5819,6 @@
"messageformat": "एक क्वचित आढळणारा बग काही चॅट्स निवडल्यानंतर त्यांना नीट उघडण्यापासून रोखायचा तो आता आम्ही घालवला आहे. आता Signal डेक्सटॉप नीट काम करेल."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "आता तुम्ही तुमचा प्राथमिक Signal डिव्हाईस एका नव्या डेस्कटॉपला किंवा iPad ला जोडता, तेव्हा त्यासोबत तुम्ही तुमचा चॅट इतिहास आणि गेल्या ४५ दिवसांचा मिडीया आणू शकता. हस्तांतरण प्रक्रिया एंड-टू-एंड कूटबद्ध केलेले आहे, आणि पूर्णपणे तुमच्या इच्छेवर आहे."
"messageformat": "आता तुम्ही तुमचा प्राथमिक Signal डिव्हाईस एका नव्या डेस्कटॉपला जोडता, तेव्हा त्यासोबत तुम्ही तुमचा चॅट इतिहास आणि गेल्या ४५ दिवसांचा मिडीया आणू शकता."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Padamkan semua data?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Padamkan semua data dan mesej daripada versi Signal Desktop ini? Akaun Signal dan data pada telefon anda atau peranti terpaut lain tidak akan dipadamkan."
},
"icu:deleteAllDataProgress": {
"messageformat": "Memutuskan dan memadam semua data…"
@ -5819,6 +5819,6 @@
"messageformat": "Kami membaiki pepijat yang jarang berlaku, yang menghalang beberapa sembang daripada dibuka dengan betul."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Kini anda boleh memilih untuk memindahkan sejarah sembang anda dan media 45 hari lalu ke peranti baru yang dipautkan. Proses pemindahan ini disulitkan hujung ke hujung dan sepenuhnya terpulang kepada anda."
"messageformat": "Kini apabila anda memautkan peranti Signal utama anda ke Desktop baharu, anda boleh membawa sejarah sembang dan media 45 hari terakhir anda bersama. Proses pemindahan disulitkan dari hujung ke hujung, dan sepenuhnya terpulang kepada anda. Ketika anda perlu membuat keputusan untuk meninggalkan masa lalu atau tidak, segalanya terpulang kepada anda."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "ဒေတာအားလုံးကို ဖျက်မည်လား။"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "ဤ Signal Desktop ဗားရှင်းမှ ဒေတာနှင့် မက်ဆေ့ချ်အားလုံးကို ဖျက်ပါမည်လား။ သင့်ဖုန်း သို့မဟုတ် အခြား ချိတ်ထားသည့် စက်များမှ သင့် Signal အကောင့်နှင့် ဒေတာကို ဖျက်မည်မဟုတ်ပါ။"
},
"icu:deleteAllDataProgress": {
"messageformat": "ချိတ်ဆက်မှုကိုဖြုတ်၍ ဒေတာအားလုံးကို ဖျက်နေသည်..."

View File

@ -1593,7 +1593,7 @@
"messageformat": "Vil du slette alle dataene?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Vil du slette alle dataene og meldingene fra denne Signal Desktop-versjonen? Signal-kontoen og dataene du har på mobilen og andre tilkoblede enheter, slettes ikke."
},
"icu:deleteAllDataProgress": {
"messageformat": "Kobler fra og sletter alle data …"
@ -5819,6 +5819,6 @@
"messageformat": "Vi har rettet opp i en sjelden feil som førte til at enkelte samtalevindu ikke kunne åpnes."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Nå kan du overføre samtaleloggen din og mediefilene dine fra de siste 45 dagene til en annen tilkoblet enhet. Overføringen er ende-til-ende-kryptert og helt valgfri."
"messageformat": "Nå kan du overføre samtaleloggen din og mediefilene dine fra de siste 45 dagene til en ny Desktop. Overføringen er ende-til-ende-kryptert og helt valgfri."
}
}

View File

@ -99,7 +99,7 @@
"messageformat": "Stickerpakket maken/uploaden"
},
"icu:mainMenuEdit": {
"messageformat": "&Bewerken"
"messageformat": "B&ewerken"
},
"icu:mainMenuView": {
"messageformat": "&Weergave"
@ -1593,7 +1593,7 @@
"messageformat": "Alle gegevens wissen?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Alle gegevens en berichten wissen uit deze versie van Signal Desktop? Je Signal-account en gegevens op je telefoon of andere gekoppelde apparaten worden niet gewist."
},
"icu:deleteAllDataProgress": {
"messageformat": "Aan het ontkoppelen en alle gegevens aan het wissen…"
@ -5819,6 +5819,6 @@
"messageformat": "We hebben een zeldzame bug opgelost die ervoor zorgde dat sommige chats niet correct werden geopend nadat ze waren geselecteerd."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Je kunt er nu voor kiezen om je chatgeschiedenis en de laatste 45 dagen aan media over te zetten naar een nieuw gekoppeld apparaat. Het overdrachtsproces is end-to-end versleuteld en volledig optioneel. Aan jou de keus of je je verleden achter je laat of gewoon met je mee blijft dragen."
"messageformat": "Je kunt er nu voor kiezen om je volledige chatgeschiedenis en je laatste 45 dagen aan media over te zetten naar een nieuw gekoppelde desktop. Het overzetten is end-to-end versleuteld en volledig optioneel. Aan jou de keus of je je verleden achter je laat of gewoon met je mee blijft dragen."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "ਕੀ ਸਾਰਾ ਡਾਟਾ ਮਿਟਾਉਣਾ ਹੈ?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "ਕੀ Signal Desktop ਦੇ ਇਸ ਵਰਜ਼ਨ ਤੋਂ ਸਾਰਾ ਡਾਟਾ ਅਤੇ ਸੁਨੇਹਿਆਂ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ? ਤੁਹਾਡਾ Signal ਖਾਤਾ ਅਤੇ ਤੁਹਾਡੇ ਫ਼ੋਨ ਜਾਂ ਹੋਰ ਲਿੰਕ ਕੀਤੇ ਡਿਵਾਈਸਾਂ 'ਤੇ ਮੌਜੂਦ ਡਾਟਾ ਮਿਟਾਇਆ ਨਹੀਂ ਜਾਵੇਗਾ।"
},
"icu:deleteAllDataProgress": {
"messageformat": "ਡਿਸਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ ਅਤੇ ਸਾਰਾ ਡਾਟਾ ਮਿਟਾਇਆ ਜਾ ਰਿਹਾ ਹੈ…"

View File

@ -1593,7 +1593,7 @@
"messageformat": "Usunąć wszystkie dane?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Usunąć wszystkie dane i wiadomości z tej wersji Signal Desktop? Twoje konto Signal ani dane na telefonie lub innych połączonych urządzeniach nie zostaną usunięte."
},
"icu:deleteAllDataProgress": {
"messageformat": "Odłączanie i usuwanie wszystkich danych…"
@ -1788,7 +1788,7 @@
"messageformat": "System"
},
"icu:noteToSelf": {
"messageformat": "Moje notatki"
"messageformat": "Do siebie"
},
"icu:noteToSelfHero": {
"messageformat": "W tym czacie możesz dodawać swoje notatki. Jeśli z Twoim kontem są połączone jakieś urządzenia, nowe notatki zostaną zsynchronizowane."
@ -2043,7 +2043,7 @@
"messageformat": "Odznaka została odebrana"
},
"icu:message--donation--preview--sent": {
"messageformat": "Wpłaciłeś(-aś) darowiznę w imieniu {recipient}"
"messageformat": "Darowizna wpłacona w imieniu tej osoby: {recipient}"
},
"icu:message--donation": {
"messageformat": "Darowizna"
@ -2079,7 +2079,7 @@
"messageformat": "Dziękujemy za Twoje wsparcie!"
},
"icu:modal--donation--description": {
"messageformat": "Wpłaciłeś(-aś) darowiznę na rzecz Signal w imieniu {name}. Otrzyma on(a) możliwość pochwalenia się wsparciem na swoim profilu."
"messageformat": "Twoja darowizna na rzecz aplikacji Signal została wpłacona w imieniu wybranej osoby. {name} może się teraz pochwalić wsparciem w swoim profilu."
},
"icu:stickers--toast--InstallFailed": {
"messageformat": "Nie można zainstalować pakietu naklejek"
@ -3606,7 +3606,7 @@
"messageformat": "Stuknij swoje zdjęcie profilowe, u góry, po lewej, aby otworzyć Ustawienia"
},
"icu:BadgeSustainerInstructions__instructions__3": {
"messageformat": "Stuknij w opcję „Przekaż darowiznę na rzecz Signal” i zasubskrybuj"
"messageformat": "Dotknij opcji „Wesprzyj Signal darowizną” i ustaw darowiznę cykliczną"
},
"icu:BackupImportScreen__title": {
"messageformat": "Synchronizowanie wiadomości"
@ -3648,7 +3648,7 @@
"messageformat": "Nie udało się przenieść Twoich wiadomości. Sprawdź połączenie z internetem i spróbuj ponownie."
},
"icu:BackupImportScreen__error-fatal__body": {
"messageformat": "Nie udało się przenieść Twoich wiadomości z powodu błędu. Połącz ten komputer jeszcze raz i spróbuj ponownie."
"messageformat": "Wystąpił błąd i nie udało się przenieść Twoich wiadomości. Aby spróbować ponownie, połącz ten komputer jeszcze raz."
},
"icu:BackupImportScreen__error__confirm": {
"messageformat": "Ponów"
@ -5819,6 +5819,6 @@
"messageformat": "Naprawiliśmy rzadko występujący błąd, przez który niektóre czaty nie otwierały się poprawnie po ich kliknięciu. Teraz znowu masz czarno na białym, co i kiedy zostało powiedziane."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Od teraz, gdy połączysz w aplikacji Signal swoje główne urządzenie z nowym komputerem lub iPadem, możesz przenieść również historię czatów oraz multimedia z ostatnich 45 dni. Proces transferu danych jest szyfrowany metodą end-to-end i całkowicie opcjonalny. Wymazać przeszłość czy zachować ciągłość historii? Tę decyzję zostawiamy Tobie."
"messageformat": "Od teraz, gdy połączysz w aplikacji Signal swoje główne urządzenie z nowym komputerem, oprócz historii czatów możesz też przenieść multimedia z ostatnich 45 dni. Proces transferu danych jest szyfrowany metodą end-to-end i całkowicie opcjonalny. Wymazać przeszłość czy zachować ciągłość historii? Tę decyzję zostawiamy Tobie."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Excluir todos os dados?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Excluir todos os dados e mensagens desta versão do Signal Desktop? Sua conta do Signal e dados do seu telefone ou outros dispositivos vinculados não serão excluídos."
},
"icu:deleteAllDataProgress": {
"messageformat": "Desconectando e apagando todos os dados…"
@ -5819,6 +5819,6 @@
"messageformat": "Corrigimos um erro raro que estava impedindo que algumas conversas fossem abertas corretamente após serem selecionadas."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Agora, ao vincular seu dispositivo principal do Signal a um novo desktop ou iPad, você pode levar seu histórico de conversas e os últimos 45 dias de mídia com você. O processo de transferência é criptografado de ponta a ponta e totalmente opcional."
"messageformat": "Agora, ao vincular seu dispositivo principal do Signal a um novo desktop, você pode levar seu histórico de conversa e os últimos 45 dias de mídia com você. O processo de transferência é criptografado de ponta a ponta e totalmente opcional."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Eliminar todos os dados?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Eliminar todos os dados e mensagens desta versão do Signal Desktop? A sua conta Signal e os dados no seu telemóvel ou outros dispositivos conectados não serão eliminados."
},
"icu:deleteAllDataProgress": {
"messageformat": "A desligar e a eliminar todos os dados…"
@ -5819,6 +5819,6 @@
"messageformat": "Corrigimos um erro raro que impedia alguns chats de abrirem corretamente."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Agora pode escolher transferir o seu histórico de mensagens e os seus últimos 45 dias de ficheiros multimédia para um novo dispositivo vinculado. Este processo de transferência está encriptado de ponta a ponta e é totalmente opcional."
"messageformat": "Agora ao vincular o seu dispositivo Signal principal a um novo desktop pode transferir o seu histórico do chat e os seus últimos 45 dias de ficheiros multimédia para um novo dispositivo vinculado."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Ștergi toate datele?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Ștergi toate datele și mesajele din această versiune de Signal Desktop? Contul tău Signal și datele de pe telefon sau alte dispozitive conectate nu vor fi șterse."
},
"icu:deleteAllDataProgress": {
"messageformat": "Se deconectează și se șterg toate datele…"
@ -5819,6 +5819,6 @@
"messageformat": "Am remediat o eroare rară care a împiedicat unele chat-uri să se deschidă corect după ce au fost selectate, așa că acum Signal Desktop nu ratează în timp ce încerci să-ți amintești ce s-a spus."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Acum, când conectezi dispozitivul Signal principal la un nou desktop sau iPad, poți avea acces la istoricul conversațiilor și la fișierele media din ultimele 45 de zile. Procesul de transfer este criptat end-to-end și complet opțional. Când vine vorba de a alege dacă să lași sau nu trecutul în urmă, rămâi la mâna propriilor tale dispozitive."
"messageformat": "Acum, când conectezi dispozitivul Signal principal la un nou desktop, poți avea acces la istoricul conversațiilor și la fișierele media din ultimele 45 de zile. Procesul de transfer este criptat end-to-end și complet opțional. Când vine vorba de a alege dacă să lași sau nu trecutul în urmă, ești la mâna propriilor tale dispozitive."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Удалить все данные?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Удалить все данные и сообщения из этой версии Signal Desktop? Ваша учётная запись Signal и данные на вашем телефоне или других подключенных устройствах не будут удалены."
},
"icu:deleteAllDataProgress": {
"messageformat": "Отключается и удаляет все данные…"
@ -5819,6 +5819,6 @@
"messageformat": "Мы исправили ошибку, из-за которой некоторые чаты не открывались должным образом после их выбора, теперь Signal Desktop не будет показывать пустой чат, пока вы пытаетесь вспомнить, о чём там шла речь."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Теперь, когда вы привязываете основное устройство Signal к новому ПК или iPad, вы можете взять с собой историю чатов и медиафайлы за последние 45 дней. Перенос защищён сквозным шифрованием и совершенно необязателен. Оставлять ли прошлое позади? Решать вам."
"messageformat": "Теперь, когда вы привязываете основное устройство Signal к новому ПК, вы можете взять с собой историю чатов и медиафайлы за последние 45 дней. Перенос защищён сквозным шифрованием и совершенно необязателен. Оставлять ли прошлое позади? Решать вам."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Vymazať všetky dáta?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Chcete vymazať všetky údaje a správy z tejto verzie aplikácie Signal Desktop? Váš účet Signal a údaje vo vašom telefóne alebo iných prepojených zariadeniach nebudú vymazané."
},
"icu:deleteAllDataProgress": {
"messageformat": "Prebieha odpojenie a odstraňovanie všetkých údajov…"
@ -5819,6 +5819,6 @@
"messageformat": "Opravili sme zriedkavú chybu, ktorá bránila správnemu otvoreniu niektorých četov po ich výbere."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Teraz si môžete preniesť históriu četov a médiá z posledných 45 dní do nového prepojeného zariadenia. Prenos je voliteľný a jeho proces chránený end-to-end šifrovaním."
"messageformat": "Teraz si po prepojení svojho primárneho zariadenia Signal s novým počítačom môžete preniesť históriu četov a médiá z posledných 45 dní. Prenos je voliteľný a jeho proces chránený end-to-end šifrovaním."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Želite izbrisati vse podatke?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Želite izbrisati vse podatke in sporočila iz te različice Signal Desktop? Vaš račun v Signalu in podatki v vašem telefonu ali drugih povezanih napravah ne bodo izbrisani."
},
"icu:deleteAllDataProgress": {
"messageformat": "Odjava in brisanje vseh podatkov …"

View File

@ -1593,7 +1593,7 @@
"messageformat": "Të fshihen krejt të dhënat?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Të fshihen të gjitha të dhënat dhe mesazhet nga versioni i Signal Desktop? Llogaria e Signal dhe të dhënat që gjenden në telefon apo në pajisje të tjera të lidhura nuk do të fshihen."
},
"icu:deleteAllDataProgress": {
"messageformat": "Të gjitha të dhënat po shkëputen dhe po fshihen…"
@ -5819,6 +5819,6 @@
"messageformat": "Kemi rregulluar një defekt të rrallë që pengoi disa biseda të hapeshin siç duhet pasi ato u zgjodhën, kështu që tani Signal Desktop nuk do të tregojë më një ekran bosh ndërkohë që përpiqesh të kujtosh çfarë thanë."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Kur e lidh pajisjen kryesore të Signal me një Desktop ose iPad të ri, tanimë mund ta marrësh me vete historikun e bisedave dhe mediat e 45 ditëve të fundit. Procesi i transferimit është i koduar nga skaji në skaj dhe plotësisht opsional. Kur vjen puna për të bërë zgjedhjen nëse do të lësh apo jo të kaluarën pas, je në duart e pajisjeve të tua."
"messageformat": "Kur e lidh pajisjen kryesore të Signal me një Desktop të ri, tanimë mund ta marrësh me vete historikun e bisedave dhe mediat e 45 ditëve të fundit."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Желите ли да избришете све податке?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Желите ли да избришете све податке и поруке из ове верзије Signal Desktop-а? Ваш налог на Signal-у и подаци на вашем телефону или другим повезаним уређајима неће бити избрисани."
},
"icu:deleteAllDataProgress": {
"messageformat": "Прекидамо везу и бришемо све податке…"
@ -5819,6 +5819,6 @@
"messageformat": "Исправили смо ретку грешку која је спречавала нека ћаскања да се правилно отворе."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Сада можете изабрати да пренесете своју историју ћаскања и последњих 45 дана медија на нови повезани уређај. Процес преноса је потпуно шифрован и потпуно је опциони."
"messageformat": "Сада можете да изаберете да пренесете своју историју ћаскања и последњих 45 дана медија на нови повезани десктоп рачунар."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Ta bort alla data?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Ta bort alla data och meddelanden från den här versionen av Signal Desktop? Ditt Signal-konto och dina data på din telefon eller andra länkade enheter raderas inte."
},
"icu:deleteAllDataProgress": {
"messageformat": "Kopplar bort och tar bort alla data …"
@ -5819,6 +5819,6 @@
"messageformat": "Vi har åtgärdat en sällsynt bugg som gjorde att vissa chattar inte öppnades korrekt."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Nu kan du välja att överföra din chatthistorik och dina senaste 45 dagars media till en ny länkad enhet. Överföringsprocessen är krypterad från början till slut och är helt frivillig."
"messageformat": "Nu kan du välja att överföra din chatthistorik och dina senaste 45 dagars media till ett nytt länkat skrivbord. Överföringsprocessen är krypterad från början till slut och är helt frivillig."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Futa data yote?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Futa data na jumbe zote kutoka kwenye toleo hili la Signal Desktop? Akaunti yako ya Signal na data kwenye simu yako au vifaa vingine vilivyounganishwa havitofutwa."
},
"icu:deleteAllDataProgress": {
"messageformat": "Inatenganisha na kufuta data yote…"
@ -5819,6 +5819,6 @@
"messageformat": "Tulirekebisha hitilafu nadra ambayo ilizuia baadhi ya gumzo kufunguka vizuri baada ya kuchaguliwa, kwa hivyo sasa Signal Desktop itakusaidia pale unapojaribu kukumbuka walichosema."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Sasa unapounganisha kifaa chako msingi cha Signal kwenye Kompyuta ya Mezani au iPad mpya, unaweza kutembea na historia yako ya gumzo na picha na video zako za siku 45 zilizopita. Mchakato wa uhamishaji umesimbwa kwa njia fiche, na ni kwa hiari kabisa. Linapokuja suala la kufanya uchaguzi kuhusu kuacha au kutoyaacha yaliyopita, unaachwa kwa vifaa vyako."
"messageformat": "Sasa unapounganisha kifaa chako msingi cha Signal kwenye Kompyuta ya Mezani mpya, unaweza kutembea na historia yako ya gumzo na picha na video zako za siku 45 zilizopita. Mchakato wa uhamishaji umesimbwa kwa njia fiche, na ni kwa hiari kabisa. Linapokuja suala la kufanya uchaguzi kuhusu kuacha au kutoyaacha yaliyopita, unaachwa kwa vifaa vyako."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "எல்லா தரவையும் நீக்கவா?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal டெஸ்க்டாப்பின் இந்தப் பதிப்பிலிருந்து எல்லா தரவையும் மெசேஜ்களையும் நீக்க வேண்டுமா? உங்கள் Signal கணக்கு மற்றும் உங்கள் ஃபோன் அல்லது இணைக்கப்பட்ட பிற டிவைஸ்களில் உள்ள தரவு நீக்கப்படாது."
},
"icu:deleteAllDataProgress": {
"messageformat": "எல்லாத தரவையும் துண்டித்து நீக்குகிறது…"
@ -1935,7 +1935,7 @@
"messageformat": "நீங்கள் குழுவைப் புதுப்பித்தீர்கள்."
},
"icu:updatedGroupAvatar": {
"messageformat": "குழு அவதார் புதுப்பிக்கப்பட்டது."
"messageformat": "குழு அவதார் புதுப்பிக்கப்பட்டது."
},
"icu:titleIsNow": {
"messageformat": "இப்போது குழுவின் பெயர் ''{name}'."
@ -3123,22 +3123,22 @@
"messageformat": "அ உறுப்பினர் அகற்றப்பட்டது குழு பெயர்."
},
"icu:GroupV2--avatar--change--other": {
"messageformat": "{memberName} மாற்றப்பட்டது குழு அவதாரம்."
"messageformat": "{memberName} குழு அவதாராற்றினார்."
},
"icu:GroupV2--avatar--change--you": {
"messageformat": "குழு அவதாரத்தை மாற்றியுள்ளீர்கள்."
"messageformat": "நீங்கள் குழு அவதாரை மாற்றினீர்கள்."
},
"icu:GroupV2--avatar--change--unknown": {
"messageformat": "ஒரு உறுப்பினர் குழு அவதாரத்தை மாற்றினார்."
"messageformat": "ஓர் உறுப்பினர் குழு அவதாரை மாற்றினார்."
},
"icu:GroupV2--avatar--remove--other": {
"messageformat": "{memberName} அகற்றப்பட்டது குழு அவதாரம்."
"messageformat": "{memberName} என்பவர் குழு அவதாரை அகற்றியுள்ளார்."
},
"icu:GroupV2--avatar--remove--you": {
"messageformat": "நீங்கள் அகற்றிவிட்டீர்கள்குழு அவதாரம்."
"messageformat": "நீங்கள் குழு அவதாரை அகற்றிவிட்டீர்கள்."
},
"icu:GroupV2--avatar--remove--unknown": {
"messageformat": "அ உறுப்பினர் அகற்றப்பட்டது குழு அவதாரம்."
"messageformat": "ஓர் உறுப்பினர் குழு அவதாரை அகற்றியுள்ளார்."
},
"icu:GroupV2--access-attributes--admins--other": {
"messageformat": "{adminName} யாரால் முடியும் என்பதை மாற்றியது தொகு குழு தகவல் to \"மட்டும் நிர்வாகிகள். \""
@ -5819,6 +5819,6 @@
"messageformat": "தேர்ந்தெடுக்கப்பட்ட பிறகு சில சாட்ஸ் சரியாகத் திறப்பதைத் தடுக்கும் ஒரு அரிய பிழையை நாங்கள் சரிசெய்துள்ளோம், எனவே இப்போது சிக்னல் டெஸ்க்டாப் அவர்கள் சொன்னதை நினைவில் வைத்துக் கொள்ள முயலும்போது அது காலியாக இருக்காது."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "இப்போது உங்கள் முதன்மை சிக்னல் சாதனத்தை புதிய டெஸ்க்டாப் அல்லது ஐபேட் உடன் இணைக்கும்போது, உங்களின் சாட் வரலாற்றையும் கடந்த 45 நாட்கள் மீடியாவையும் உங்களுடன் கொண்டு வரலாம். இடமாற்றச் செயல்முறை இருமுனை மறைகுறியாக்கப்பட்டுள்ளது, மேலும் விருப்பத்திற்குரியது. கடந்த கால சாதனங்களிலிருந்து வெளியேறலாமா வேண்டாமா என்பதைத் தேர்வுசெய்தவுடன், நீங்கள் உங்கள் சொந்த சாதனங்களிலிருந்து வெளியேறிவிடுவீர்கள்."
"messageformat": "இப்போது உங்கள் சாட் வரலாற்றையும் உங்கள் கடைசி 45 நாட்கள் ஊடகத்தையும் புதிதாக இணைக்கப்பட்ட சாதனத்திற்கு இடமாற்ற நீங்கள் தேர்வு செய்யலாம். இடமாற்றச் செயல்முறை இருமுனை மறைகுறியாக்கப்பட்டுள்ளது, மேலும் விருப்பத்திற்குரியது. கடந்த கால சாதனங்களிலிருந்து வெளியேறலாமா வேண்டாமா என்பதைத் தேர்வுசெய்தவுடன், நீங்கள் உங்கள் சொந்த சாதனங்களிலிருந்து வெளியேறிவிடுவீர்கள்."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "మొత్తం సమాచారమును తొలగించేదా?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal డెస్క్‌టాప్ యొక్క ఈ వెర్షన్ నుండి మొత్తం డేటా మరియు సందేశాలను తొలగించేదా? మీ ఫోన్ లేదా ఇతర లింక్ చేయబడిన పరికరాలలో మీ Signal ఖాతా మరియు డేటా తొలగించబడవు."
},
"icu:deleteAllDataProgress": {
"messageformat": "మొత్తం డేటాను డిస్‌కనెక్ట్ చేస్తోంది మరియు తొలగిస్తోంది…"

View File

@ -1593,7 +1593,7 @@
"messageformat": "ลบข้อมูลทั้งหมดหรือไม่"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "คุณต้องการลบข้อมูลและข้อความทั้งหมดออกจาก Signal เดสก์ท็อปเวอร์ชันนี้ใช่หรือไม่ อย่างไรก็ดี ระบบจะไม่ลบบัญชี Signal และข้อมูลของคุณที่อยู่บนมือถือหรืออุปกรณ์ที่เชื่อมโยงอยู่เครื่องอื่นๆ"
},
"icu:deleteAllDataProgress": {
"messageformat": "กำลังยกเลิกการเชื่อมต่อและลบข้อมูลทั้งหมด…"

View File

@ -1593,7 +1593,7 @@
"messageformat": "Gusto mo bang i-burahin ang lahat ng data?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Gusto mo bang burahin ang lahat ng data at messages mula sa version na ito ng Signal Desktop? Hindi mabubura ang iyong Signal account at data nito sa phone mo o ibang linked devices."
},
"icu:deleteAllDataProgress": {
"messageformat": "Dini-disconnect at binubura ang lahat ng data…"

View File

@ -1593,7 +1593,7 @@
"messageformat": "Tüm veri silinsin mi?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal Desktop'ın bu sürümündeki tüm veriler ve mesajlar silinsin mi? Signal hesabın ve telefonundaki veya diğer bağlı cihazlarındaki veriler silinmez."
},
"icu:deleteAllDataProgress": {
"messageformat": "Bağlantı kesiliyor ve tüm veriler siliniyor…"
@ -5819,6 +5819,6 @@
"messageformat": "Bazı sohbetlerin doğru şekilde açılmasını engelleyen nadir bir hatayı düzelttik."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Bundan böyle sohbet geçmişini ve son 45 günlük medyanı yeni bağlanmış bir cihaza aktarmayı tercih edebilirsin. Aktarım süreci uçtan uca şifrelidir ve tamamen isteğe bağlıdır. İster geçmişi arkanda bırak ister bugüne taşı; kararı kendin ver!"
"messageformat": "Bundan böyle birincil Signal cihazını yeni bir Desktop'a bağlarsan sohbet geçmişini ve son 45 günlük medyanı yanında getirebilirsin. Aktarım süreci uçtan uca şifrelidir ve tamamen isteğe bağlıdır. İster geçmişi arkanda bırak ister bugüne taşı; kararı kendin ver!"
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "بارلىق سانلىق مەلۇماتنى ئۆچۈرەمسىز؟"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal ئۈستەليۈزىنىڭ بۇ قېتىملىق نەشرىدىكى بارلىق سانلىق مەلۇمات ۋە ئۇچۇرلارنى ئۆچۈرەمسىز؟ سىگنال ھېساباتىڭىز ، تېلېفونىڭىز ياكى باشقا ئۇلانغان ئۈسكۈنىلەردىكى سانلىق مەلۇماتلىرىڭىز ئۆچۈرۈلمەيدۇ."
},
"icu:deleteAllDataProgress": {
"messageformat": "بارلىق سانلىق مەلۇماتلارنى ئۇلىنىشتىن ئاجرىتىۋاتىدۇ ۋە ئۆچۈرىۋاتىدۇ…"
@ -5819,6 +5819,6 @@
"messageformat": "بىز بەزى پاراڭلارنىڭ توغرا ئېچىلىشىنىڭ ئالدىنى ئالدىغان كەم ئۇچرايدىغان بىر كەمتۈكنى ئوڭشىدۇق."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "ھازىر پاراڭلىشىش تارىخى ۋە ئاخىرقى 45 كۈنلۈك مېدىيانى يېڭى ئۇلىنىش ئۈسكۈنىلىرىگە يۆتكەشنى تاللىسىڭىز بولىدۇ. يۆتكەش جەريانى ئاخىرىغىچە مەخپىيلەشتۈرۈلگەن ، ۋە پۈتۈنلەي ئىختىيارىي. يۆتكەش جەريانى ئاخىرىغىچە مەخپىيلەشتۈرۈلگەن بولۇپ ، پۈتۈنلەي ئىختىيارى بولىدۇ. ھازىر پاراڭلىشىش تارىخى ۋە ئاخىرقى 45 كۈنلۈك مېدىيانى يېڭى ئۇلىنىش ئۈسكۈنىلىرىگە يۆتكەشنى تاللىسىڭىز بولىدۇ. يۆتكەش جەريانى ئاخىرىغىچە مەخپىيلەشتۈرۈلگەن ، ۋە پۈتۈنلەي ئىختىيارىي."
"messageformat": "ھازىر دەسلەپكى Signal ئۈسكۈنىڭىزنى يېڭى ئۈستەل يۈزىگە ئۇلىسىڭىز ، پاراڭلىشىش تارىخىڭىزنى ۋە ئاخىرقى 45 كۈنلۈك مېدىيانى بىرلىكتە يۆتكىيەلەيسىز. يۆتكەش جەريانى ئاخىرىغىچە مەخپىيلەشتۈرۈلگەن بولۇپ ، پۈتۈنلەي ئىختىيارى بولىدۇ. ئۆتمۈشنى ئارقىدا قالدۇرۇش ياكى قالدۇرماسلىقنى تاللاشقا كەلسەك ،بۇ تاللاش ئۆزىڭىزدە."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Видалити всі дані?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Видалити всі дані й повідомлення з цієї версії Signal Desktop? Ваш акаунт Signal і дані на телефоні й інших зв'язаних пристроях не буде видалено."
},
"icu:deleteAllDataProgress": {
"messageformat": "Триває від'єднання й видалення всіх даних…"
@ -5819,6 +5819,6 @@
"messageformat": "Ми виправили рідкісну помилку, через яку чати іноді не відкривалися, коли ви їх вибирали. Хай відкритими будуть чати, а не питання на кшталт «Та чому ж воно не працює?»."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Тепер, зв'язуючи основний пристрій Signal з новим комп'ютером чи iPad, ви також можете переносити історію чатів і медіафайли за минулі 45 днів. Процес перенесення захищено наскрізним шифруванням. А ще воно необов'язкове, тож тільки вам вирішувати, чи зберегти минуле в пам'яті пристрою, чи тільки у своїй власній."
"messageformat": "Тепер, зв'язуючи основний пристрій Signal з новим комп'ютером, ви також можете переносити історію чатів і медіафайли за минулі 45 днів. Процес перенесення захищено наскрізним шифруванням. А ще воно необов'язкове, тож тільки вам вирішувати, чи зберегти минуле в пам'яті пристрою, чи тільки у своїй власній."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "تمام ڈیٹا کو حذف کریں؟"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Signal ڈیسک ٹاپ کے اس ورژن سے تمام ڈیٹا اور میسجز کو حذف کریں؟ آپ کا Signal اکاؤنٹ اور آپ کے فون یا دیگر مربوشط کردہ ڈیوائسز پر موجود ڈیٹا حذف نہیں کیا جائے گا۔"
},
"icu:deleteAllDataProgress": {
"messageformat": "منقطع کیا جا رہا ہے اور تمام ڈیٹا خذف کیا جا رہا ہے…"
@ -5819,6 +5819,6 @@
"messageformat": "ہم نے ایک ایسے شاذو نادر پیش آنے والے نقص کو ٹھیک کیا ہے جس کی وجہ سے کچھ چیٹس ٹھیک طرح سے کھل نہیں رہی تھیں۔"
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "اب آپ اپنی چیٹ ہسٹری اور گزشتہ 45 دن کے میڈیا کو ایک نئی لنک کردہ ڈیوائس پر ٹرانسفر کرنے کا انتخاب کر سکتے ہیں۔ ٹرانسفر کرنے کا عمل شروع سے آخر تک انکرپٹ کردہ، اور مکمل طور پر اختیاری ہے۔"
"messageformat": "اب جب آپ اپنی بنیادی Signal ڈیوائس کو ایک نئے ڈیسک ٹاپ کے ساتھ لنک کریں گے، تو آپ اپنی چیٹ ہسٹری اور گزشتہ 45 دنوں کا میڈیا اس میں اپنے ساتھ لا سکتے ہیں۔ ٹرانسفر کا عمل اینڈ ٹو اینڈ انکرپٹ کردہ ہے، اور مکمل طور پر اختیاری ہے۔ جب یہ انتخاب کرنے کی بات آتی ہے کہ آیا ماضی کو پیچھے چھوڑنا ہے یا نہیں، تو آپ اپنی ڈیوائسز پر انحصار کرتے ہیں۔"
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "Xóa tất cả dữ liệu ?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "Xóa tất cả ứng dụng và tin nhắn khỏi phiên bản Signal Desktop này? Tài khoản Signal và dữ liệu của bạn trên điện thoại hoặc các thiết bị đã liên kết sẽ không bị xóa."
},
"icu:deleteAllDataProgress": {
"messageformat": "Đang ngắt kết nối và xóa toàn bộ dữ liệu…"
@ -5819,6 +5819,6 @@
"messageformat": "Chúng tôi đã sửa một lỗi hiếm gặp khiến một số cuộc trò chuyện không mở đúng cách."
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "Giờ đây bạn có thể chọn chuyển lịch sử trò chuyện và tập tin đa phương tiện trong 45 ngày vừa qua của mình đến thiết bị liên kết mới. Quá trình chuyển dữ liệu được mã hóa đầu cuối và hoàn toàn là tùy chọn."
"messageformat": "Giờ đây bạn có thể chọn chuyển lịch sử trò chuyện và tập tin đa phương tiện trong 45 ngày vừa qua của mình đến Máy tính mới liên kết với thiết bị Signal chính."
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "係咪要清除所有資料呀?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "係咪要刪除呢個 Signal 桌面版版本嘅所有資料同訊息?你嘅 Signal 帳戶同埋手機或者其他已連結裝置上面嘅資料係唔會刪除嘅。"
},
"icu:deleteAllDataProgress": {
"messageformat": "中斷緊連接,同刪除緊資料…"
@ -5819,6 +5819,6 @@
"messageformat": "我哋修正咗一個罕見錯誤,佢導致某啲聊天冇辦法正常打開。"
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "而家,如果你想將主要 Signal 裝置連去新嘅桌面電腦或者 iPad,可以帶走埋聊天紀錄同最近 45 日嘅媒體。轉移過程係端對端加密,完全由你選擇。至於係咪要拋開過去,就你自己決定喇。"
"messageformat": "而家,如果你想將主要 Signal 裝置連去新嘅桌面電腦,可以帶走埋聊天紀錄同最近 45 日嘅媒體。轉移過程係端對端加密,完全由你選擇。至於係咪要拋開過去,就你自己決定喇。"
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "是否删除所有数据?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "要删除此版 Signal Desktop 中的所有数据和消息吗?您的 Signal 账户和您手机或其他已链接设备上的数据不会被删除。"
},
"icu:deleteAllDataProgress": {
"messageformat": "正在断开连接并删除所有数据…"
@ -5819,6 +5819,6 @@
"messageformat": "我们修复了一个会导致一些聊天无法正确打开的罕见漏洞。"
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "现在您可以选择将聊天记录和最近 45 天的媒体转移到新的已链接设备。转移过程受端到端加密保护,并且是完全可选的选项。"
"messageformat": "现在当您将主 Signal 设备链接到新的桌面版时,您可以选择一并转移聊天记录和最近 45 天的媒体。转移过程受端到端加密保护,并且是完全可选的选项。当面临选择是否抛弃过往记录时,您可自行决定。"
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "刪除所有資料?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "要刪除 Signal 桌面版此版本的所有資料和訊息嗎?你的 Signal 帳戶和手機或其他已連結裝置上的資料將不會被刪除。"
},
"icu:deleteAllDataProgress": {
"messageformat": "正在中斷連線並刪除所有資料…"
@ -5819,6 +5819,6 @@
"messageformat": "我們修正了一個罕見的錯誤,會使某些聊天在選擇後無法正常開啟。"
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "現在,當你將主要 Signal 裝置連結至新的桌面電腦或 iPad 時,你可以轉移聊天紀錄和最近 45 天的媒體。轉移過程是端對端加密的,且完全可自由選擇。是否要拋開過去,就取決於你自己的意願了。"
"messageformat": "現在,當你將主要 Signal 裝置連結至新的桌面電腦時,你可以轉移聊天紀錄和最近 45 天的媒體。轉移過程是端對端加密的,且完全可自由選擇。是否要拋開過去,就取決於你自己的意願了。"
}
}

View File

@ -1593,7 +1593,7 @@
"messageformat": "刪除所有資料?"
},
"icu:deleteAllDataBody": {
"messageformat": "Delete all data and messages from this version of Signal Desktop? Your Signal account and data on your phone or other linked devices will not be deleted."
"messageformat": "要刪除 Signal 桌面版此版本的所有資料和訊息嗎?你的 Signal 帳戶和手機或其他已連結裝置上的資料將不會被刪除。"
},
"icu:deleteAllDataProgress": {
"messageformat": "正在中斷連線並刪除所有資料…"
@ -5819,6 +5819,6 @@
"messageformat": "我們修正了一個罕見的錯誤,會使某些聊天在選擇後無法正常開啟。"
},
"icu:WhatsNew__v7.40--1": {
"messageformat": "現在,當你將主要 Signal 裝置連結至新的桌面電腦或 iPad 時,你可以轉移聊天紀錄和最近 45 天的媒體。轉移過程是端對端加密的,且完全可自由選擇。是否要拋開過去,就取決於你自己的意願了。"
"messageformat": "現在,當你將主要 Signal 裝置連結至新的桌面電腦時,你可以轉移聊天紀錄和最近 45 天的媒體。轉移過程是端對端加密的,且完全可自由選擇。是否要拋開過去,就取決於你自己的意願了。"
}
}

View File

@ -844,6 +844,8 @@ async function createWindow() {
mainWindow.on('resize', captureWindowStats);
mainWindow.on('move', captureWindowStats);
mainWindow.on('maximize', captureWindowStats);
mainWindow.on('unmaximize', captureWindowStats);
if (!ciMode && config.get<boolean>('openDevTools')) {
// Open the DevTools.
@ -950,6 +952,9 @@ async function createWindow() {
return;
}
// Persist pending window settings to ephemeralConfig
debouncedSaveStats.flush();
windowState.markRequestedShutdown();
await requestShutdown();
windowState.markReadyForShutdown();
@ -1005,9 +1010,7 @@ async function createWindow() {
mainWindow.webContents.send('ci:event', 'db-initialized', {});
const shouldShowWindow =
!app.getLoginItemSettings().wasOpenedAsHidden &&
!startInTray &&
!config.get<boolean>('ciIsBackupIntegration');
!app.getLoginItemSettings().wasOpenedAsHidden && !startInTray;
if (shouldShowWindow) {
getLogger().info('showing main window');
@ -2748,12 +2751,11 @@ ipc.on('get-config', async event => {
: getEnvironment(),
isMockTestEnvironment: Boolean(process.env.MOCK_TEST),
ciMode,
ciForceUnprocessed: config.get<boolean>('ciForceUnprocessed'),
devTools: defaultWebPrefs.devTools,
// Should be already computed and cached at this point
dnsFallback: await getDNSFallback(),
disableIPv6: DISABLE_IPV6,
ciBackupPath: config.get<string | null>('ciBackupPath') || undefined,
ciIsBackupIntegration: config.get<boolean>('ciIsBackupIntegration'),
nodeVersion: process.versions.node,
hostname: os.hostname(),
osRelease: os.release(),
@ -2902,14 +2904,13 @@ function handleSignalRoute(route: ParsedSignalRoute) {
value: route.args.encryptedUsername,
});
} else if (route.key === 'showConversation') {
mainWindow.webContents.send('show-conversation-via-notification', {
conversationId: route.args.conversationId,
messageId: route.args.messageId,
storyId: route.args.storyId,
});
mainWindow.webContents.send(
'show-conversation-via-token',
route.args.token
);
} else if (route.key === 'startCallLobby') {
mainWindow.webContents.send('start-call-lobby', {
conversationId: route.args.conversationId,
token: route.args.token,
});
} else if (route.key === 'linkCall') {
mainWindow.webContents.send('start-call-link', {

View File

@ -37,10 +37,8 @@ const Image = (props: { id: string; src: string; 'hint-crop': string }) =>
export function renderWindowsToast({
avatarPath,
body,
conversationId,
heading,
messageId,
storyId,
token,
type,
}: WindowsNotificationData): string {
// Note: with these templates, the first <text> is one line, bolded
@ -58,13 +56,11 @@ export function renderWindowsToast({
// 2) this also maps to the url-handling in main.ts
if (type === NotificationType.Message || type === NotificationType.Reaction) {
launch = showConversationRoute.toAppUrl({
conversationId,
messageId: messageId ?? null,
storyId: storyId ?? null,
token,
});
} else if (type === NotificationType.IncomingGroupCall) {
launch = startCallLobbyRoute.toAppUrl({
conversationId,
token,
});
} else if (type === NotificationType.IncomingCall) {
launch = showWindowRoute.toAppUrl({});

View File

@ -17,8 +17,7 @@
"registrationChallengeUrl": "https://signalcaptchas.org/staging/registration/generate.html",
"updatesEnabled": false,
"ciMode": false,
"ciBackupPath": null,
"ciIsBackupIntegration": false,
"ciForceUnprocessed": false,
"forcePreloadBundle": false,
"openDevTools": false,
"buildCreation": 0,

28
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "signal-desktop",
"version": "7.42.0-alpha.1",
"version": "7.42.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "signal-desktop",
"version": "7.42.0-alpha.1",
"version": "7.42.0",
"hasInstallScript": true,
"license": "AGPL-3.0-only",
"dependencies": {
@ -21,10 +21,10 @@
"@popperjs/core": "2.11.8",
"@react-aria/utils": "3.25.3",
"@react-spring/web": "9.7.5",
"@signalapp/better-sqlite3": "9.0.10",
"@signalapp/libsignal-client": "0.65.4",
"@signalapp/better-sqlite3": "9.0.11",
"@signalapp/libsignal-client": "0.65.5",
"@signalapp/quill-cjs": "2.1.2",
"@signalapp/ringrtc": "2.49.3",
"@signalapp/ringrtc": "2.49.4",
"@types/fabric": "4.5.3",
"backbone": "1.6.0",
"blob-util": "2.0.2",
@ -6460,9 +6460,9 @@
"dev": true
},
"node_modules/@signalapp/better-sqlite3": {
"version": "9.0.10",
"resolved": "https://registry.npmjs.org/@signalapp/better-sqlite3/-/better-sqlite3-9.0.10.tgz",
"integrity": "sha512-c3Ziu9UN7+7KC3LEyMSOmThCtecPNkg7xGuMVe5okldaCaPM4qneAouEg0DM73FlHrNIEKcMw89Rk4/XBy8JTA==",
"version": "9.0.11",
"resolved": "https://registry.npmjs.org/@signalapp/better-sqlite3/-/better-sqlite3-9.0.11.tgz",
"integrity": "sha512-mxWSTAekSeKnN84Y9L2p5lvPspT68J1gkaHSrlDlAkuJhYMwKJ6Ab47IGwYhjkmIhmukgkKQGQ7nxQ4JHGIvbQ==",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
@ -6471,9 +6471,9 @@
}
},
"node_modules/@signalapp/libsignal-client": {
"version": "0.65.4",
"resolved": "https://registry.npmjs.org/@signalapp/libsignal-client/-/libsignal-client-0.65.4.tgz",
"integrity": "sha512-0yo3VJwwba6wB6A6dd7lp8Kl8nyd+ns2CswVGyeLpGFWyES5Riowe4fAKvVGb7fOltF1hAyxhhAImGpvHwOFWA==",
"version": "0.65.5",
"resolved": "https://registry.npmjs.org/@signalapp/libsignal-client/-/libsignal-client-0.65.5.tgz",
"integrity": "sha512-8AmLOuR4J62jhy/+Roh1CLmLUN5PHBJ78/3bJZVNvwMGGIjdee8mIuWi1jwMqOvhyMk+eBuduBSmzqIYHKm3BA==",
"hasInstallScript": true,
"license": "AGPL-3.0-only",
"dependencies": {
@ -6585,9 +6585,9 @@
"license": "MIT"
},
"node_modules/@signalapp/ringrtc": {
"version": "2.49.3",
"resolved": "https://registry.npmjs.org/@signalapp/ringrtc/-/ringrtc-2.49.3.tgz",
"integrity": "sha512-rFTODvCuM9CaFqR1RYTXy5VROcUCbxfR0Nuc8WDFkh7rlWpPRAkYQIqw+sssTa+Tro3ZjmHt4J0B4d4O0sK3hA==",
"version": "2.49.4",
"resolved": "https://registry.npmjs.org/@signalapp/ringrtc/-/ringrtc-2.49.4.tgz",
"integrity": "sha512-yzCI2hYUY9Sr9i7N+FSPGaKCdvs2vmZg7pPkQgFTlUxQmYHqWcUVOiT+SkvkoanN+nCSEn7owhxaXDxbEvIK0w==",
"hasInstallScript": true,
"license": "AGPL-3.0-only",
"dependencies": {

View File

@ -5,7 +5,7 @@
"description": "Private messaging from your desktop",
"desktopName": "signal.desktop",
"repository": "https://github.com/signalapp/Signal-Desktop.git",
"version": "7.42.0-alpha.1",
"version": "7.42.0",
"license": "AGPL-3.0-only",
"author": {
"name": "Signal Messenger, LLC",
@ -112,10 +112,10 @@
"@popperjs/core": "2.11.8",
"@react-aria/utils": "3.25.3",
"@react-spring/web": "9.7.5",
"@signalapp/better-sqlite3": "9.0.10",
"@signalapp/libsignal-client": "0.65.4",
"@signalapp/better-sqlite3": "9.0.11",
"@signalapp/libsignal-client": "0.65.5",
"@signalapp/quill-cjs": "2.1.2",
"@signalapp/ringrtc": "2.49.3",
"@signalapp/ringrtc": "2.49.4",
"@types/fabric": "4.5.3",
"backbone": "1.6.0",
"blob-util": "2.0.2",

View File

@ -31,6 +31,7 @@ message BackupInfo {
// For example, Chats may all be together at the beginning,
// or may each immediately precede its first ChatItem.
message Frame {
// If unset, importers should skip this frame without throwing an error.
oneof item {
AccountData account = 1;
Recipient recipient = 2;
@ -45,13 +46,13 @@ message Frame {
message AccountData {
enum PhoneNumberSharingMode {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Nobody"
EVERYBODY = 1;
NOBODY = 2;
}
message UsernameLink {
enum Color {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Blue"
BLUE = 1;
WHITE = 2;
GREY = 3;
@ -98,6 +99,7 @@ message AccountData {
message IAPSubscriberData {
bytes subscriberId = 1;
// If unset, importers should ignore the subscriber data without throwing an error.
oneof iapSubscriptionId {
// Identifies an Android Play Store IAP subscription.
string purchaseToken = 2;
@ -120,6 +122,7 @@ message AccountData {
message Recipient {
uint64 id = 1; // generated id for reference only within this file
// If unset, importers should skip this frame without throwing an error.
oneof destination {
Contact contact = 2;
Group group = 3;
@ -132,9 +135,9 @@ message Recipient {
message Contact {
enum IdentityState {
DEFAULT = 0;
DEFAULT = 0; // A valid value -- indicates unset by the user
VERIFIED = 1;
UNVERIFIED = 2;
UNVERIFIED = 2; // Was once verified and is now unverified
}
message Registered {}
@ -143,7 +146,7 @@ message Contact {
}
enum Visibility {
VISIBLE = 0;
VISIBLE = 0; // A valid value -- the contact is not hidden
HIDDEN = 1;
HIDDEN_MESSAGE_REQUEST = 2;
}
@ -160,6 +163,7 @@ message Contact {
bool blocked = 5;
Visibility visibility = 6;
// If unset, consider the user to be registered
oneof registration {
Registered registered = 7;
NotRegistered notRegistered = 8;
@ -178,7 +182,7 @@ message Contact {
message Group {
enum StorySendMode {
DEFAULT = 0;
DEFAULT = 0; // A valid value -- indicates unset by the user
DISABLED = 1;
ENABLED = 2;
}
@ -212,6 +216,7 @@ message Group {
}
message GroupAttributeBlob {
// If unset, consider the field it represents to not be present
oneof content {
string title = 1;
bytes avatar = 2;
@ -222,7 +227,7 @@ message Group {
message Member {
enum Role {
UNKNOWN = 0;
UNKNOWN = 0; // Intepret as "Default"
DEFAULT = 1;
ADMINISTRATOR = 2;
}
@ -254,7 +259,7 @@ message Group {
message AccessControl {
enum AccessRequired {
UNKNOWN = 0;
UNKNOWN = 0; // Intepret as "Unsatisfiable"
ANY = 1;
MEMBER = 2;
ADMINISTRATOR = 3;
@ -294,7 +299,7 @@ message Chat {
*/
message CallLink {
enum Restrictions {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Admin Approval"
NONE = 1;
ADMIN_APPROVAL = 2;
}
@ -308,7 +313,7 @@ message CallLink {
message AdHocCall {
enum State {
UNKNOWN_STATE = 0;
UNKNOWN_STATE = 0; // Interpret as "Generic"
GENERIC = 1;
}
@ -324,6 +329,7 @@ message DistributionListItem {
// by an all-0 UUID (00000000-0000-0000-0000-000000000000).
bytes distributionId = 1; // distribution list ids are uuids
// If unset, importers should skip the item entirely without showing an error.
oneof item {
uint64 deletionTimestamp = 2;
DistributionList distributionList = 3;
@ -332,7 +338,7 @@ message DistributionListItem {
message DistributionList {
enum PrivacyMode {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Only with"
ONLY_WITH = 1;
ALL_EXCEPT = 2;
ALL = 3;
@ -367,12 +373,14 @@ message ChatItem {
repeated ChatItem revisions = 6; // ordered from oldest to newest
bool sms = 7;
// If unset, importers should skip this item without throwing an error.
oneof directionalDetails {
IncomingMessageDetails incoming = 8;
OutgoingMessageDetails outgoing = 9;
DirectionlessMessageDetails directionless = 10;
}
// If unset, importers should skip this item without throwing an error.
oneof item {
StandardMessage standardMessage = 11;
ContactMessage contactMessage = 12;
@ -421,6 +429,7 @@ message SendStatus {
uint64 recipientId = 1;
uint64 timestamp = 2; // the time the status was last updated -- if from a receipt, it should be the sentTime of the receipt
// If unset, importers should consider the status to be "pending"
oneof deliveryStatus {
Pending pending = 3;
Sent sent = 4;
@ -457,6 +466,7 @@ message DirectStoryReplyMessage {
FilePointer longText = 2;
}
// If unset, importers should ignore the message without throwing an error.
oneof reply {
TextReply textReply = 1;
string emoji = 2;
@ -475,7 +485,7 @@ message PaymentNotification {
message FailedTransaction { // Failed payments can't be synced from the ledger
enum FailureReason {
GENERIC = 0;
GENERIC = 0; // A valid value -- reason unknown
NETWORK = 1;
INSUFFICIENT_FUNDS = 2;
}
@ -484,7 +494,7 @@ message PaymentNotification {
message Transaction {
enum Status {
INITIAL = 0;
INITIAL = 0; // A valid value -- state unconfirmed
SUBMITTED = 1;
SUCCESSFUL = 2;
}
@ -501,6 +511,7 @@ message PaymentNotification {
optional bytes receipt = 7; // mobile coin blobs
}
// If unset, importers should treat the transaction as successful with no metadata.
oneof payment {
Transaction transaction = 1;
FailedTransaction failedTransaction = 2;
@ -515,7 +526,7 @@ message PaymentNotification {
message GiftBadge {
enum State {
UNOPENED = 0;
UNOPENED = 0; // A valid state
OPENED = 1;
REDEEMED = 2;
FAILED = 3;
@ -543,7 +554,7 @@ message ContactAttachment {
message Phone {
enum Type {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Home"
HOME = 1;
MOBILE = 2;
WORK = 3;
@ -557,7 +568,7 @@ message ContactAttachment {
message Email {
enum Type {
UNKNOWN = 0;
UNKNOWN = 0; // Intepret as "Home"
HOME = 1;
MOBILE = 2;
WORK = 3;
@ -571,7 +582,7 @@ message ContactAttachment {
message PostalAddress {
enum Type {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Home"
HOME = 1;
WORK = 2;
CUSTOM = 3;
@ -631,7 +642,7 @@ message MessageAttachment {
// but explicitly mutually exclusive. Note the different raw values
// (non-zero starting values are not supported in proto3.)
enum Flag {
NONE = 0;
NONE = 0; // A valid value -- no flag applied
VOICE_MESSAGE = 1;
BORDERLESS = 2;
GIF = 3;
@ -682,6 +693,7 @@ message FilePointer {
message InvalidAttachmentLocator {
}
// If unset, importers should consider it to be an InvalidAttachmentLocator without throwing an error.
oneof locator {
BackupLocator backupLocator = 1;
AttachmentLocator attachmentLocator = 2;
@ -700,7 +712,7 @@ message FilePointer {
message Quote {
enum Type {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Normal"
NORMAL = 1;
GIFT_BADGE = 2;
VIEW_ONCE = 3;
@ -721,7 +733,7 @@ message Quote {
message BodyRange {
enum Style {
NONE = 0;
NONE = 0; // Importers should ignore the body range without throwing an error.
BOLD = 1;
ITALIC = 2;
SPOILER = 3;
@ -734,6 +746,7 @@ message BodyRange {
uint32 start = 1;
uint32 length = 2;
// If unset, importers should ignore the body range without throwing an error.
oneof associatedValue {
bytes mentionAci = 3;
Style style = 4;
@ -750,6 +763,7 @@ message Reaction {
}
message ChatUpdateMessage {
// If unset, importers should ignore the update message without throwing an error.
oneof update {
SimpleChatUpdate simpleUpdate = 1;
GroupChangeChatUpdate groupChange = 2;
@ -765,19 +779,19 @@ message ChatUpdateMessage {
message IndividualCall {
enum Type {
UNKNOWN_TYPE = 0;
UNKNOWN_TYPE = 0; // Interpret as "Audio call"
AUDIO_CALL = 1;
VIDEO_CALL = 2;
}
enum Direction {
UNKNOWN_DIRECTION = 0;
UNKNOWN_DIRECTION = 0; // Interpret as "Incoming"
INCOMING = 1;
OUTGOING = 2;
}
enum State {
UNKNOWN_STATE = 0;
UNKNOWN_STATE = 0; // Interpret as "Accepted"
ACCEPTED = 1;
NOT_ACCEPTED = 2;
// An incoming call that is no longer ongoing, which we neither accepted
@ -798,7 +812,7 @@ message IndividualCall {
message GroupCall {
enum State {
UNKNOWN_STATE = 0;
UNKNOWN_STATE = 0; // Interpret as "Generic"
// A group call was started without ringing.
GENERIC = 1;
// We joined a group call that was started without ringing.
@ -829,7 +843,7 @@ message GroupCall {
message SimpleChatUpdate {
enum Type {
UNKNOWN = 0;
UNKNOWN = 0; // Importers should skip the update without throwing an error.
JOINED_SIGNAL = 1;
IDENTITY_UPDATE = 2;
IDENTITY_VERIFIED = 3;
@ -863,6 +877,7 @@ message ProfileChangeChatUpdate {
}
message LearnedProfileChatUpdate {
// If unset, importers should consider the previous name to be an empty string.
oneof previousName {
uint64 e164 = 1;
string username = 2;
@ -879,6 +894,7 @@ message SessionSwitchoverChatUpdate {
message GroupChangeChatUpdate {
message Update {
// If unset, importers should consider it to be a GenericGroupUpdate with unset updaterAci
oneof update {
GenericGroupUpdate genericGroupUpdate = 1;
GroupCreationUpdate groupCreationUpdate = 2;
@ -948,7 +964,7 @@ message GroupDescriptionUpdate {
}
enum GroupV2AccessLevel {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Unsatisfiable"
ANY = 1;
MEMBER = 2;
ADMINISTRATOR = 3;
@ -1138,6 +1154,7 @@ message ChatStyle {
message CustomChatColor {
uint64 id = 1;
// If unset, use the default chat color
oneof color {
fixed32 solid = 2; // 0xAARRGGBB
Gradient gradient = 3;
@ -1148,7 +1165,7 @@ message ChatStyle {
}
enum WallpaperPreset {
UNKNOWN_WALLPAPER_PRESET = 0;
UNKNOWN_WALLPAPER_PRESET = 0; // Interpret as the wallpaper being unset
SOLID_BLUSH = 1;
SOLID_COPPER = 2;
SOLID_DUST = 3;
@ -1173,7 +1190,7 @@ message ChatStyle {
}
enum BubbleColorPreset {
UNKNOWN_BUBBLE_COLOR_PRESET = 0;
UNKNOWN_BUBBLE_COLOR_PRESET = 0; // Interpret as the user's default chat bubble color
SOLID_ULTRAMARINE = 1;
SOLID_CRIMSON = 2;
SOLID_VERMILION = 3;
@ -1198,6 +1215,7 @@ message ChatStyle {
GRADIENT_TANGERINE = 22;
}
// If unset, importers should consider there to be no wallpaper.
oneof wallpaper {
WallpaperPreset wallpaperPreset = 1;
// This `FilePointer` is expected not to contain a `fileName`, `width`,
@ -1205,6 +1223,7 @@ message ChatStyle {
FilePointer wallpaperPhoto = 2;
}
// If unset, importers should consider it to be AutomaticBubbleColor
oneof bubbleColor {
// Bubble setting is automatically determined based on the wallpaper setting,
// or `SOLID_ULTRAMARINE` for `noWallpaper`
@ -1220,7 +1239,7 @@ message ChatStyle {
message NotificationProfile {
enum DayOfWeek {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Monday"
MONDAY = 1;
TUESDAY = 2;
WEDNESDAY = 3;
@ -1246,7 +1265,7 @@ message NotificationProfile {
message ChatFolder {
// Represents the default "All chats" folder record vs all other custom folders
enum FolderType {
UNKNOWN = 0;
UNKNOWN = 0; // Interpret as "Custom"
ALL = 1;
CUSTOM = 2;
}

View File

@ -5946,6 +5946,10 @@ button.module-calling-participants-list__contact {
overflow-anchor: auto;
}
}
&--scroll-locked {
// Component also applies flex-basis to prevent shrinkage
flex-shrink: 0;
}
&--have-oldest {
justify-content: flex-start;

View File

@ -10,6 +10,7 @@ import * as log from './logging/log';
import { explodePromise } from './util/explodePromise';
import { AccessType, ipcInvoke } from './sql/channels';
import { backupsService } from './services/backups';
import { notificationService } from './services/notifications';
import { AttachmentBackupManager } from './jobs/AttachmentBackupManager';
import { migrateAllMessages } from './messages/migrateMessageData';
import { SECOND } from './util/durations';
@ -22,6 +23,7 @@ type ResolveType = (data: unknown) => void;
export type CIType = {
deviceName: string;
getConversationId: (address: string | null) => string | null;
createNotificationToken: (address: string) => string | undefined;
getMessagesBySentAt(
sentAt: number
): Promise<ReadonlyArray<MessageAttributesType>>;
@ -42,13 +44,18 @@ export type CIType = {
unlink: () => void;
print: (...args: ReadonlyArray<unknown>) => void;
resetReleaseNotesFetcher(): void;
forceUnprocessed: boolean;
};
export type GetCIOptionsType = Readonly<{
deviceName: string;
forceUnprocessed: boolean;
}>;
export function getCI({ deviceName }: GetCIOptionsType): CIType {
export function getCI({
deviceName,
forceUnprocessed,
}: GetCIOptionsType): CIType {
const eventListeners = new Map<string, Array<ResolveType>>();
const completedEvents = new Map<string, Array<unknown>>();
@ -152,6 +159,19 @@ export function getCI({ deviceName }: GetCIOptionsType): CIType {
return window.ConversationController.getConversationId(address);
}
function createNotificationToken(address: string): string | undefined {
const id = window.ConversationController.getConversationId(address);
if (!id) {
return undefined;
}
return notificationService._createToken({
conversationId: id,
messageId: undefined,
storyId: undefined,
});
}
async function openSignalRoute(url: string) {
strictAssert(
isSignalRoute(url),
@ -196,6 +216,7 @@ export function getCI({ deviceName }: GetCIOptionsType): CIType {
return {
deviceName,
getConversationId,
createNotificationToken,
getMessagesBySentAt,
handleEvent,
setProvisioningURL,
@ -208,5 +229,6 @@ export function getCI({ deviceName }: GetCIOptionsType): CIType {
getPendingEventCount,
print,
resetReleaseNotesFetcher,
forceUnprocessed,
};
}

View File

@ -65,11 +65,6 @@ export function restoreRemoteConfigFromStorage(): void {
config = window.storage.get('remoteConfig') || {};
}
export async function initRemoteConfig(server: WebAPIType): Promise<void> {
restoreRemoteConfigFromStorage();
await maybeRefreshRemoteConfig(server);
}
export function onChange(
key: ConfigKeyType,
fn: ConfigListenerType
@ -83,7 +78,7 @@ export function onChange(
};
}
export const refreshRemoteConfig = async (
export const _refreshRemoteConfig = async (
server: WebAPIType
): Promise<void> => {
const now = Date.now();
@ -93,7 +88,7 @@ export const refreshRemoteConfig = async (
if (Math.abs(serverTimeSkew) > HOUR) {
log.warn(
'Remote Config: sever clock skew detected. ' +
'Remote Config: severe clock skew detected. ' +
`Server time ${serverTimestamp}, local time ${now}`
);
}
@ -154,12 +149,21 @@ export const refreshRemoteConfig = async (
};
export const maybeRefreshRemoteConfig = throttle(
refreshRemoteConfig,
_refreshRemoteConfig,
// Only fetch remote configuration if the last fetch was more than two hours ago
2 * 60 * 60 * 1000,
{ trailing: false }
);
export async function forceRefreshRemoteConfig(
server: WebAPIType,
reason: string
): Promise<void> {
log.info(`forceRefreshRemoteConfig: ${reason}`);
maybeRefreshRemoteConfig.cancel();
await _refreshRemoteConfig(server);
}
export function isEnabled(name: ConfigKeyType): boolean {
return get(config, [name, 'enabled'], false);
}

View File

@ -400,7 +400,9 @@ export async function startApp(): Promise<void> {
}
return server.getSocketStatus();
};
let accountManager: AccountManager;
let isInRegistration = false;
window.getAccountManager = () => {
if (accountManager) {
return accountManager;
@ -411,12 +413,14 @@ export async function startApp(): Promise<void> {
accountManager = new window.textsecure.AccountManager(server);
accountManager.addEventListener('startRegistration', () => {
isInRegistration = true;
pauseProcessing();
backupReady.reject(new Error('startRegistration'));
backupReady = explodePromise();
});
accountManager.addEventListener('registration', () => {
isInRegistration = false;
window.Whisper.events.trigger('userChanged', false);
drop(Registration.markDone());
@ -1038,8 +1042,6 @@ export async function startApp(): Promise<void> {
}
});
void window.Signal.RemoteConfig.initRemoteConfig(server);
const retryPlaceholders = new RetryPlaceholders({
retryReceiptLifespan: HOUR,
});
@ -1489,10 +1491,6 @@ export async function startApp(): Promise<void> {
strictAssert(server !== undefined, 'WebAPI not ready');
// Cancel throttled calls to refreshRemoteConfig since our auth changed.
window.Signal.RemoteConfig.maybeRefreshRemoteConfig.cancel();
drop(window.Signal.RemoteConfig.maybeRefreshRemoteConfig(server));
drop(connect(true));
// Connect messageReceiver back to websocket
@ -1594,7 +1592,9 @@ export async function startApp(): Promise<void> {
const onOnline = () => {
log.info('background: online');
if (!remotelyExpired) {
// Do not attempt to connect while expired or in-the-middle of
// registration
if (!remotelyExpired && !isInRegistration) {
drop(connect());
}
};
@ -1848,11 +1848,14 @@ export async function startApp(): Promise<void> {
drop(AttachmentBackupManager.start());
}
if (connectCount === 0) {
if (connectCount === 0 || firstRun) {
try {
// Force a re-fetch before we process our queue. We may want to turn on
// something which changes how we process incoming messages!
await window.Signal.RemoteConfig.refreshRemoteConfig(server);
await window.Signal.RemoteConfig.forceRefreshRemoteConfig(
server,
`connectCount=${connectCount} firstRun=${firstRun}`
);
const expiration = window.Signal.RemoteConfig.getValue(
'desktop.clientExpiration'
@ -2340,17 +2343,17 @@ export async function startApp(): Promise<void> {
if (status === 'installed' && isRemove) {
window.reduxActions.stickers.uninstallStickerPack(id, key, {
fromSync: true,
actionSource: 'syncMessage',
});
} else if (isInstall) {
if (status === 'downloaded') {
window.reduxActions.stickers.installStickerPack(id, key, {
fromSync: true,
actionSource: 'syncMessage',
});
} else {
void Stickers.downloadStickerPack(id, key, {
finalStatus: 'installed',
fromSync: true,
actionSource: 'syncMessage',
});
}
}

View File

@ -9,6 +9,7 @@ import {
matchNewline,
matchBreak,
} from '@signalapp/quill-cjs/modules/clipboard';
import Emitter from '@signalapp/quill-cjs/core/emitter';
import classNames from 'classnames';
import { Manager, Reference } from 'react-popper';
import type { Range as RangeStatic } from '@signalapp/quill-cjs';
@ -828,9 +829,16 @@ export function CompositionInput(props: Props): React.ReactElement {
quillRef.current = quill;
quill.on(Emitter.events.COMPOSITION_START, () => {
quill.root.classList.toggle('ql-blank', false);
});
quill.on(Emitter.events.COMPOSITION_END, () => {
quill.root.classList.toggle('ql-blank', quill.editor.isBlank());
});
// When loading a multi-line message out of a draft, the cursor
// position needs to be pushed to the end of the input manually.
quill.once('editor-change', () => {
quill.once(Emitter.events.EDITOR_CHANGE, () => {
setTimeout(() => {
quill.setSelection(quill.getLength(), 0);
quill.root.classList.add('ql-editor--loaded');
@ -838,7 +846,7 @@ export function CompositionInput(props: Props): React.ReactElement {
});
quill.on(
'selection-change',
Emitter.events.SELECTION_CHANGE,
(newRange: RangeStatic, oldRange: RangeStatic) => {
// If we lose focus, store the last edit point for emoji insertion
if (newRange == null) {

View File

@ -3,6 +3,7 @@
import React, { createRef } from 'react';
import Quill from '@signalapp/quill-cjs';
import Emitter from '@signalapp/quill-cjs/core/emitter';
import type { Delta } from '@signalapp/quill-cjs';
export type Props = {
@ -32,7 +33,7 @@ export class SimpleQuillWrapper extends React.Component<Props> {
);
}
this.quill.on('editor-change', this.props.onChange);
this.quill.on(Emitter.events.EDITOR_CHANGE, this.props.onChange);
const { defaultValue } = this.props;
if (defaultValue) {

View File

@ -167,6 +167,7 @@ export type PropsType = PropsDataType &
type StateType = {
scrollLocked: boolean;
scrollLockHeight: number | undefined;
hasDismissedDirectContactSpoofingWarning: boolean;
hasRecentlyScrolled: boolean;
lastMeasuredWarningHeight: number;
@ -205,6 +206,7 @@ export class Timeline extends React.Component<
// eslint-disable-next-line react/state-in-constructor
override state: StateType = {
scrollLocked: false,
scrollLockHeight: undefined,
hasRecentlyScrolled: true,
hasDismissedDirectContactSpoofingWarning: false,
@ -214,8 +216,16 @@ export class Timeline extends React.Component<
};
#onScrollLockChange = (): void => {
this.setState({
scrollLocked: this.#scrollerLock.isLocked(),
const scrollLocked = this.#scrollerLock.isLocked();
this.setState(() => {
// Prevent scroll due to elements shrinking or disappearing (e.g. typing indicators)
const scrollLockHeight = scrollLocked
? this.#messagesRef.current?.offsetHeight
: undefined;
return {
scrollLocked,
scrollLockHeight,
};
});
};
@ -841,6 +851,7 @@ export class Timeline extends React.Component<
} = this.props;
const {
scrollLocked,
scrollLockHeight,
hasRecentlyScrolled,
lastMeasuredWarningHeight,
newestBottomVisibleMessageId,
@ -1142,6 +1153,11 @@ export class Timeline extends React.Component<
)}
ref={this.#messagesRef}
role="list"
style={
scrollLockHeight
? { flexBasis: scrollLockHeight }
: undefined
}
>
{haveOldest && (
<>

View File

@ -72,7 +72,14 @@ export class LeftPaneInboxHelper extends LeftPaneHelper<LeftPaneInboxPropsType>
}
getRowCount(): number {
const headerCount = this.#hasPinnedAndNonpinned() ? 2 : 0;
let headerCount = 0;
if (this.#hasPinned()) {
headerCount += 1;
if (this.#hasNotPinned()) {
headerCount += 1;
}
}
const buttonCount = this.#archivedConversations.length ? 1 : 0;
return (
headerCount +
@ -146,66 +153,51 @@ export class LeftPaneInboxHelper extends LeftPaneHelper<LeftPaneInboxPropsType>
const archivedConversationsCount = archivedConversations.length;
if (this.#hasPinnedAndNonpinned()) {
switch (rowIndex) {
case 0:
return {
type: RowType.Header,
getHeaderText: i18n => i18n('icu:LeftPane--pinned'),
};
case pinnedConversations.length + 1:
let index = rowIndex;
if (this.#hasPinned()) {
if (index === 0) {
return {
type: RowType.Header,
getHeaderText: i18n => i18n('icu:LeftPane--pinned'),
};
}
index -= 1;
if (index < pinnedConversations.length) {
return {
type: RowType.Conversation,
conversation: pinnedConversations[index],
};
}
index -= pinnedConversations.length;
if (this.#hasNotPinned()) {
if (index === 0) {
return {
type: RowType.Header,
getHeaderText: i18n => i18n('icu:LeftPane--chats'),
};
case pinnedConversations.length + conversations.length + 2:
if (archivedConversationsCount) {
return {
type: RowType.ArchiveButton,
archivedConversationsCount,
};
}
return undefined;
default: {
const pinnedConversation = pinnedConversations[rowIndex - 1];
if (pinnedConversation) {
return {
type: RowType.Conversation,
conversation: pinnedConversation,
};
}
const conversation =
conversations[rowIndex - pinnedConversations.length - 2];
return conversation
? {
type: RowType.Conversation,
conversation,
}
: undefined;
}
index -= 1;
}
}
const onlyConversations = pinnedConversations.length
? pinnedConversations
: conversations;
if (rowIndex < onlyConversations.length) {
const conversation = onlyConversations[rowIndex];
return conversation
? {
type: RowType.Conversation,
conversation,
}
: undefined;
if (index < conversations.length) {
return {
type: RowType.Conversation,
conversation: conversations[index],
};
}
index -= conversations.length;
if (rowIndex === onlyConversations.length && archivedConversationsCount) {
if (index === 0 && archivedConversationsCount) {
return {
type: RowType.ArchiveButton,
archivedConversationsCount,
};
}
return undefined;
}
@ -219,14 +211,12 @@ export class LeftPaneInboxHelper extends LeftPaneHelper<LeftPaneInboxPropsType>
const isConversationSelected = (
conversation: Readonly<ConversationListItemPropsType>
) => conversation.id === selectedConversationId;
const hasHeaders = this.#hasPinnedAndNonpinned();
const pinnedConversationIndex = this.#pinnedConversations.findIndex(
isConversationSelected
);
if (pinnedConversationIndex !== -1) {
const headerOffset = hasHeaders ? 1 : 0;
return pinnedConversationIndex + headerOffset;
return pinnedConversationIndex + 1;
}
const conversationIndex = this.#conversations.findIndex(
@ -234,7 +224,7 @@ export class LeftPaneInboxHelper extends LeftPaneHelper<LeftPaneInboxPropsType>
);
if (conversationIndex !== -1) {
const pinnedOffset = this.#pinnedConversations.length;
const headerOffset = hasHeaders ? 2 : 0;
const headerOffset = this.#hasPinned() ? 2 : 0;
return conversationIndex + pinnedOffset + headerOffset;
}
@ -289,9 +279,11 @@ export class LeftPaneInboxHelper extends LeftPaneHelper<LeftPaneInboxPropsType>
handleKeydownForSearch(event, options);
}
#hasPinnedAndNonpinned(): boolean {
return Boolean(
this.#pinnedConversations.length && this.#conversations.length
);
#hasPinned(): boolean {
return this.#pinnedConversations.length !== 0;
}
#hasNotPinned(): boolean {
return this.#conversations.length !== 0;
}
}

View File

@ -11,13 +11,25 @@ import { Tabs } from '../Tabs';
export type OwnProps = {
readonly blessedPacks: ReadonlyArray<StickerPackType>;
readonly closeStickerPackPreview: () => unknown;
readonly downloadStickerPack: (packId: string, packKey: string) => unknown;
readonly downloadStickerPack: (
packId: string,
packKey: string,
options: { actionSource: 'ui' }
) => unknown;
readonly i18n: LocalizerType;
readonly installStickerPack: (packId: string, packKey: string) => unknown;
readonly installStickerPack: (
packId: string,
packKey: string,
options: { actionSource: 'ui' }
) => unknown;
readonly installedPacks: ReadonlyArray<StickerPackType>;
readonly knownPacks?: ReadonlyArray<StickerPackType>;
readonly receivedPacks: ReadonlyArray<StickerPackType>;
readonly uninstallStickerPack: (packId: string, packKey: string) => unknown;
readonly uninstallStickerPack: (
packId: string,
packKey: string,
options: { actionSource: 'ui' }
) => unknown;
};
export type Props = OwnProps;
@ -47,7 +59,7 @@ export const StickerManager = React.memo(function StickerManagerInner({
return;
}
knownPacks.forEach(pack => {
downloadStickerPack(pack.id, pack.key);
downloadStickerPack(pack.id, pack.key, { actionSource: 'ui' });
});
// When this component is created, it's initially not part of the DOM, and then it's

View File

@ -12,8 +12,16 @@ export type OwnProps = {
readonly i18n: LocalizerType;
readonly pack: StickerPackType;
readonly onClickPreview?: (sticker: StickerPackType) => unknown;
readonly installStickerPack?: (packId: string, packKey: string) => unknown;
readonly uninstallStickerPack?: (packId: string, packKey: string) => unknown;
readonly installStickerPack?: (
packId: string,
packKey: string,
options: { actionSource: 'ui' }
) => unknown;
readonly uninstallStickerPack?: (
packId: string,
packKey: string,
options: { actionSource: 'ui' }
) => unknown;
};
export type Props = OwnProps;
@ -37,7 +45,7 @@ export const StickerManagerPackRow = React.memo(
(e: React.MouseEvent) => {
e.stopPropagation();
if (installStickerPack) {
installStickerPack(id, key);
installStickerPack(id, key, { actionSource: 'ui' });
}
},
[id, installStickerPack, key]
@ -47,7 +55,7 @@ export const StickerManagerPackRow = React.memo(
(e: React.MouseEvent) => {
e.stopPropagation();
if (isBlessed && uninstallStickerPack) {
uninstallStickerPack(id, key);
uninstallStickerPack(id, key, { actionSource: 'ui' });
} else {
setUninstalling(true);
}
@ -58,7 +66,7 @@ export const StickerManagerPackRow = React.memo(
const handleConfirmUninstall = React.useCallback(() => {
clearUninstalling();
if (uninstallStickerPack) {
uninstallStickerPack(id, key);
uninstallStickerPack(id, key, { actionSource: 'ui' });
}
}, [id, key, clearUninstalling, uninstallStickerPack]);

View File

@ -19,10 +19,18 @@ export type OwnProps = {
readonly downloadStickerPack: (
packId: string,
packKey: string,
options?: { finalStatus?: 'installed' | 'downloaded' }
options: { finalStatus?: 'installed' | 'downloaded'; actionSource: 'ui' }
) => unknown;
readonly installStickerPack: (
packId: string,
packKey: string,
options: { actionSource: 'ui' }
) => unknown;
readonly uninstallStickerPack: (
packId: string,
packKey: string,
options: { actionSource: 'ui' }
) => unknown;
readonly installStickerPack: (packId: string, packKey: string) => unknown;
readonly uninstallStickerPack: (packId: string, packKey: string) => unknown;
readonly pack?: StickerPackType;
readonly i18n: LocalizerType;
};
@ -90,7 +98,7 @@ export const StickerPreviewModal = React.memo(
React.useEffect(() => {
if (pack && pack.status === 'known') {
downloadStickerPack(pack.id, pack.key);
downloadStickerPack(pack.id, pack.key, { actionSource: 'ui' });
}
if (
pack &&
@ -99,6 +107,7 @@ export const StickerPreviewModal = React.memo(
pack.attemptedStatus === 'installed')
) {
downloadStickerPack(pack.id, pack.key, {
actionSource: 'ui',
finalStatus: pack.attemptedStatus,
});
}
@ -130,10 +139,13 @@ export const StickerPreviewModal = React.memo(
if (isInstalled) {
setConfirmingUninstall(true);
} else if (pack.status === 'ephemeral') {
downloadStickerPack(pack.id, pack.key, { finalStatus: 'installed' });
downloadStickerPack(pack.id, pack.key, {
finalStatus: 'installed',
actionSource: 'ui',
});
handleClose();
} else {
installStickerPack(pack.id, pack.key);
installStickerPack(pack.id, pack.key, { actionSource: 'ui' });
handleClose();
}
}, [
@ -149,7 +161,7 @@ export const StickerPreviewModal = React.memo(
if (!pack) {
return;
}
uninstallStickerPack(pack.id, pack.key);
uninstallStickerPack(pack.id, pack.key, { actionSource: 'ui' });
setConfirmingUninstall(false);
// closeStickerPackPreview is called by <ConfirmationDialog />'s onClose
}, [uninstallStickerPack, setConfirmingUninstall, pack]);

View File

@ -26,7 +26,7 @@ import { getNotificationTextForMessage } from '../util/getNotificationTextForMes
import { getNotificationDataForMessage } from '../util/getNotificationDataForMessage';
import type { ProfileNameChangeType } from '../util/getStringForProfileChange';
import type { AttachmentType, ThumbnailType } from '../types/Attachment';
import { toDayMillis } from '../util/timestamp';
import { MAX_SAFE_TIMEOUT_DELAY, toDayMillis } from '../util/timestamp';
import { areWeAdmin } from '../util/areWeAdmin';
import { isBlocked } from '../util/isBlocked';
import { getAboutText } from '../util/getAboutText';
@ -620,16 +620,7 @@ export class ConversationModel extends window.Backbone
const idLog = this.idForLogging();
// Hard-coded to our own ID, because you don't add other users for admin approval
const conversationId =
window.ConversationController.getOurConversationIdOrThrow();
const toRequest = window.ConversationController.get(conversationId);
if (!toRequest) {
throw new Error(
`addPendingApprovalRequest/${idLog}: No conversation found for conversation ${conversationId}`
);
}
const toRequest = window.ConversationController.getOurConversationOrThrow();
const serviceId = toRequest.getCheckedServiceId(
`addPendingApprovalRequest/${idLog}`
);
@ -2658,8 +2649,6 @@ export class ConversationModel extends window.Backbone
const ourAci = window.textsecure.storage.user.getCheckedAci();
const ourPni = window.textsecure.storage.user.getPni();
const ourConversation =
window.ConversationController.getOurConversationOrThrow();
if (this.isMemberPending(ourAci)) {
await this.modifyGroupV2({
@ -2670,7 +2659,7 @@ export class ConversationModel extends window.Backbone
} else if (this.isMember(ourAci)) {
await this.modifyGroupV2({
name: 'delete',
usingCredentialsFrom: [ourConversation],
usingCredentialsFrom: [],
createGroupChange: () => this.#removeMember(ourAci),
});
// Keep PNI in pending if ACI was a member.
@ -2749,7 +2738,7 @@ export class ConversationModel extends window.Backbone
await this.modifyGroupV2({
name: 'toggleAdmin',
usingCredentialsFrom: [member],
usingCredentialsFrom: [],
createGroupChange: () => this.#toggleAdminChange(serviceId),
});
}
@ -5383,6 +5372,13 @@ export class ConversationModel extends window.Backbone
return;
}
if (delay > MAX_SAFE_TIMEOUT_DELAY) {
log.warn(
'startMuteTimer: timeout is larger than maximum setTimeout delay'
);
return;
}
this.#muteTimer = setTimeout(() => this.setMuteExpiration(0), delay);
}
}

View File

@ -1,8 +1,9 @@
// Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import type Quill from '@signalapp/quill-cjs';
import { Delta } from '@signalapp/quill-cjs';
import Emitter from '@signalapp/quill-cjs/core/emitter';
import type Quill from '@signalapp/quill-cjs';
import * as log from '../../logging/log';
import type { EmojiData } from '../../components/emoji/lib';
@ -53,7 +54,7 @@ export class AutoSubstituteAsciiEmojis {
this.options = options;
this.quill = quill;
this.quill.on('text-change', (_now, _before, source) => {
this.quill.on(Emitter.events.TEXT_CHANGE, (_now, _before, source) => {
if (source !== 'user') {
return;
}

View File

@ -1,10 +1,11 @@
// Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import type Quill from '@signalapp/quill-cjs';
import { Delta } from '@signalapp/quill-cjs';
import Emitter from '@signalapp/quill-cjs/core/emitter';
import React from 'react';
import _, { isNumber } from 'lodash';
import type Quill from '@signalapp/quill-cjs';
import { Popper } from 'react-popper';
import classNames from 'classnames';
@ -92,12 +93,15 @@ export class EmojiCompletion {
const debouncedOnTextChange = _.debounce(() => this.onTextChange(), 100);
this.quill.on('text-change', (_now, _before, source) => {
this.quill.on(Emitter.events.TEXT_CHANGE, (_now, _before, source) => {
if (source === 'user') {
debouncedOnTextChange();
}
});
this.quill.on('selection-change', this.onSelectionChange.bind(this));
this.quill.on(
Emitter.events.SELECTION_CHANGE,
this.onSelectionChange.bind(this)
);
}
destroy(): void {

View File

@ -1,15 +1,16 @@
// Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import type Quill from '@signalapp/quill-cjs';
import type { Op } from '@signalapp/quill-cjs';
import type { Context as KeyboardContext } from '@signalapp/quill-cjs/modules/keyboard';
import React from 'react';
import classNames from 'classnames';
import { Popper } from 'react-popper';
import { createPortal } from 'react-dom';
import type { VirtualElement } from '@popperjs/core';
import { isString } from 'lodash';
import Emitter from '@signalapp/quill-cjs/core/emitter';
import type Quill from '@signalapp/quill-cjs';
import type { Op } from '@signalapp/quill-cjs';
import type { Context as KeyboardContext } from '@signalapp/quill-cjs/modules/keyboard';
import type { VirtualElement } from '@popperjs/core';
import * as log from '../../logging/log';
import * as Errors from '../../types/errors';
@ -89,7 +90,7 @@ export class FormattingMenu {
this.options = options;
this.root = document.body.appendChild(document.createElement('div'));
this.quill.on('editor-change', this.onEditorChange.bind(this));
this.quill.on(Emitter.events.EDITOR_CHANGE, this.onEditorChange.bind(this));
// We override these keybindings, which means that we need to move their priority
// above the built-in shortcuts, which don't exactly do what we want.

View File

@ -1,15 +1,16 @@
// Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import _ from 'lodash';
import type Quill from '@signalapp/quill-cjs';
import { Delta } from '@signalapp/quill-cjs';
import type { RefObject } from 'react';
import React from 'react';
import _ from 'lodash';
import { Delta } from '@signalapp/quill-cjs';
import Emitter from '@signalapp/quill-cjs/core/emitter';
import type Quill from '@signalapp/quill-cjs';
import type { RefObject } from 'react';
import { Popper } from 'react-popper';
import classNames from 'classnames';
import { createPortal } from 'react-dom';
import { Avatar, AvatarSize } from '../../components/Avatar';
import type { LocalizerType, ThemeType } from '../../types/Util';
import type { MemberType, MemberRepository } from '../memberRepository';
@ -76,8 +77,14 @@ export class MentionCompletion {
this.quill.keyboard.addBinding({ key: 39 }, clearResults); // Right Arrow
this.quill.keyboard.addBinding({ key: 40 }, changeIndex(1)); // Down Arrow
this.quill.on('text-change', _.debounce(this.onTextChange.bind(this), 0));
this.quill.on('selection-change', this.onSelectionChange.bind(this));
this.quill.on(
Emitter.events.TEXT_CHANGE,
_.debounce(this.onTextChange.bind(this), 0)
);
this.quill.on(
Emitter.events.SELECTION_CHANGE,
this.onSelectionChange.bind(this)
);
}
destroy(): void {

View File

@ -35,7 +35,7 @@ export function createEventHandler({
const container = document.createElement('div');
for (let i = 0, max = selection.rangeCount; i < max; i += 1) {
const range = selection.getRangeAt(i);
container.appendChild(range.cloneContents());
container.appendChild(getRangeWithContainer(range));
}
// We fail over to selection.toString() because we can't pull values from the DOM if
@ -111,3 +111,125 @@ function getStringFromNode(
}
return result;
}
const CONTAINER_CLASSES = ['ql-editor', 'module-message__text'];
const BOLD_TAG = 'strong';
const ITALIC_TAG = 'em';
const STRIKETHROUGH_TAG = 's';
const MONOSPACE_CLASSES = [
'quill--monospace',
'MessageTextRenderer__formatting--monospace',
];
const SPOILER_CLASSES = [
'quill--spoiler',
'MessageTextRenderer__formatting--spoiler',
'MessageTextRenderer__formatting--spoiler--revealed',
];
// When the user cuts/copies single-line text which don't cross any mentions/emojo or
// formatting boundaries, we don't get the surrounding formatting nodes in our selection.
// So, we need to walk the DOM and re-create those containing nodes.
function getRangeWithContainer(range: Range): Node {
const fragment = range.cloneContents();
// We're talking about HTML that might look like this, from the composer:
// <div class="ql-editor ql-editor--loaded" contenteditable="plaintext-only" ... >
// <div dir="auto">
// <strong>
// <em>
// <s>
// <span class="quill--spoiler">
// <span class="quill--monospace">
// All formatting, with no formatting boundaries, mentions or emoji.
// </span>
// </span>
// </s>
// </em>
// </strong>
// </div>
// </div>
// Or like this, from a message bubble:
// <div class="module-message__text module-message__text--outgoing">
// <span>
// <span class="MessageTextRenderer__formatting--spoiler--revealed">
// <span class="MessageTextRenderer__formatting--monospace">
// <s>
// <em>
// <strong>
// All formatting, with no formatting boundaries, mentions or emoji.
// </strong>
// </em>
// </s>
// </span>
// </span>
// </span>
// <span style="display: inline-block; width: 75.7656px;"></span>
// </div>
// If the range spans multiple elements, we don't have to worry about this
const { startContainer, endContainer } = range;
if (startContainer !== endContainer) {
return fragment;
}
let currentNode: Element | null;
if (startContainer.nodeType !== Node.TEXT_NODE) {
return fragment;
}
if (fragment.childNodes.length > 1) {
return fragment;
}
let finalNode = fragment.childNodes.item(0);
if (!finalNode) {
return fragment;
}
currentNode = startContainer.parentElement as HTMLElement;
while (
currentNode &&
// eslint-disable-next-line no-loop-func
CONTAINER_CLASSES.every(item => !currentNode?.classList.contains(item))
) {
const tagName = currentNode.tagName.toLowerCase();
if (tagName === BOLD_TAG) {
const newNode = document.createElement(BOLD_TAG);
newNode.appendChild(finalNode);
finalNode = newNode;
} else if (tagName === ITALIC_TAG) {
const newNode = document.createElement(ITALIC_TAG);
newNode.appendChild(finalNode);
finalNode = newNode;
} else if (tagName === STRIKETHROUGH_TAG) {
const newNode = document.createElement(STRIKETHROUGH_TAG);
newNode.appendChild(finalNode);
finalNode = newNode;
} else if (
// eslint-disable-next-line no-loop-func
MONOSPACE_CLASSES.some(item => currentNode?.classList.contains(item))
) {
const newNode = document.createElement('span');
// Matchers check for all classes, so we just add the first
newNode.classList.add(MONOSPACE_CLASSES[0]);
newNode.appendChild(finalNode);
finalNode = newNode;
} else if (
// eslint-disable-next-line no-loop-func
SPOILER_CLASSES.some(item => currentNode?.classList.contains(item))
) {
const newNode = document.createElement('span');
// Matchers check for all classes, so we just add the first
newNode.classList.add(SPOILER_CLASSES[0]);
newNode.appendChild(finalNode);
finalNode = newNode;
}
currentNode = currentNode.parentElement;
}
fragment.replaceChildren(finalNode);
return fragment;
}

View File

@ -480,8 +480,8 @@ export class BackupImportStream extends Writable {
// Not a conversation
return;
} else {
log.warn(`${this.#logId}: unsupported recipient item`);
return;
log.warn(`${this.#logId}: unsupported recipient destination`);
throw new Error('Unsupported recipient destination');
}
if (convo !== this.#ourConversation) {
@ -505,6 +505,7 @@ export class BackupImportStream extends Writable {
await this.#fromAdHocCall(frame.adHocCall);
} else {
log.warn(`${this.#logId}: unsupported frame item ${frame.item}`);
throw new Error('Unsupported frame type');
}
} catch (error) {
this.#frameErrorCount += 1;
@ -940,11 +941,12 @@ export class BackupImportStream extends Writable {
);
attrs.discoveredUnregisteredAt = timestamp || this.#now;
attrs.firstUnregisteredAt = timestamp || undefined;
} else {
strictAssert(
} else if (!contact.registered) {
log.error(
contact.registered,
'contact is either registered or unregistered'
'contact is neither registered nor unregistered; treating as registered'
);
this.#frameErrorCount += 1;
}
if (contact.blocked) {
@ -1649,7 +1651,12 @@ export class BackupImportStream extends Writable {
} else if (status.skipped) {
sendStatus = SendStatus.Skipped;
} else {
throw new Error(`Unknown sendStatus received: ${status}`);
log.error(
`${timestamp}: Unknown sendStatus received: ${status}, falling back to Pending`
);
// We fallback to pending for unknown send statuses
sendStatus = SendStatus.Pending;
this.#frameErrorCount += 1;
}
sendStateByConversationId[target.id] = {
@ -1896,6 +1903,10 @@ export class BackupImportStream extends Writable {
targetAuthorAci: storyAuthorAci,
targetTimestamp: 0, // stories are never imported
};
} else {
throw new Error(
'Direct story reply message missing both textReply and emoji'
);
}
return result;
@ -2413,10 +2424,12 @@ export class BackupImportStream extends Writable {
if (updateMessage.learnedProfileChange) {
const { e164, username } = updateMessage.learnedProfileChange;
strictAssert(
e164 != null || username != null,
'learnedProfileChange must have an old name'
);
if (e164 == null && username == null) {
log.error(
`${options.timestamp}: learnedProfileChange had no previous e164 or username`
);
this.#frameErrorCount += 1;
}
return {
message: {
type: 'title-transition-notification',
@ -3392,7 +3405,7 @@ export class BackupImportStream extends Writable {
value = {
start: rgbIntToDesktopHSL(color.solid),
};
} else {
} else if (color.gradient) {
strictAssert(color.gradient != null, 'Either solid or gradient');
strictAssert(color.gradient.colors != null, 'Missing gradient colors');
@ -3409,6 +3422,12 @@ export class BackupImportStream extends Writable {
end: rgbIntToDesktopHSL(end),
deg,
};
} else {
log.error(
'CustomChatColor missing both solid and gradient fields, dropping'
);
this.#frameErrorCount += 1;
continue;
}
customColors.colors[uuid] = value;
@ -3532,16 +3551,23 @@ export class BackupImportStream extends Writable {
color = 'ultramarine';
break;
}
} else {
strictAssert(chatStyle.customColorId != null, 'Missing custom color id');
} else if (chatStyle.customColorId != null) {
const entry = this.#customColorById.get(
chatStyle.customColorId.toNumber()
);
strictAssert(entry != null, 'Missing custom color');
color = 'custom';
customColorData = entry;
if (entry) {
color = 'custom';
customColorData = entry;
} else {
log.error('Chat style referenced missing custom color');
this.#frameErrorCount += 1;
autoBubbleColor = true;
}
} else {
log.error('ChatStyle has no recognized field');
this.#frameErrorCount += 1;
autoBubbleColor = true;
}
return {

View File

@ -348,6 +348,7 @@ export class BackupsService {
const importStart = Date.now();
await DataWriter.disableMessageInsertTriggers();
await DataWriter.disableFSync();
try {
window.ConversationController.setReadOnly(true);
@ -445,6 +446,7 @@ export class BackupsService {
window.ConversationController.setReadOnly(false);
this.#isRunning = false;
await DataWriter.enableMessageInsertTriggersAndBackfill();
await DataWriter.enableFSyncAndCheckpoint();
window.IPC.stopTrackingQueryStats({ epochName: 'Backup Import' });
if (window.SignalCI) {

View File

@ -120,15 +120,15 @@ export function convertFilePointerToAttachment(
};
}
if (invalidAttachmentLocator) {
return {
...omit(commonProps, 'downloadPath'),
error: true,
size: 0,
};
if (!invalidAttachmentLocator) {
log.error('convertFilePointerToAttachment: filePointer had no locator');
}
throw new Error('convertFilePointerToAttachment: mising locator');
return {
...omit(commonProps, 'downloadPath'),
error: true,
size: 0,
};
}
export function convertBackupMessageAttachmentToAttachment(

View File

@ -4,6 +4,8 @@
import os from 'os';
import { debounce } from 'lodash';
import EventEmitter from 'events';
import { v4 as getGuid } from 'uuid';
import { Sound, SoundType } from '../util/Sound';
import { shouldHideExpiringMessageBody } from '../types/Settings';
import OS from '../util/os/osMain';
@ -36,16 +38,14 @@ type NotificationDataType = Readonly<{
export type NotificationClickData = Readonly<{
conversationId: string;
messageId: string | null;
storyId: string | null;
messageId: string | undefined;
storyId: string | undefined;
}>;
export type WindowsNotificationData = {
avatarPath?: string;
body: string;
conversationId: string;
heading: string;
messageId?: string;
storyId?: string;
token: string;
type: NotificationType;
};
export enum NotificationType {
@ -86,6 +86,7 @@ class NotificationService extends EventEmitter {
#lastNotification: null | Notification = null;
#notificationData: null | NotificationDataType = null;
#tokenData: { token: string; data: NotificationClickData } | undefined;
// Testing indicated that trying to create/destroy notifications too quickly
// resulted in notifications that stuck around forever, requiring the user
@ -175,16 +176,20 @@ class NotificationService extends EventEmitter {
log.info('NotificationService: showing a notification', sentAt);
if (OS.isWindows()) {
const token = this._createToken({
conversationId,
messageId,
storyId,
});
// Note: showing a windows notification clears all previous notifications first
drop(
window.IPC.showWindowsNotification({
avatarPath: iconPath,
body: message,
conversationId,
heading: title,
messageId,
storyId,
type,
token,
})
);
} else {
@ -206,8 +211,8 @@ class NotificationService extends EventEmitter {
window.IPC.showWindow();
window.Events.showConversationViaNotification({
conversationId,
messageId: messageId ?? null,
storyId: storyId ?? null,
messageId,
storyId,
});
} else if (type === NotificationType.IncomingGroupCall) {
window.IPC.showWindow();
@ -304,6 +309,7 @@ class NotificationService extends EventEmitter {
// adding anythhing new; just one notification at a time. Electron forces it, so
// we replicate it with our Windows notifications.
if (!notificationData) {
this.#tokenData = undefined;
drop(window.IPC.clearAllWindowsNotifications());
}
} else if (this.#lastNotification) {
@ -446,6 +452,32 @@ class NotificationService extends EventEmitter {
);
}
/** @internal */
public _createToken(data: NotificationClickData): string {
const token = getGuid();
this.#tokenData = {
token,
data,
};
return token;
}
public resolveToken(token: string): NotificationClickData | undefined {
if (!this.#tokenData) {
log.warn(`NotificationService: no data when looking up ${token}`);
return undefined;
}
if (this.#tokenData.token !== token) {
log.warn(`NotificationService: token mismatch ${token}`);
return undefined;
}
return this.#tokenData.data;
}
public clear(): void {
log.info(
'NotificationService: clearing notification and requesting an update'

View File

@ -771,10 +771,6 @@ async function doGetProfile(
Errors.toLogFormat(error)
);
isSuccessfullyDecrypted = false;
c.set({
profileName: undefined,
profileFamilyName: undefined,
});
}
}
} else {

View File

@ -18,6 +18,7 @@ import { incrementMessageCounter } from '../util/incrementMessageCounter';
import { SeenStatus } from '../MessageSeenStatus';
import { saveNewMessageBatcher } from '../util/messageBatcher';
import { generateMessageId } from '../util/generateMessageId';
import type { RawBodyRange } from '../types/BodyRange';
import { BodyRange } from '../types/BodyRange';
import * as RemoteConfig from '../RemoteConfig';
import { isBeta, isProduction } from '../util/version';
@ -50,6 +51,13 @@ export type ReleaseNoteType = ReleaseNoteResponseType &
let initComplete = false;
const STYLE_MAPPING: Record<string, BodyRange.Style> = {
bold: BodyRange.Style.BOLD,
italic: BodyRange.Style.ITALIC,
strikethrough: BodyRange.Style.STRIKETHROUGH,
spoiler: BodyRange.Style.SPOILER,
mono: BodyRange.Style.MONOSPACE,
};
export class ReleaseNotesFetcher {
#timeout: NodeJS.Timeout | undefined;
#isRunning = false;
@ -245,10 +253,37 @@ export class ReleaseNotesFetcher {
return;
}
const { title, body } = note;
const messageBody = `${title}\n\n${body}`;
const bodyRanges = [
const { title, body, bodyRanges: noteBodyRanges } = note;
const titleBodySeparator = '\n\n';
const filteredNoteBodyRanges: Array<RawBodyRange> = (
noteBodyRanges ?? []
)
.map(range => {
if (
range.length == null ||
range.start == null ||
range.style == null ||
!STYLE_MAPPING[range.style] ||
range.start + range.length - 1 >= body.length
) {
return null;
}
const relativeStart =
range.start + title.length + titleBodySeparator.length;
return {
start: relativeStart,
length: range.length,
style: STYLE_MAPPING[range.style],
};
})
.filter(isNotNil);
const messageBody = `${title}${titleBodySeparator}${body}`;
const bodyRanges: Array<RawBodyRange> = [
{ start: 0, length: title.length, style: BodyRange.Style.BOLD },
...filteredNoteBodyRanges,
];
const timestamp = Date.now() + index;

View File

@ -409,13 +409,9 @@ async function generateManifest(
}
}
log.info(
`storageService.upload(${version}): ` +
`adding uninstalled stickerPacks=${uninstalledStickerPacks.length}`
);
const uninstalledStickerPackIds = new Set<string>();
let newlyUninstalledPacks = 0;
uninstalledStickerPacks.forEach(stickerPack => {
const storageRecord = new Proto.StorageRecord();
storageRecord.stickerPack = toStickerPackRecord(stickerPack);
@ -431,22 +427,19 @@ async function generateManifest(
});
if (isNewItem) {
postUploadUpdateFunctions.push(() => {
void DataWriter.addUninstalledStickerPack({
newlyUninstalledPacks += 1;
postUploadUpdateFunctions.push(() =>
DataWriter.addUninstalledStickerPack({
...stickerPack,
storageID,
storageVersion: version,
storageNeedsSync: false,
});
});
})
);
}
});
log.info(
`storageService.upload(${version}): ` +
`adding installed stickerPacks=${installedStickerPacks.length}`
);
let newlyInstalledPacks = 0;
installedStickerPacks.forEach(stickerPack => {
if (uninstalledStickerPackIds.has(stickerPack.id)) {
log.error(
@ -456,7 +449,7 @@ async function generateManifest(
window.reduxActions.stickers.uninstallStickerPack(
stickerPack.id,
stickerPack.key,
{ fromSync: true }
{ actionSource: 'storageService' }
);
return;
}
@ -473,17 +466,27 @@ async function generateManifest(
});
if (isNewItem) {
postUploadUpdateFunctions.push(() => {
void DataWriter.createOrUpdateStickerPack({
...stickerPack,
newlyInstalledPacks += 1;
postUploadUpdateFunctions.push(() =>
DataWriter.updateStickerPackInfo({
id: stickerPack.id,
key: stickerPack.key,
storageID,
storageVersion: version,
storageNeedsSync: false,
});
});
position: stickerPack.position,
})
);
}
});
log.info(
`storageService.upload(${version}): stickerPacks ` +
`installed=${newlyInstalledPacks}/${installedStickerPacks.length} ` +
`uninstalled=${newlyUninstalledPacks}/${uninstalledStickerPacks.length}`
);
log.info(
`storageService.upload(${version}): ` +
`adding callLinks=${callLinkDbRecords.length}`
@ -1498,10 +1501,15 @@ async function processManifest(
`storageService.process(${version}): localKey=${missingKey} was not ` +
'in remote manifest'
);
void DataWriter.createOrUpdateStickerPack({
...stickerPack,
void DataWriter.updateStickerPackInfo({
id: stickerPack.id,
key: stickerPack.key,
storageID: undefined,
storageVersion: undefined,
storageUnknownFields: undefined,
storageNeedsSync: false,
uninstalledAt: stickerPack.uninstalledAt,
});
});

View File

@ -888,7 +888,10 @@ export async function mergeGroupV1Record(
});
conversation.setMuteExpiration(
getTimestampFromLong(groupV1Record.mutedUntilTimestamp),
getTimestampFromLong(
groupV1Record.mutedUntilTimestamp,
Number.MAX_SAFE_INTEGER
),
{
viaStorageServiceSync: true,
}
@ -1025,7 +1028,10 @@ export async function mergeGroupV2Record(
});
conversation.setMuteExpiration(
getTimestampFromLong(groupV2Record.mutedUntilTimestamp),
getTimestampFromLong(
groupV2Record.mutedUntilTimestamp,
Number.MAX_SAFE_INTEGER
),
{
viaStorageServiceSync: true,
}
@ -1176,20 +1182,24 @@ export async function mergeContactRecord(
remoteName &&
(localName !== remoteName || localFamilyName !== remoteFamilyName)
) {
// Local name doesn't match remote name, fetch profile
log.info(
`mergeContactRecord: ${conversation.idForLogging()} name doesn't match remote name; overwriting`
);
details.push('updated profile name');
conversation.set({
profileName: remoteName,
profileFamilyName: remoteFamilyName,
});
if (localName) {
log.info(
`mergeContactRecord: ${conversation.idForLogging()} name doesn't match remote name; also fetching profile`
);
drop(
conversation.getProfiles().catch(() => {
/* nothing to do here; logging already happened */
})
);
details.push('refreshing profile');
} else {
conversation.set({
profileName: remoteName,
profileFamilyName: remoteFamilyName,
});
details.push('updated profile name');
}
}
conversation.set({
@ -1265,7 +1275,10 @@ export async function mergeContactRecord(
}
conversation.setMuteExpiration(
getTimestampFromLong(contactRecord.mutedUntilTimestamp),
getTimestampFromLong(
contactRecord.mutedUntilTimestamp,
Number.MAX_SAFE_INTEGER
),
{
viaStorageServiceSync: true,
}
@ -1924,13 +1937,24 @@ export async function mergeStickerPackRecord(
`newPosition=${stickerPack.position ?? '?'}`
);
if (localStickerPack && !wasUninstalled && isUninstalled) {
assertDev(localStickerPack.key, 'Installed sticker pack has no key');
window.reduxActions.stickers.uninstallStickerPack(
localStickerPack.id,
localStickerPack.key,
{ fromStorageService: true }
);
if (!wasUninstalled && isUninstalled) {
if (localStickerPack != null) {
assertDev(localStickerPack.key, 'Installed sticker pack has no key');
window.reduxActions.stickers.uninstallStickerPack(
localStickerPack.id,
localStickerPack.key,
{
actionSource: 'storageService',
uninstalledAt: stickerPack.uninstalledAt,
}
);
} else {
strictAssert(
stickerPack.key == null && stickerPack.uninstalledAt != null,
'Created sticker pack must be already uninstalled'
);
await DataWriter.addUninstalledStickerPack(stickerPack);
}
} else if ((!localStickerPack || wasUninstalled) && !isUninstalled) {
assertDev(stickerPack.key, 'Sticker pack does not have key');
@ -1940,13 +1964,13 @@ export async function mergeStickerPackRecord(
stickerPack.id,
stickerPack.key,
{
fromStorageService: true,
actionSource: 'storageService',
}
);
} else {
void Stickers.downloadStickerPack(stickerPack.id, stickerPack.key, {
finalStatus: 'installed',
fromStorageService: true,
actionSource: 'storageService',
});
}
}

Some files were not shown because too many files have changed in this diff Show More