Compare commits

...

214 Commits

Author SHA1 Message Date
Stanislav Dmitrenko f31054de4f desktop (windows): fix action (#3479) 2023-11-27 22:11:53 +00:00
Evgeny Poberezkin 8cc0954430 Merge branch 'stable' 2023-11-26 11:50:30 +00:00
Evgeny Poberezkin 1e6891e222 blog: v5.4 announcement (#3457)
* blog: v5.4 announcement

* update

* corrections

Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>

* add images, CLI section

* images

* preview, readme

* correction

---------

Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
2023-11-25 18:27:41 +00:00
Evgeny Poberezkin 962964a73d docs: update downloads page 2023-11-25 14:15:41 +00:00
Evgeny Poberezkin b9dd2f45c9 rfc: post-quantum resistant augmented double ratchet algorithm (#3463)
* rfc: post-quantum resistant augmented double ratchet algorithm

* update doc

* replace Kyber with "some KEM"
2023-11-25 12:51:05 +00:00
Evgeny Poberezkin de1c885501 ios: 5.4 build 184: switch to GHC 8.10.7 (9.6.3 crashes on older iPhone models), fix Connect to desktop closing when switching to QR code scan 2023-11-25 11:22:02 +00:00
Evgeny Poberezkin 1902b692f5 5.4: ios 183, android 162, desktop 18 2023-11-25 00:13:31 +00:00
Evgeny Poberezkin 6c05eb0ff3 directory: support group names with spaces (#3458) 2023-11-24 23:21:38 +00:00
Evgeny Poberezkin d148ce4cbb ui: translations (#3459)
* Translated using Weblate (Russian)

Currently translated at 100.0% (1500 of 1500 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/

* Translated using Weblate (Russian)

Currently translated at 100.0% (1346 of 1346 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/

* Translated using Weblate (Russian)

Currently translated at 100.0% (1500 of 1500 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/

* Translated using Weblate (Russian)

Currently translated at 100.0% (1346 of 1346 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 22.1% (332 of 1500 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (German)

Currently translated at 100.0% (1346 of 1346 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/

* Translated using Weblate (Hungarian)

Currently translated at 22.3% (335 of 1500 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Polish)

Currently translated at 96.9% (1454 of 1500 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/

* Translated using Weblate (French)

Currently translated at 100.0% (1500 of 1500 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/

* Translated using Weblate (French)

Currently translated at 100.0% (1346 of 1346 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1346 of 1346 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/

* Translated using Weblate (Polish)

Currently translated at 100.0% (1500 of 1500 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/

* Translated using Weblate (Polish)

Currently translated at 100.0% (1346 of 1346 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/

* Translated using Weblate (Hungarian)

Currently translated at 28.6% (429 of 1500 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Update translation files

Updated by "Remove blank strings" hook in Weblate.

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/

* import/export/update

---------

Co-authored-by: Istvan Novak <easthvan@gmail.com>
Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: B.O.S.S <BxOxSxS@protonmail.com>
Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
Co-authored-by: M1K4 <oomikaoo@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2023-11-24 23:20:28 +00:00
Evgeny Poberezkin 3d09073bfc ios: update core lib to 5.4.0.6 2023-11-24 20:46:00 +00:00
Evgeny Poberezkin da64b2e3cd android, desktop: fix translation 2023-11-24 20:37:32 +00:00
Stanislav Dmitrenko 4572fec61d desktop (windows): fix lib build (#3456) 2023-11-24 20:05:41 +00:00
Alexander Bondarenko fe9953fc49 desktop: remove GC flag when building on windows (#3455)
* desktop: remove GC flag when building on windows

* add correct define
2023-11-24 20:00:20 +00:00
Stanislav Dmitrenko e91a1f151d desktop: hide profiles screen on remote host change (#3454) 2023-11-24 19:24:16 +00:00
Evgeny Poberezkin 34d7fe3744 core: 5.4.0.6 2023-11-24 18:59:41 +00:00
Alexander Bondarenko 4327b023ed terminal: add remote user information (#3448)
* terminal: add remote user information

* rename

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-24 18:44:12 +00:00
Stanislav Dmitrenko 50bada24af desktop: better status check of loaded remote files (#3453) 2023-11-24 18:43:28 +00:00
spaced4ndy 97934c8289 android, desktop: fix alert text for deleting received message 2023-11-24 21:10:03 +04:00
Evgeny Poberezkin 4a254560c0 desktop: fix user address changes on connected mobile (#3452)
* desktop: fix user address changes on connected mobile

* close user-specific views when remote host changes
2023-11-24 16:51:31 +00:00
Stanislav Dmitrenko f9b5c673c5 android, desktop: better handling of URI's (#3450) 2023-11-24 16:19:31 +00:00
spaced4ndy 8ce9dd7ab6 android: don't show lock notice on first start (#3451) 2023-11-24 20:05:37 +04:00
spaced4ndy 9fb4b3cf40 desktop: don't show device specific network and database settings when connected to remote host (#3449) 2023-11-24 19:38:19 +04:00
Evgeny Poberezkin 7f9a490edb website: translations (#3447)
* Translated using Weblate (Arabic)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/ar/

* Translated using Weblate (Arabic)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/ar/

---------

Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org>
2023-11-24 14:21:13 +00:00
Evgeny Poberezkin bfd13f059a ui: translations (#3446)
* Translated using Weblate (Dutch)

Currently translated at 100.0% (1502 of 1502 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1341 of 1341 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1503 of 1503 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1503 of 1503 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/

* Translated using Weblate (Russian)

Currently translated at 97.7% (1459 of 1493 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/

* Translated using Weblate (Russian)

Currently translated at 100.0% (1341 of 1341 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1493 of 1493 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1341 of 1341 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1502 of 1502 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1341 of 1341 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1503 of 1503 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1503 of 1503 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/

* Translated using Weblate (Russian)

Currently translated at 97.7% (1459 of 1493 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/

* Translated using Weblate (Russian)

Currently translated at 100.0% (1341 of 1341 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1493 of 1493 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1341 of 1341 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Russian)

Currently translated at 100.0% (1493 of 1493 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/

* Translated using Weblate (Russian)

Currently translated at 99.8% (1339 of 1341 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/

* Translated using Weblate (Arabic)

Currently translated at 92.4% (1380 of 1493 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1494 of 1494 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Added translation using Weblate (Hungarian)

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1495 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Translated using Weblate (Hungarian)

Currently translated at 0.5% (8 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 1.4% (21 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 2.0% (30 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 2.1% (32 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 10.9% (163 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1495 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Hungarian)

Currently translated at 12.3% (184 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1495 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Hungarian)

Currently translated at 14.8% (222 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1495 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Translated using Weblate (Hungarian)

Currently translated at 21.6% (323 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (German)

Currently translated at 97.7% (1461 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (French)

Currently translated at 100.0% (1495 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/

* Translated using Weblate (French)

Currently translated at 100.0% (1341 of 1341 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/

* Translated using Weblate (Hungarian)

Currently translated at 21.9% (328 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (German)

Currently translated at 100.0% (1495 of 1495 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (German)

Currently translated at 100.0% (1341 of 1341 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (1500 of 1500 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (German)

Currently translated at 100.0% (1341 of 1341 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1500 of 1500 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1500 of 1500 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Translated using Weblate (Turkish)

Currently translated at 70.0% (1051 of 1500 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/tr/

* ru: corrections

* export/import

* ios: export

* ru: corrections

---------

Co-authored-by: M1K4 <oomikaoo@gmail.com>
Co-authored-by: Float <float.hu+@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: J R <jr@simplex.chat>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org>
Co-authored-by: Istvan Novak <easthvan@gmail.com>
Co-authored-by: Eric <zxmegaxqug@hldrive.com>
Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
Co-authored-by: xe1st <dnzkckali@gmail.com>
2023-11-24 14:18:31 +00:00
Evgeny Poberezkin c9aec88c39 desktop: fix sending videos via connected mobile 2023-11-24 13:14:52 +00:00
Evgeny Poberezkin b1cf1656a0 core: cli remote control help section (#3445) 2023-11-24 10:48:14 +00:00
Alexander Bondarenko 74e80eb348 core: add remote stop reason and state (#3444)
* add remote stop reason and state

* rename

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-23 22:00:20 +00:00
Evgeny Poberezkin 6f3174d0a1 android, desktop: remove unnecessary serialization 2023-11-23 21:25:32 +00:00
Evgeny Poberezkin 8f0a9cd609 ios: connect remote desktop via multicast (#3436)
* ios: connect remote desktop via multicast

* works

* fix camera freeze when leaving linked devices view

* label

* fix linked devices

* fix compatible

* string
2023-11-23 21:22:29 +00:00
Stanislav Dmitrenko b2dbb558f9 android, desktop: connect remote desktop via multicast (#3442)
* android, desktop: connect remote desktop via multicast

* changes

* string

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-23 21:00:11 +00:00
Stanislav Dmitrenko f7903c5c83 desktop: close remote host connecting screen on stop of host (#3440) 2023-11-23 19:49:53 +00:00
Evgeny Poberezkin 4d3529a3e0 desktop: fix incorrect remote host for active user (#3441) 2023-11-23 17:00:13 +00:00
Alexander Bondarenko d837f87f09 fix circular cancel at rcDiscoverCtrl (#3438) 2023-11-23 11:00:57 +00:00
Evgeny Poberezkin d3f9616f9b core: report controller info when found via multicast (#3437)
* core: report controller info when found via multicast

* handle parse error
2023-11-23 10:07:26 +00:00
Evgeny Poberezkin 1b7baa244a core: track network statuses in CLI (#3434) 2023-11-23 08:39:08 +00:00
Alexander Bondarenko 954b7150af android, desktop: set RTS options for core (#3418)
* desktop: allow settings RTS options

* set initial heap and arena sizes

* add non-moving GC for even more productivity/less reallocs

* add RTS options for android too

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-22 22:37:33 +00:00
Evgeny Poberezkin d0419df396 android: close Use from desktop when disconnecting 2023-11-22 22:34:30 +00:00
Evgeny Poberezkin 01f351e65a ios: haskell RTS options (#3433) 2023-11-22 22:12:42 +00:00
Evgeny Poberezkin 2d4e99d610 cli: set device name for remote control via CLI option (#3427)
* cli: set device name for remote control via CLI option

* fix

* add property in tests
2023-11-22 22:11:32 +00:00
Evgeny Poberezkin 4af4fbae2b ios: close sheet when disconnecting from desktop (#3435) 2023-11-22 22:10:41 +00:00
spaced4ndy 15fdab597b core: shuffle members when sending messages and introductions; send to admins and owners first (#3431)
* core: shuffle members when sending messages and introductions; send to admins and owners first

* refactor

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-22 21:36:52 +00:00
Stanislav Dmitrenko 0c1d78ab08 desktop: specifying port in connect remote host page (#3432)
* desktop: specifying port in connect remote host page

* shorter string

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-22 20:17:05 +00:00
Evgeny Poberezkin 324f614e00 core: return remote controller port to UI (#3430) 2023-11-22 17:40:10 +00:00
spaced4ndy cec0fe2702 ios, android: add author group member role to fix decoding (hidden from UI) (#3429) 2023-11-22 18:47:46 +04:00
Stanislav Dmitrenko 48d7afc959 desktop: enhancements to remote hosts experience (#3428) 2023-11-22 14:35:32 +00:00
Evgeny Poberezkin 9442121efa desktop: do not switch remote host when inactive host is disconnected (#3426) 2023-11-22 12:14:49 +00:00
spaced4ndy 69acac5331 android: remove unused strings (#3424) 2023-11-22 10:19:39 +04:00
Evgeny Poberezkin aade3d359f v5.4-beta.4: ios 182, android 161, desktop 17 2023-11-21 23:32:33 +00:00
Evgeny Poberezkin c1d89f2c0f ios: move hs_init to background thread (#3411) 2023-11-21 22:21:01 +00:00
Stanislav Dmitrenko c40bfb0f43 android, desktop: show remote host info (#3423)
* android, desktop: show remote host info

* hide alerts too
2023-11-21 21:49:39 +00:00
Evgeny Poberezkin 64520a4cf4 core: 5.4.0.5, update simplexmq 2023-11-21 21:12:43 +00:00
Evgeny Poberezkin d0f43628ef ui: translations (#3421)
* Translated using Weblate (Italian)

Currently translated at 100.0% (1483 of 1483 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1332 of 1332 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1483 of 1483 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Spanish)

Currently translated at 97.2% (1442 of 1483 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1483 of 1483 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1332 of 1332 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/

* android: fix formatted strings

* ios: imp/exp localizations

---------

Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: Eric <zxmegaxqug@hldrive.com>
Co-authored-by: No name <CertainBot@users.noreply.hosted.weblate.org>
Co-authored-by: M1K4 <oomikaoo@gmail.com>
2023-11-21 20:30:21 +00:00
spaced4ndy febf3e0a45 ui: v5.4 what's new (#3413)
* ios: v5.4 what's new

* android

* export localizations

* update

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-21 19:38:05 +00:00
Jesse Horne 097242e7a8 desktop: add image pasting from clipboard (#3378)
* first pass at desktop image pasting for multiplatform

* removed debug println

* fixed bug with pasting text

* temp files are deleted now following simplex conventions

* optimizations

---------

Co-authored-by: Avently <7953703+avently@users.noreply.github.com>
2023-11-21 19:37:15 +00:00
spaced4ndy a8576c2340 core: test forwarded message deduplication, mute terminal error (#3414) 2023-11-21 19:25:50 +04:00
Alexander Bondarenko 5a08a26c9a desktop: add exception handlers to startReceiver loop (#3417)
* desktop: add exception handlers to startReceiver loop

* simplify

* more exceptions

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
Co-authored-by: Avently <7953703+avently@users.noreply.github.com>
2023-11-21 14:43:52 +00:00
Alexander Bondarenko da8789ef4c desktop: fix RCP tag in AgentErrorType (#3416) 2023-11-21 12:20:04 +00:00
Evgeny Poberezkin 47cd7de1ae core: 5.4.0.4 2023-11-21 00:00:29 +00:00
Evgeny Poberezkin 624a3abba2 website: translations (#3412)
* Translated using Weblate (German)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/de/

* Translated using Weblate (Arabic)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/ar/

---------

Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org>
2023-11-20 22:29:18 +00:00
Evgeny Poberezkin 121985138a ios: export localizations 2023-11-20 22:24:19 +00:00
Evgeny Poberezkin 7f5efd8927 desktop: use correct remote host when creating/connecting via links (#3409) 2023-11-20 20:56:05 +00:00
Evgeny Poberezkin 96d3c9988c Merge pull request #3404 from simplex-chat/ep/core-add-remote-host
desktop: add remote host ID to entities
2023-11-20 17:21:56 +00:00
spaced4ndy f6b786a187 get user index by remote host id 2023-11-20 20:31:35 +04:00
spaced4ndy 11478da6ef Revert "remoteHostId in backend"
This reverts commit 72654caca6.
2023-11-20 19:56:31 +04:00
spaced4ndy 72654caca6 remoteHostId in backend 2023-11-20 19:51:56 +04:00
spaced4ndy 44c88badde remoteHostId in entities kotlin 2023-11-20 16:31:52 +04:00
Evgeny Poberezkin 53a31ec60e core: add remote host ID to entities 2023-11-20 11:51:40 +00:00
spaced4ndy 718436bf55 core: don't read all group members where unnecessary (#3403) 2023-11-20 15:27:15 +04:00
Evgeny Poberezkin 5bbf4d70a1 Merge pull request #3151 from simplex-chat/remote-desktop
use mobile from desktop
2023-11-20 11:12:01 +00:00
Evgeny Poberezkin 970ca3a409 Merge branch 'master' into remote-desktop 2023-11-20 10:35:20 +00:00
Evgeny Poberezkin c536ca7f0f core: add events not sent to connected remote desktop (#3402) 2023-11-20 10:34:24 +00:00
Evgeny Poberezkin 07ef2a0b64 android: remove ACCESS_WIFI_STATE (#3391) 2023-11-20 10:20:31 +00:00
Evgeny Poberezkin 5b7de8f8c1 desktop, android: pass remote host to API from the loaded objects, to prevent race conditions (#3397)
* desktop, android: pass remote host explicitely to API calls

* use remote host ID in model updates

* add remote host to chat console

* add remote host to notifications functions
2023-11-20 10:20:10 +00:00
Alexander Bondarenko 68cbc605be add remote session sequence to prevent stale state updates (#3390)
* add remote session sequence to prevent stale state updates

* remote RHStateKey

* add StateSeq check to controller

* clean up

* simplify

* undo withRemoteXSession API change

* simplify

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-20 10:19:00 +00:00
spaced4ndy 3a510eeaf0 core: rename forwarded fields (#3401) 2023-11-20 14:00:55 +04:00
Alexander Bondarenko ba94f76a90 core: fix remote session stuck in Starting after crashed rcConnect (#3399) 2023-11-20 09:33:43 +00:00
spaced4ndy 85e44dcb77 core: split group message forwarding tests (#3400) 2023-11-20 13:05:59 +04:00
Evgeny Poberezkin 2a8d7b8926 core: add commands that will not be forwarded to connected mobile (#3398)
* core: add commands that will not be forwarded to connected mobile

* fail if command that must be executed locally sent to remote host
2023-11-19 20:48:25 +00:00
Evgeny Poberezkin d9031cb209 Merge branch 'master' into remote-desktop 2023-11-19 11:18:08 +00:00
Evgeny Poberezkin bf8457fb40 website: translations (#3396)
* Translated using Weblate (French)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/fr/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/nl/

* Translated using Weblate (Italian)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/it/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/

* Translated using Weblate (Polish)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/pl/

* Translated using Weblate (Russian)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/ru/

* Translated using Weblate (French)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/fr/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/nl/

* Translated using Weblate (Italian)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/it/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/

* Translated using Weblate (Polish)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/pl/

* Translated using Weblate (Russian)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/ru/

---------

Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
Co-authored-by: M1K4 <oomikaoo@gmail.com>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: Eric <zxmegaxqug@hldrive.com>
Co-authored-by: B.O.S.S <BxOxSxS@protonmail.com>
Co-authored-by: Timur Bagautdinov <mr.bagautdinov14@gmail.com>
2023-11-19 11:14:09 +00:00
Evgeny Poberezkin 59392b361b ui: translations (#3392)
* Translated using Weblate (Polish)

Currently translated at 97.4% (1400 of 1437 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1437 of 1437 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Dutch)

Currently translated at 99.0% (1423 of 1437 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Translated using Weblate (Polish)

Currently translated at 100.0% (1437 of 1437 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/

* Translated using Weblate (Polish)

Currently translated at 100.0% (1300 of 1300 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1437 of 1437 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1300 of 1300 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/

* Translated using Weblate (French)

Currently translated at 100.0% (1437 of 1437 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/

* Translated using Weblate (French)

Currently translated at 100.0% (1300 of 1300 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1437 of 1437 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1300 of 1300 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1437 of 1437 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1300 of 1300 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (German)

Currently translated at 100.0% (1437 of 1437 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (German)

Currently translated at 100.0% (1300 of 1300 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (1439 of 1439 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (German)

Currently translated at 100.0% (1300 of 1300 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1439 of 1439 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1439 of 1439 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Translated using Weblate (Polish)

Currently translated at 100.0% (1439 of 1439 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/

* Translated using Weblate (French)

Currently translated at 100.0% (1439 of 1439 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1439 of 1439 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (1439 of 1439 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/uk/

* update de: Meine -> Ihre

* nl: Gebruiker -> Lid

* nl: gebruiker -> lid 2

* ios, nl: gebruiker -> lid

* ios, nl: gebruiker -> lid 2

* android: fix strings

* ios: export/import localizations

---------

Co-authored-by: B.O.S.S <BxOxSxS@protonmail.com>
Co-authored-by: Eric <zxmegaxqug@hldrive.com>
Co-authored-by: M1K4 <oomikaoo@gmail.com>
Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Denys Rastiegaiev <daaren@gmail.com>
2023-11-19 11:06:49 +00:00
Stanislav Dmitrenko 8f0538e756 android: UI for remote connections (#3395)
* android: UI for remote connections

* camera permissions

* eol

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-19 01:07:42 +00:00
Moritz Angermann b164cc2fa6 nix: fix lib:support for armv7a (#3394) 2023-11-19 00:31:29 +00:00
Evgeny Poberezkin f9e5a56e1a ios: terminate session on network failure, add description for local network access 2023-11-18 22:20:22 +00:00
Evgeny Poberezkin 96e000e3ea ios: add user-defined device name for remote desktop connection 2023-11-18 20:28:55 +00:00
Evgeny Poberezkin ca8833c0c1 desktop: sending and receiving files via connected mobile (#3365)
* desktop: support remote files (WIP)

* working with remote files locally

* better

* working with remote file downloads

* sending files

* fixes of loading files in some situations

* image compression

* constant for remote hosts

* refactor

---------

Co-authored-by: Avently <7953703+avently@users.noreply.github.com>
2023-11-18 20:11:30 +00:00
Evgeny Poberezkin e95d9d0b49 core: rename migration to remote-control, comments (#3393) 2023-11-18 19:18:02 +00:00
Evgeny Poberezkin cc434cda55 Merge branch 'master' into remote-desktop 2023-11-18 18:03:13 +00:00
spaced4ndy c0e8740f50 core: group message forwarding (#3360)
* core: group message forwarding types

* xgrpmemcon

* rework xgrpmemcon to use intros table

* only forward w/t error

* forward msg

* xGrpMsgForward, check integrity outside

* deduplicate group messages

* test

* change error

* item forwarded flag

* intro_chat_protocol_version, bump version

* comment

* highly available client option

* more comments

* notify xgrpmemcon on deduplication

* member vrange

* encoding

* remove MsgForward

* remove import

* exclude files from forwarding

* refactor

* rename to align with protocol

* forward more message types

* add events

* remove unused error, function

* add x.file.cancel, x.info and x.grp.mem.new to forwarded messages

* remove unused x.msg.file.cancel

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-18 17:52:01 +00:00
Evgeny Poberezkin 80abc18371 core: update simplexmq (xrcp) 2023-11-18 15:35:06 +00:00
qvsojBJGiEnR 8f6a31ca07 Update app-settings.md (#3379) 2023-11-17 23:29:25 +00:00
Stanislav Dmitrenko c9a1de6e4b msys2 setup in different place (#3389) 2023-11-17 19:20:44 +00:00
Alexander Bondarenko 42e0400014 core: add remote controller discovery with multicast (#3369)
* draft multicast chat api

* prepare tests

* Plug discovery into chat api

* Add discovery timeout

* post-merge fixes

* rename discovery state to match others

* update for unified invitation

* fix review notices

* rename, remove stack, update simplexmq

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-17 18:50:38 +00:00
Stanislav Dmitrenko 79064e149a desktop: enabled smooth scrolling again (#3388) 2023-11-17 18:19:38 +00:00
Stanislav Dmitrenko 84e09f195c desktop (windows): fix build of CLI (#3387) 2023-11-17 18:19:02 +00:00
Evgeny Poberezkin f6c4e969e4 nix: add openssl to simplexmq, swift flag to simplex-chat (#3386)
* nix: add swift flag

* add openssl for simplexmq to nix

* add openssl to android simplemq, try iOS with enableKTLS = false flag

* fix android
2023-11-17 13:28:10 +00:00
Evgeny Poberezkin 86b916c169 Merge branch 'master' into remote-desktop 2023-11-17 13:02:54 +00:00
Alexander Bondarenko cf102da4d3 remote: add test for rejected ca detection and stability (#3382)
* add test for rejected ca detection and stability

* update mq commit
2023-11-17 11:19:33 +00:00
Evgeny Poberezkin 0d7a048988 nix: patches for armv7a, fix segfault issues, etc (#3383)
* bump mobile-core-tools

* Update deps

* 🤦

* patch

* needs p

* 32bit patches

* bump haskell.nix

* bump again

* fix broken flake.lock

* bump haskell.nix

* bump haskell.nix (to fix darwin)

---------

Co-authored-by: Moritz Angermann <moritz.angermann@gmail.com>
2023-11-16 22:54:54 +00:00
Evgeny Poberezkin d0f3a3d886 rfc: remote UI implementation (#3206) 2023-11-16 21:53:54 +00:00
Evgeny Poberezkin 64f0dbeb61 Merge branch 'master' into remote-desktop 2023-11-16 20:20:04 +00:00
Evgeny Poberezkin 0322b9708b desktop, ios: remote desktop/mobile connection (#3223)
* ui: remote desktop/mobile connection (WIP)

* add startRemoteCtrl and capability (does not work)

* re-add view

* update core library

* iOS connects to CLI

* ios: mobile ui

* multiplatform types

* update lib

* iOS and desktop connected

* fix controllers list on mobile

* remove iOS 16 paste button

* update device name

* connect existing device

* proposed model

* missing function names in exports

* unused

* remote host picker

* update type

* update lib, keep iOS session alive

* better UI

* update network statuses on switching remote/local hosts

* changes

* ios: prevent dismissing sheet/back when session is connected

* changes

* ios: fix back button asking to disconnect when not connected

* iOS: update type

* picker and session code

* multiplatform: update type

* menu fix

* ios: better ux

* desktop: better ux

* ios: options etc

* UI

* desktop: fix RemoteHostStopped event

* ios: open Use from desktop via picker

* desktop: "new mobile device"

* ios: load remote controllers synchronously, update on connect, fix alerts

* titles

* changes

* more changes to ui

* more and more changes in ui

* padding

* ios: show desktop version, handle errors

* fix stopped event

* refresh hosts always

* radical change

* optimization

* change

* ios: stop in progress session when closing window

---------

Co-authored-by: Avently <7953703+avently@users.noreply.github.com>
2023-11-16 16:53:44 +00:00
Alexander Bondarenko c31ae39617 remote: fix circular error handling (#3380) 2023-11-16 14:56:39 +00:00
Alexander Bondarenko 339c3d2be1 Send CRRemote*Stopped on all errors (#3376)
* Send CRRemote*Stopped on all errors

Commands use the same action, made idempotent and don't send events.

* fix tests

* get http2 cancelling back
2023-11-15 17:31:36 +00:00
Alexander Bondarenko a75fce8dfa Fix hostStore path and check before removing (#3375) 2023-11-15 15:57:29 +00:00
Evgeny Poberezkin b71daed3ec core: include session code in all session states (#3374) 2023-11-15 13:17:31 +00:00
Alexander Bondarenko fa9d61caa4 remove host store in deleteRemoteHost (#3373) 2023-11-15 13:09:52 +00:00
spaced4ndy 975f6d488e android: fix group join via invitation chat item (#3372) 2023-11-15 11:46:45 +04:00
Evgeny Poberezkin 3d617bce25 core: test JSON conversion (#3370) 2023-11-14 22:40:15 +00:00
Evgeny Poberezkin d4ba1bbe69 core: update remote host session state (#3371) 2023-11-14 22:27:21 +00:00
Evgeny Poberezkin 0a4920daae core: encrypt stored/loaded remote files (#3366)
* core: encrypt stored/loaded remote files

* simplexmq

* constant
2023-11-14 16:44:12 +00:00
spaced4ndy 36509a6d79 ios, android: new message decryption error - ratchet synchronization (#3368) 2023-11-14 19:39:32 +04:00
Evgeny Poberezkin 4da1d21c81 Merge branch 'master' into remote-desktop 2023-11-14 14:43:58 +00:00
spaced4ndy 5bbde22ffa core: new message decryption error - ratchet synchronization (#3367) 2023-11-14 18:23:05 +04:00
Evgeny Poberezkin 1e8ae6d861 docs: update windows app link 2023-11-14 09:37:24 +00:00
Evgeny Poberezkin f9df5aa41b Merge branch 'master' into remote-desktop 2023-11-13 20:41:51 +00:00
Evgeny Poberezkin c91625b32a core: update remote host session state, terminate TLS in one more case (#3364)
* core: update remote host session state, terminate TLS in one more case

* name
2023-11-13 20:16:34 +00:00
Alexander Bondarenko 598b6659cc core: better handling of remote errors (#3358)
* Allow ExitCode exceptions to do their job

* Use appropriate error type

* Close TLS server when cancelling connected remote host

* Add timeout errors

* Bump simplexmq

* extract common timeout value
2023-11-13 18:39:41 +00:00
Evgeny Poberezkin a2fe5cfb66 core: fix incorrect JSON serialization (#3361) 2023-11-13 17:45:10 +00:00
Evgeny Poberezkin 86bc70fa5a Merge branch 'master' into remote-desktop 2023-11-13 14:07:31 +00:00
Stanislav Dmitrenko 338417d963 desktop: catch unreadable crypto file (#3359) 2023-11-13 14:06:01 +00:00
Evgeny Poberezkin 72b25385ba core: event when new remote host added (#3355) 2023-11-12 21:43:43 +00:00
Evgeny Poberezkin 92e3f576ca core: return controller app info in response when connecting, validate ID key (#3353) 2023-11-12 14:40:49 +00:00
spaced4ndy 5beeff5cb6 core: take chat lock when synchronizing ratchet (#3349) 2023-11-12 12:41:41 +00:00
Evgeny Poberezkin 8e3e58cac8 core: update remote controller name (#3352) 2023-11-12 12:40:13 +00:00
Evgeny Poberezkin 8b67ff7a00 core: remote error handling (#3347)
* core: remote error handling

* fix test, show DB errors
2023-11-11 16:03:12 +00:00
Evgeny Poberezkin beb22c6f87 Merge branch 'master' into remote-desktop 2023-11-11 13:53:51 +00:00
Evgeny Poberezkin 11362941fd 5.4.0-beta.3: iOS 181, Android 160, Desktop 16 2023-11-11 12:12:04 +00:00
Evgeny Poberezkin b1101fbce4 Merge branch 'master' into remote-desktop 2023-11-11 09:49:22 +00:00
Evgeny Poberezkin f7b4e4b16a core: 5.4.0.3 2023-11-11 09:36:16 +00:00
Evgeny Poberezkin 97fd6a993e Merge branch 'master' into remote-desktop 2023-11-10 22:22:04 +00:00
Evgeny Poberezkin 83aaaa9ada translation: remove duplicate string 2023-11-10 20:45:41 +00:00
Stanislav Dmitrenko ae286124aa ios: allow sound in silent mode (#3346)
Co-authored-by: Avently <avently@local>
2023-11-10 19:27:06 +00:00
Evgeny Poberezkin 9cc232054c website: translations (#3345)
* core: notify contact about contact deletion

* Translated using Weblate (French)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/fr/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/nl/

* Translated using Weblate (Italian)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/it/

* Translated using Weblate (Arabic)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/ar/

* Translated using Weblate (Hebrew)

Currently translated at 34.1% (86 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/he/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/

* Translated using Weblate (Hebrew)

Currently translated at 41.2% (104 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/he/

* Translated using Weblate (Hebrew)

Currently translated at 74.6% (188 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/he/

* Translated using Weblate (Czech)

Currently translated at 92.0% (232 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/cs/

* Translated using Weblate (Arabic)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/ar/

* Translated using Weblate (Hebrew)

Currently translated at 90.4% (228 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/he/

* Translated using Weblate (Hebrew)

Currently translated at 94.8% (239 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/he/

* Translated using Weblate (Hebrew)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/he/

* Translated using Weblate (Hebrew)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/he/

* Translated using Weblate (German)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/de/

---------

Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
Co-authored-by: M1K4 <oomikaoo@gmail.com>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org>
Co-authored-by: ItaiShek <itaishek@gmail.com>
Co-authored-by: No name <CertainBot@users.noreply.hosted.weblate.org>
Co-authored-by: Eric <hamburger2048@users.noreply.hosted.weblate.org>
Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: mlanp <github@lang.xyz>
2023-11-10 17:57:02 +00:00
Alexander Bondarenko 227007c8f6 add /switch remote host (#3342)
* Add SwitchRemoteHost

* Add message test

* Match remote prefix and the rest of the line

* Move prefix match to utils
2023-11-10 17:49:23 +00:00
Evgeny Poberezkin e17e6adefb ui: translations (#3343)
* Translated using Weblate (French)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/

* Translated using Weblate (French)

Currently translated at 100.0% (1250 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1250 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1250 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/

* Translated using Weblate (Japanese)

Currently translated at 98.6% (1233 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/

* Translated using Weblate (Japanese)

Currently translated at 99.2% (1376 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/

* Translated using Weblate (Arabic)

Currently translated at 99.7% (1383 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/

* Translated using Weblate (German)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (German)

Currently translated at 100.0% (1250 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/

* Translated using Weblate (Czech)

Currently translated at 98.0% (1360 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (1250 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/bg/

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/bg/

* Translated using Weblate (Hebrew)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/he/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1250 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1250 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1250 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1250 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Czech)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/

* Translated using Weblate (Russian)

Currently translated at 99.5% (1381 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/

* Translated using Weblate (Czech)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/

* Translated using Weblate (Polish)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/

* Translated using Weblate (Polish)

Currently translated at 100.0% (1250 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/

* Translated using Weblate (Russian)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1250 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1250 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/

* Translated using Weblate (Czech)

Currently translated at 100.0% (1387 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/

* Translated using Weblate (Czech)

Currently translated at 99.9% (1249 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/

* Translated using Weblate (Arabic)

Currently translated at 99.7% (1383 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/

* Translated using Weblate (Finnish)

Currently translated at 99.2% (1376 of 1387 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fi/

* Translated using Weblate (Finnish)

Currently translated at 98.9% (1237 of 1250 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fi/

* Update translation files

Updated by "Cleanup translation files" hook in Weblate.

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/

* corrections

* correction

* fix android translations

* ios: import/export localizations

---------

Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: M1K4 <oomikaoo@gmail.com>
Co-authored-by: a4318 <dalse.077@gmail.com>
Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org>
Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: Jan Čejka <posta@jancejka.cz>
Co-authored-by: elgratea <weblate@fastmail.com>
Co-authored-by: ItaiShek <itaishek@gmail.com>
Co-authored-by: Eric <hamburger2048@users.noreply.hosted.weblate.org>
Co-authored-by: No name <CertainBot@users.noreply.hosted.weblate.org>
Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: pazengaz <pazengaz@porcod.io>
Co-authored-by: B.O.S.S <BxOxSxS@protonmail.com>
Co-authored-by: Shamil Bikineyev <shamilbi@gmail.com>
Co-authored-by: sith-on-mars <groguko34@skiff.com>
Co-authored-by: Jiri Grönroos <jiri.gronroos@iki.fi>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2023-11-10 16:31:59 +00:00
Evgeny Poberezkin 02225df274 core: remote control command/response encryption and signing inside TLS (#3339)
* core: remote control command/response encryption inside TLS (except files, no signing)

* sign/verify

* update simplexmq

* fix lazy

* remove RSNone
2023-11-10 16:10:10 +00:00
Stanislav Dmitrenko e7d6ed66da android: fix crash when playing recorded voice message (#3325)
* android: fix crash when playing recorded voice message

* better
2023-11-10 16:09:19 +00:00
Stanislav Dmitrenko 8d891005d9 ui: disable expanding one item (#3344)
* ui: disable expanding one item

* better

* when
2023-11-10 16:09:01 +00:00
Stanislav Dmitrenko f648086934 windows: upgrade UUID (#3341) 2023-11-10 11:50:31 +00:00
Stanislav Dmitrenko fcdd8ce7c1 windows: script for building the lib (#3340)
* windows: script for building the lib

* changes

* change

* change
2023-11-10 11:49:53 +00:00
spaced4ndy c0be36737d android: connect with contact via address (for preset simplex contact) (#3330) 2023-11-10 10:16:28 +04:00
spaced4ndy f49ded5ae5 ios: connect with contact via address (for preset simplex contact) (#3323)
* ios: connect with contact via address (for preset simplex contact)

* remove diff

* remove floating button

* refactor active

* open chat

* remove disabled

* fix incognito

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-10 10:16:06 +04:00
Alexander Bondarenko f41861c026 core: terminate remote control TLS connection on both sides (#3338)
* handle session setup errors

* add command/async wrapper

* move furniture around

* detect disconnects and force them with closeConnection

* simplify http server log

* close TLS in other cases

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-09 22:43:44 +00:00
Alexander Bondarenko 6d4febb669 core: handle remote control session setup errors (#3332)
* handle session setup errors

* add command/async wrapper

* move furniture around
2023-11-09 18:25:05 +00:00
Evgeny Poberezkin 3dd62ab05a core: remove Hello from the app remote protocol (#3336) 2023-11-09 09:37:56 +00:00
Stanislav Dmitrenko 96d94d3438 android, desktop: fix linking (#3333)
Co-authored-by: avently <avently@local>
2023-11-09 07:55:01 +00:00
Alexander Bondarenko b729144773 core: use xrcp protocol for desktop/mobile connection (#3305)
* WIP: start working on /connect remote ctrl

OOB is broken, requires fixing simplexmq bits.

* WIP: pull CtrlCryptoHandle from xrcp

* place xrcp stubs

* WIP: start switching to RemoteControl.Client types

* fix http2 sha

* fix sha256map.nix

* fix cabal.project

* update RC test

* WIP: add new remote session

* fix compilation

* simplify

* attach HTTP2 server to TLS

* starting host session in controller (WIP)

* more WIP

* compiles

* compiles2

* wip

* pass startRemote' test

* async to poll for events from host, test to send messages fails

* move xrcp handshake test to simplexmq

* detect session stops

* fix connectRemoteCtrl

* use step type

* app info

* WIP: pairing stores

* plug in hello/appInfo/pairings

* negotiate app version

* update simplexmw, remove KEM secrets from DB

* fix file tests

* tone down http2 shutdown errors

* Add stored session test

* bump simplexmq tag

* update simplexmq

* refactor, fix

* removed unused errors

* rename fields, remove unused file

* rename errors

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-08 20:13:52 +00:00
Evgeny Poberezkin 3839267f88 Merge branch 'master' into remote-desktop 2023-11-08 13:10:42 +00:00
Evgeny Poberezkin d233d07ddc ci: ghc 9.6.3 (#3328) 2023-11-08 12:50:56 +00:00
spaced4ndy 8722d35278 core: fix deletion of contact without connections (#3327) 2023-11-08 13:15:08 +04:00
spaced4ndy ee6bd0f839 core: add image to simplex contact profile (#3326) 2023-11-08 10:56:55 +04:00
Stanislav Dmitrenko e3938f6fb5 android: replaced function that requires higher API (#3324) 2023-11-07 22:58:19 +00:00
Stanislav Dmitrenko 2dc621a56c mobile: keep screen on while playing/recording media (#3317)
* android: keep screen on while playing/recording media

* ios: keep screen on while playing/recording media

* different implementation on ios

* Revert "android: keep screen on while playing/recording media"

This reverts commit d291f006e9.

* different implementation on android

* refactor

---------

Co-authored-by: Avently <avently@local>
Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-07 16:56:38 +00:00
Stanislav Dmitrenko 3e46c5dfaf android: fixed crash on device rotation in Create link screen (#3322) 2023-11-07 16:48:32 +00:00
spaced4ndy a04dc5d05b core: preset simplex contact (#3321) 2023-11-07 17:45:59 +04:00
Evgeny Poberezkin 2776d864a8 Merge branch 'master' into remote-desktop 2023-11-06 11:44:12 +00:00
Evgeny Poberezkin b33fe01e49 core: switch to GHC 9.6.3 (#3307)
* Various fixes aggregated
- windows definisions
- set compile rto 9.6.3
- flake adjust to 9.6.3
- update haskellNix
- add various patches

* Unbreak iOS

* update script and sha256map.nix

* ios: update core lib

---------

Co-authored-by: Moritz Angermann <moritz.angermann@gmail.com>
2023-11-06 11:43:43 +00:00
spaced4ndy 15b55f7924 ios, android: fix contactInfo response encoding (#3319) 2023-11-06 13:43:37 +04:00
Evgeny Poberezkin 177112ab18 update simplexmq 2023-11-04 19:04:40 +00:00
Evgeny Poberezkin c2a99987f3 Merge branch 'master' into remote-desktop 2023-11-04 18:54:12 +00:00
Stanislav Dmitrenko eee233bd02 android, desktop: catching decoding errors (#3314) 2023-11-04 17:21:29 +00:00
Stanislav Dmitrenko 10cbb13c26 desktop: screen sharing in video calls (#3310)
* desktop: screen sharing

* use async function

* fit/fill of the video

* disconnect camera button from screen share

* enable video on audio call

* temp

* Revert "temp"

This reverts commit 8f8a2f7f88.

* Revert "enable video on audio call"

This reverts commit 120068d09a.

* different logic

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-04 16:59:07 +00:00
Evgeny Poberezkin 4816150b99 core: contacts without connections (#3313)
* core: contacts without connections

* compiles (some tests don't pass)

* remove commented code

* filter out user contact (fixes tests)

---------

Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
2023-11-03 18:15:07 +00:00
Stanislav Dmitrenko 3d7258fa58 android: fixed QR code sharing (#3311)
* android: fixed QR code sharing

* remove mime type change

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-11-02 23:11:26 +00:00
Stanislav Dmitrenko c462dd3704 android, desktop: removed unused plugin (#3309) 2023-11-02 20:59:16 +00:00
Evgeny Poberezkin 0cc26d192d update sha256map.nix 2023-11-02 14:07:51 +00:00
Evgeny Poberezkin 8546c937b2 Merge branch 'master' into remote-desktop 2023-11-02 14:04:10 +00:00
Evgeny Poberezkin 8482dbfd99 core: update remote API commands/events (#3295)
* core: update remote API

* Add session verification event between tls and http2

* roll back char_ '@' parsers

* use more specific parser for verification codes

* cabal.project.local for mac

---------

Co-authored-by: IC Rainbow <aenor.realm@gmail.com>
2023-11-01 19:08:36 +00:00
Evgeny Poberezkin b2f9270452 Merge branch 'master' into remote-desktop 2023-11-01 18:05:51 +00:00
Alexander Bondarenko 02c0cd5619 Cut at attaching http server/client (#3299)
* Cut at attaching http server/client

* switch to xrcp branch
2023-11-01 10:48:58 +00:00
spaced4ndy b1fdc936a6 Merge branch 'master' into remote-desktop 2023-10-30 20:58:39 +04:00
Alexander Bondarenko be44632b0b implement some of the robust discovery rfc (#3283)
* implement robust discovery

* remove qualified

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-10-30 14:00:54 +00:00
Evgeny Poberezkin b48690dee6 Merge branch 'master' into remote-desktop 2023-10-29 19:15:08 +00:00
Evgeny Poberezkin d90da57f12 core: store/get remote files (#3289)
* core: store remote files (wip)

* fix/test store remote file

* get remote file

* get file

* validate remote file metadata before sending to controller

* CLI commands, test

* update store method
2023-10-29 19:06:32 +00:00
Evgeny Poberezkin 9fb2b7fe73 Merge branch 'master' into remote-desktop 2023-10-29 18:05:03 +00:00
Evgeny Poberezkin 16bda26022 core: derive JSON with TH (#3275)
* core: derive JSON with TH

* fix tests

* simplify events

* reduce diff

* fix

* update simplexmq

* update simplexmq
2023-10-26 15:44:50 +01:00
Evgeny Poberezkin 3790752378 Merge branch 'master' into remote-desktop 2023-10-26 00:00:58 +01:00
Alexander Bondarenko cd98fabe43 robust discovery RFC (#3276)
* add new discovery RFC

* update

* update

* update ports

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-10-25 16:39:46 +01:00
Evgeny Poberezkin 6185971827 Merge branch 'master' into remote-desktop 2023-10-24 23:19:49 +01:00
Alexander Bondarenko e1bd6a93af use multicast address for announce (#3241)
* use multicast address for announce

* Add explicit multicast group membership

* join multicast group on a correct side

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-10-23 13:44:04 +01:00
Evgeny Poberezkin 93800268e4 Merge branch 'master' into remote-desktop 2023-10-23 10:04:51 +01:00
Evgeny Poberezkin b5e114d834 Merge branch 'master' into remote-desktop 2023-10-22 13:04:15 +01:00
Alexander Bondarenko 0d1a080a6e remote protocol (#3225)
* draft remote protocol types and external api

* types (it compiles)

* add error

* move remote controller from http to remote host client protocol

* refactor (doesnt compile)

* fix compile

* Connect remote session

* WIP: wire in remote protocol

* add commands and events

* cleanup

* fix desktop shutdown

* prepare for testing remote files

* Add file IO

* update simplexmq to master

with http2 to 4.1.4

* use json transcoder

* update simplexmq

* collapse RemoteHostSession states

* fold RemoteHello back into the protocol command
move http-command-response-http wrapper to protocol

* use sendRemoteCommand with optional attachments
use streaming request/response

* ditch lazy body streaming

* fix formatting

* put body builder/processor closer together

* wrap handleRemoteCommand around sending files

* handle ChatError's too

* remove binary, use 32-bit encoding for JSON bodies

* enable tests

* refactor

* refactor request handling

* return ChatError

* Flatten remote host

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-10-22 09:42:19 +01:00
Evgeny Poberezkin 0444367002 Merge branch 'master' into remote-desktop 2023-10-21 19:07:30 +01:00
Evgeny Poberezkin 92eae012b3 Merge branch 'master' into remote-desktop 2023-10-16 21:38:54 +01:00
Evgeny Poberezkin fc1bba8817 remote: refactor (WIP) (#3222)
* remote: refactor (WIP)

* refactor discoverRemoteCtrls

* refactor processRemoteCommand, storeRemoteFile

* refactor fetchRemoteFile

* refactor startRemoteHost, receiving files

* refactor relayCommand
2023-10-15 14:17:36 +01:00
Evgeny Poberezkin 41b86e07f1 core: update api (#3221) 2023-10-15 00:18:04 +01:00
Evgeny Poberezkin f5e9bd4f8b core: add set display name (#3216)
* core: add set display name

* enable all tests
2023-10-14 13:10:06 +01:00
Evgeny Poberezkin 5e6aaffb09 simplify remote api, add ios api (#3213) 2023-10-13 22:35:30 +01:00
Alexander Bondarenko 193361c09a core: fix remote handshake test (#3209)
* Fix remoteHandshakeTest

Sidesteps some yet to be uncovered bug when
mobile stops its side before the desktop.

* remove ambiguous update warning

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-10-13 18:53:04 +01:00
Evgeny Poberezkin 392447ea33 core: fix test 2023-10-13 17:52:27 +01:00
Evgeny Poberezkin 5d4006f291 Merge branch 'master' into remote-desktop 2023-10-13 17:46:14 +01:00
Alexander Bondarenko fe6c65f75c rfc: remote profile (#3051)
* Add session UX for mobile and desktop

* Resolve some feedback

* Resolve more feedback

Add QR note for desktops.
Add TLS handshake notice.

* Add details
2023-10-12 15:19:19 +01:00
Evgeny Poberezkin 6dca71cc87 Merge branch 'master' into remote-desktop 2023-10-12 11:40:23 +01:00
Alexander Bondarenko adc1f8c983 android, desktop: remote kotlin types (#3200)
* Add remote types to Kotlin

* update response info for chat console

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-10-12 10:58:59 +01:00
Evgeny Poberezkin 73652e4bba Merge branch 'master' into remote-desktop 2023-10-12 10:43:59 +01:00
Evgeny Poberezkin c2a858b06e core: convert single-field to tagged JSON encoding (#3183)
* core: convert single-field to tagged JSON encoding

* rename

* rename

* fixes, test

* refactor
2023-10-11 19:11:01 +01:00
Alexander Bondarenko 6f5ba54f7b core: remote session files (#3189)
* Receiving files on CRRcvFileComplete

* Add remote /fr test

* Add broken startFileTransfer notice

* Sending files with SendFile/SendImage

With tests for SendFile.

* Add APISendMessage handling

* Test file preconditions

No files should be in stores before actual sending.

* Fix mobile paths in storeFile
2023-10-11 09:45:05 +01:00
Evgeny Poberezkin 2b228a893a Merge branch 'master' into remote-desktop 2023-10-09 17:21:47 +01:00
Evgeny Poberezkin 2eb213741c Merge branch 'master' into remote-desktop 2023-10-09 10:35:38 +01:00
Alexander Bondarenko 91561da351 core: http transport for remote session (#3178)
* Wire some of the session endpoints

* Start sending remote commands

* Expand remote controller

- Fix queues for pumping to remote
- Add 3-way test
- WIP: Add TTY wrapper for remote hosts
- Stop remote controller w/o ids to match starting

* Fix view events

* Drop notifications, add message test

* refactor, receive test

* hunt down stray asyncs

* Take discovery sockets in brackets

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-10-07 14:23:24 +01:00
Evgeny Poberezkin 3ac342782b Merge branch 'master' into remote-desktop 2023-10-07 13:05:22 +01:00
Evgeny Poberezkin a273c68596 core: rename migration, pin dependencies 2023-10-05 22:33:48 +01:00
Alexander Bondarenko fc9db9c381 core: add FromJSON instance to ChatResponse (#3129)
* Start adding FromJSON instances to ChatResponse

* progress

* FromJSON instance for ChatResponse compiles

* restore removed encodings

* remove comment

* diff

* update simplexmq, use TH for JSON

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-10-05 19:49:20 +01:00
Evgeny Poberezkin 27e8a81c9f Merge branch 'master' into remote-desktop 2023-10-05 14:15:25 +01:00
Evgeny Poberezkin 7959c75df7 Merge branch 'master' into remote-desktop 2023-10-04 16:37:15 +01:00
Alexander Bondarenko 0bcf5c9c66 Add commands for remote session credentials (#3161)
* Add remote host commands

* Make startRemoteHost async

* Add tests

* Trim randomStorePath to 16 chars

* Add chat command tests

* add view, use view output in test

* enable all tests

* Fix discovery listener host

Must use any, not broadcast on macos.

* Fix missing do

* address, names

* Fix session host flow

* fix test

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-10-04 16:36:10 +01:00
IC Rainbow bf7917bd67 Merge remote-tracking branch 'origin/master' into ab/remote-discover-upd 2023-09-29 18:42:59 +03:00
IC Rainbow 6c0d1b5f15 Notify about handover errors 2023-09-29 16:53:05 +03:00
IC Rainbow af2df8d489 Rewrite remote controller 2023-09-29 15:01:05 +03:00
IC Rainbow cccb3e33fb Plug discovery into remote controller UI 2023-09-27 18:24:38 +03:00
IC Rainbow 77410e5d5e Add remote host discovery 2023-09-27 13:40:19 +03:00
Alexander Bondarenko 3e29c664ac core: remote host/controller types (#3104)
* Start sprinkling ZoneId everywhere

* Draft zone/satellite/host api

* Add zone dispatching

* Add command relaying handler

* Parse commands and begin DB

* Implement discussed things

* Resolve some comments

* Resolve more stuff

* Make bots ignore remoteHostId from queues

* Fix tests and stub more

* Untangle cmd relaying

* Resolve comments

* Add more http2 client funs

* refactor, rename

* rename

* remove empty tests

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-09-27 09:41:02 +01:00
351 changed files with 25033 additions and 5465 deletions
+29 -5
View File
@@ -81,7 +81,7 @@ jobs:
- name: Setup Haskell - name: Setup Haskell
uses: haskell-actions/setup@v2 uses: haskell-actions/setup@v2
with: with:
ghc-version: "9.6.2" ghc-version: "9.6.3"
cabal-version: "3.10.1.0" cabal-version: "3.10.1.0"
- name: Cache dependencies - name: Cache dependencies
@@ -261,11 +261,36 @@ jobs:
# / Windows # / Windows
# rm -rf dist-newstyle/src/direct-sq* is here because of the bug in cabal's dependency which prevents second build from finishing # rm -rf dist-newstyle/src/direct-sq* is here because of the bug in cabal's dependency which prevents second build from finishing
- name: 'Setup MSYS2'
if: matrix.os == 'windows-latest'
uses: msys2/setup-msys2@v2
with:
msystem: ucrt64
update: true
install: >-
git
perl
make
pacboy: >-
toolchain:p
cmake:p
- name: Windows build - name: Windows build
id: windows_build id: windows_build
if: matrix.os == 'windows-latest' if: matrix.os == 'windows-latest'
shell: bash shell: msys2 {0}
run: | run: |
export PATH=$PATH:/c/ghcup/bin
scripts/desktop/prepare-openssl-windows.sh
openssl_windows_style_path=$(echo `pwd`/dist-newstyle/openssl-1.1.1w | sed 's#/\([a-zA-Z]\)#\1:#' | sed 's#/#\\#g')
rm cabal.project.local 2>/dev/null || true
echo "ignore-project: False" >> cabal.project.local
echo "package direct-sqlcipher" >> cabal.project.local
echo " flags: +openssl" >> cabal.project.local
echo " extra-include-dirs: $openssl_windows_style_path\include" >> cabal.project.local
echo " extra-lib-dirs: $openssl_windows_style_path" >> cabal.project.local
rm -rf dist-newstyle/src/direct-sq* rm -rf dist-newstyle/src/direct-sq*
sed -i "s/, unix /--, unix /" simplex-chat.cabal sed -i "s/, unix /--, unix /" simplex-chat.cabal
cabal build --enable-tests cabal build --enable-tests
@@ -296,10 +321,9 @@ jobs:
- name: Windows build desktop - name: Windows build desktop
id: windows_desktop_build id: windows_desktop_build
if: startsWith(github.ref, 'refs/tags/v') && matrix.os == 'windows-latest' if: startsWith(github.ref, 'refs/tags/v') && matrix.os == 'windows-latest'
env: shell: msys2 {0}
SIMPLEX_CI_REPO_URL: ${{ secrets.SIMPLEX_CI_REPO_URL }}
shell: bash
run: | run: |
export PATH=$PATH:/c/ghcup/bin
scripts/desktop/build-lib-windows.sh scripts/desktop/build-lib-windows.sh
cd apps/multiplatform cd apps/multiplatform
./gradlew packageMsi ./gradlew packageMsi
+2 -2
View File
@@ -8,11 +8,11 @@ RUN a=$(arch); curl https://downloads.haskell.org/~ghcup/$a-linux-ghcup -o /usr/
chmod +x /usr/bin/ghcup chmod +x /usr/bin/ghcup
# Install ghc # Install ghc
RUN ghcup install ghc 9.6.2 RUN ghcup install ghc 9.6.3
# Install cabal # Install cabal
RUN ghcup install cabal 3.10.1.0 RUN ghcup install cabal 3.10.1.0
# Set both as default # Set both as default
RUN ghcup set ghc 9.6.2 && \ RUN ghcup set ghc 9.6.3 && \
ghcup set cabal 3.10.1.0 ghcup set cabal 3.10.1.0
COPY . /project COPY . /project
+6 -4
View File
@@ -232,6 +232,8 @@ You can use SimpleX with your own servers and still communicate with people usin
Recent and important updates: Recent and important updates:
[Nov 25, 2023. SimpleX Chat v5.4 released: link mobile and desktop apps via quantum resistant protocol, and much better groups](./blog/20231125-simplex-chat-v5-4-link-mobile-desktop-quantum-resistant-better-groups.md).
[Sep 25, 2023. SimpleX Chat v5.3 released: desktop app, local file encryption, improved groups and directory service](./blog/20230925-simplex-chat-v5-3-desktop-app-local-file-encryption-directory-service.md). [Sep 25, 2023. SimpleX Chat v5.3 released: desktop app, local file encryption, improved groups and directory service](./blog/20230925-simplex-chat-v5-3-desktop-app-local-file-encryption-directory-service.md).
[Jul 22, 2023. SimpleX Chat: v5.2 released with message delivery receipts](./blog/20230722-simplex-chat-v5-2-message-delivery-receipts.md). [Jul 22, 2023. SimpleX Chat: v5.2 released with message delivery receipts](./blog/20230722-simplex-chat-v5-2-message-delivery-receipts.md).
@@ -366,13 +368,13 @@ Please also join [#simplex-devs](https://simplex.chat/contact#/?v=1-2&smp=smp%3A
- ✅ Message delivery confirmation (with sender opt-out per contact). - ✅ Message delivery confirmation (with sender opt-out per contact).
- ✅ Desktop client. - ✅ Desktop client.
- ✅ Encryption of local files stored in the app. - ✅ Encryption of local files stored in the app.
- 🏗 Using mobile profiles from the desktop app. - Using mobile profiles from the desktop app.
- 🏗 Improve experience for the new users.
- 🏗 Post-quantum resistant key exchange in double ratchet protocol.
- 🏗 Large groups, communities and public channels.
- Message delivery relay for senders (to conceal IP address from the recipients' servers and to reduce the traffic). - Message delivery relay for senders (to conceal IP address from the recipients' servers and to reduce the traffic).
- Post-quantum resistant key exchange in double ratchet protocol.
- Large groups, communities and public channels.
- Privacy & security slider - a simple way to set all settings at once. - Privacy & security slider - a simple way to set all settings at once.
- Improve sending videos (including encryption of locally stored videos). - Improve sending videos (including encryption of locally stored videos).
- Improve experience for the new users.
- SMP queue redundancy and rotation (manual is supported). - SMP queue redundancy and rotation (manual is supported).
- Include optional message into connection request sent via contact address. - Include optional message into connection request sent via contact address.
- Improved navigation and search in the conversation (expand and scroll to quoted message, scroll to search results, etc.). - Improved navigation and search in the conversation (expand and scroll to quoted message, scroll to search results, etc.).
+4
View File
@@ -120,6 +120,10 @@ class AppDelegate: NSObject, UIApplicationDelegate {
BGManager.shared.receiveMessages(complete) BGManager.shared.receiveMessages(complete)
} }
static func keepScreenOn(_ on: Bool) {
UIApplication.shared.isIdleTimerDisabled = on
}
} }
class SceneDelegate: NSObject, ObservableObject, UIWindowSceneDelegate { class SceneDelegate: NSObject, ObservableObject, UIWindowSceneDelegate {
+32
View File
@@ -46,6 +46,7 @@ class AudioRecorder {
audioRecorder?.record(forDuration: MAX_VOICE_MESSAGE_LENGTH) audioRecorder?.record(forDuration: MAX_VOICE_MESSAGE_LENGTH)
await MainActor.run { await MainActor.run {
AppDelegate.keepScreenOn(true)
recordingTimer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true) { timer in recordingTimer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true) { timer in
guard let time = self.audioRecorder?.currentTime else { return } guard let time = self.audioRecorder?.currentTime else { return }
self.onTimer?(time) self.onTimer?(time)
@@ -57,6 +58,10 @@ class AudioRecorder {
} }
return nil return nil
} catch let error { } catch let error {
await MainActor.run {
AppDelegate.keepScreenOn(false)
}
try? av.setCategory(AVAudioSession.Category.soloAmbient)
logger.error("AudioRecorder startAudioRecording error \(error.localizedDescription)") logger.error("AudioRecorder startAudioRecording error \(error.localizedDescription)")
return .error(error.localizedDescription) return .error(error.localizedDescription)
} }
@@ -71,6 +76,8 @@ class AudioRecorder {
timer.invalidate() timer.invalidate()
} }
recordingTimer = nil recordingTimer = nil
AppDelegate.keepScreenOn(false)
try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.soloAmbient)
} }
private func checkPermission() async -> Bool { private func checkPermission() async -> Bool {
@@ -121,14 +128,19 @@ class AudioPlayer: NSObject, AVAudioPlayerDelegate {
playbackTimer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true) { timer in playbackTimer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true) { timer in
if self.audioPlayer?.isPlaying ?? false { if self.audioPlayer?.isPlaying ?? false {
AppDelegate.keepScreenOn(true)
guard let time = self.audioPlayer?.currentTime else { return } guard let time = self.audioPlayer?.currentTime else { return }
self.onTimer?(time) self.onTimer?(time)
AudioPlayer.changeAudioSession(true)
} else {
AudioPlayer.changeAudioSession(false)
} }
} }
} }
func pause() { func pause() {
audioPlayer?.pause() audioPlayer?.pause()
AppDelegate.keepScreenOn(false)
} }
func play() { func play() {
@@ -149,6 +161,8 @@ class AudioPlayer: NSObject, AVAudioPlayerDelegate {
func stop() { func stop() {
if let player = audioPlayer { if let player = audioPlayer {
player.stop() player.stop()
AppDelegate.keepScreenOn(false)
AudioPlayer.changeAudioSession(false)
} }
audioPlayer = nil audioPlayer = nil
if let timer = playbackTimer { if let timer = playbackTimer {
@@ -157,6 +171,24 @@ class AudioPlayer: NSObject, AVAudioPlayerDelegate {
playbackTimer = nil playbackTimer = nil
} }
static func changeAudioSession(_ playback: Bool) {
// When there is a audio recording, setting any other category will disable sound
if AVAudioSession.sharedInstance().category == .playAndRecord {
return
}
if playback {
if AVAudioSession.sharedInstance().category != .playback {
logger.log("AudioSession: playback")
try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, options: .duckOthers)
}
} else {
if AVAudioSession.sharedInstance().category != .soloAmbient {
logger.log("AudioSession: soloAmbient")
try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.soloAmbient)
}
}
}
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
stop() stop()
self.onFinishPlayback?() self.onFinishPlayback?()
+50 -3
View File
@@ -85,6 +85,8 @@ final class ChatModel: ObservableObject {
@Published var activeCall: Call? @Published var activeCall: Call?
@Published var callCommand: WCallCommand? @Published var callCommand: WCallCommand?
@Published var showCallView = false @Published var showCallView = false
// remote desktop
@Published var remoteCtrlSession: RemoteCtrlSession?
// currently showing QR code // currently showing QR code
@Published var connReqInv: String? @Published var connReqInv: String?
// audio recording and playback // audio recording and playback
@@ -110,6 +112,10 @@ final class ChatModel: ObservableObject {
notificationMode == .periodic || ntfEnablePeriodicGroupDefault.get() notificationMode == .periodic || ntfEnablePeriodicGroupDefault.get()
} }
var activeRemoteCtrl: Bool {
remoteCtrlSession?.active ?? false
}
func getUser(_ userId: Int64) -> User? { func getUser(_ userId: Int64) -> User? {
currentUser?.userId == userId currentUser?.userId == userId
? currentUser ? currentUser
@@ -194,7 +200,7 @@ final class ChatModel: ObservableObject {
func updateContactConnectionStats(_ contact: Contact, _ connectionStats: ConnectionStats) { func updateContactConnectionStats(_ contact: Contact, _ connectionStats: ConnectionStats) {
var updatedConn = contact.activeConn var updatedConn = contact.activeConn
updatedConn.connectionStats = connectionStats updatedConn?.connectionStats = connectionStats
var updatedContact = contact var updatedContact = contact
updatedContact.activeConn = updatedConn updatedContact.activeConn = updatedConn
updateContact(updatedContact) updateContact(updatedContact)
@@ -671,11 +677,17 @@ final class ChatModel: ObservableObject {
} }
func setContactNetworkStatus(_ contact: Contact, _ status: NetworkStatus) { func setContactNetworkStatus(_ contact: Contact, _ status: NetworkStatus) {
networkStatuses[contact.activeConn.agentConnId] = status if let conn = contact.activeConn {
networkStatuses[conn.agentConnId] = status
}
} }
func contactNetworkStatus(_ contact: Contact) -> NetworkStatus { func contactNetworkStatus(_ contact: Contact) -> NetworkStatus {
networkStatuses[contact.activeConn.agentConnId] ?? .unknown if let conn = contact.activeConn {
networkStatuses[conn.agentConnId] ?? .unknown
} else {
.unknown
}
} }
} }
@@ -756,3 +768,38 @@ final class GMember: ObservableObject, Identifiable {
var viewId: String { get { "\(wrapped.id) \(created.timeIntervalSince1970)" } } var viewId: String { get { "\(wrapped.id) \(created.timeIntervalSince1970)" } }
static let sampleData = GMember(GroupMember.sampleData) static let sampleData = GMember(GroupMember.sampleData)
} }
struct RemoteCtrlSession {
var ctrlAppInfo: CtrlAppInfo?
var appVersion: String
var sessionState: UIRemoteCtrlSessionState
func updateState(_ state: UIRemoteCtrlSessionState) -> RemoteCtrlSession {
RemoteCtrlSession(ctrlAppInfo: ctrlAppInfo, appVersion: appVersion, sessionState: state)
}
var active: Bool {
if case .connected = sessionState { true } else { false }
}
var discovery: Bool {
if case .searching = sessionState { true } else { false }
}
var sessionCode: String? {
switch sessionState {
case let .pendingConfirmation(_, sessionCode): sessionCode
case let .connected(_, sessionCode): sessionCode
default: nil
}
}
}
enum UIRemoteCtrlSessionState {
case starting
case searching
case found(remoteCtrl: RemoteCtrlInfo, compatible: Bool)
case connecting(remoteCtrl_: RemoteCtrlInfo?)
case pendingConfirmation(remoteCtrl_: RemoteCtrlInfo?, sessionCode: String)
case connected(remoteCtrl: RemoteCtrlInfo, sessionCode: String)
}
+115 -7
View File
@@ -675,6 +675,18 @@ private func connectionErrorAlert(_ r: ChatResponse) -> Alert {
} }
} }
func apiConnectContactViaAddress(incognito: Bool, contactId: Int64) async -> (Contact?, Alert?) {
guard let userId = ChatModel.shared.currentUser?.userId else {
logger.error("apiConnectContactViaAddress: no current user")
return (nil, nil)
}
let r = await chatSendCmd(.apiConnectContactViaAddress(userId: userId, incognito: incognito, contactId: contactId))
if case let .sentInvitationToContact(_, contact, _) = r { return (contact, nil) }
logger.error("apiConnectContactViaAddress error: \(responseError(r))")
let alert = connectionErrorAlert(r)
return (nil, alert)
}
func apiDeleteChat(type: ChatType, id: Int64, notify: Bool? = nil) async throws { func apiDeleteChat(type: ChatType, id: Int64, notify: Bool? = nil) async throws {
let r = await chatSendCmd(.apiDeleteChat(type: type, id: id, notify: notify), bgTask: false) let r = await chatSendCmd(.apiDeleteChat(type: type, id: id, notify: notify), bgTask: false)
if case .direct = type, case .contactDeleted = r { return } if case .direct = type, case .contactDeleted = r { return }
@@ -893,6 +905,46 @@ func apiCancelFile(fileId: Int64) async -> AChatItem? {
} }
} }
func setLocalDeviceName(_ displayName: String) throws {
try sendCommandOkRespSync(.setLocalDeviceName(displayName: displayName))
}
func connectRemoteCtrl(desktopAddress: String) async throws -> (RemoteCtrlInfo?, CtrlAppInfo, String) {
let r = await chatSendCmd(.connectRemoteCtrl(xrcpInvitation: desktopAddress))
if case let .remoteCtrlConnecting(rc_, ctrlAppInfo, v) = r { return (rc_, ctrlAppInfo, v) }
throw r
}
func findKnownRemoteCtrl() async throws {
try await sendCommandOkResp(.findKnownRemoteCtrl)
}
func confirmRemoteCtrl(_ rcId: Int64) async throws -> (RemoteCtrlInfo?, CtrlAppInfo, String) {
let r = await chatSendCmd(.confirmRemoteCtrl(remoteCtrlId: rcId))
if case let .remoteCtrlConnecting(rc_, ctrlAppInfo, v) = r { return (rc_, ctrlAppInfo, v) }
throw r
}
func verifyRemoteCtrlSession(_ sessCode: String) async throws -> RemoteCtrlInfo {
let r = await chatSendCmd(.verifyRemoteCtrlSession(sessionCode: sessCode))
if case let .remoteCtrlConnected(rc) = r { return rc }
throw r
}
func listRemoteCtrls() throws -> [RemoteCtrlInfo] {
let r = chatSendCmdSync(.listRemoteCtrls)
if case let .remoteCtrlList(rcInfo) = r { return rcInfo }
throw r
}
func stopRemoteCtrl() async throws {
try await sendCommandOkResp(.stopRemoteCtrl)
}
func deleteRemoteCtrl(_ rcId: Int64) async throws {
try await sendCommandOkResp(.deleteRemoteCtrl(remoteCtrlId: rcId))
}
func networkErrorAlert(_ r: ChatResponse) -> Alert? { func networkErrorAlert(_ r: ChatResponse) -> Alert? {
switch r { switch r {
case let .chatCmdError(_, .errorAgent(.BROKER(addr, .TIMEOUT))): case let .chatCmdError(_, .errorAgent(.BROKER(addr, .TIMEOUT))):
@@ -1021,6 +1073,12 @@ private func sendCommandOkResp(_ cmd: ChatCommand) async throws {
throw r throw r
} }
private func sendCommandOkRespSync(_ cmd: ChatCommand) throws {
let r = chatSendCmdSync(cmd)
if case .cmdOk = r { return }
throw r
}
func apiNewGroup(incognito: Bool, groupProfile: GroupProfile) throws -> GroupInfo { func apiNewGroup(incognito: Bool, groupProfile: GroupProfile) throws -> GroupInfo {
let userId = try currentUserId("apiNewGroup") let userId = try currentUserId("apiNewGroup")
let r = chatSendCmdSync(.apiNewGroup(userId: userId, incognito: incognito, groupProfile: groupProfile)) let r = chatSendCmdSync(.apiNewGroup(userId: userId, incognito: incognito, groupProfile: groupProfile))
@@ -1326,8 +1384,10 @@ func processReceivedMsg(_ res: ChatResponse) async {
if active(user) && contact.directOrUsed { if active(user) && contact.directOrUsed {
await MainActor.run { await MainActor.run {
m.updateContact(contact) m.updateContact(contact)
m.dismissConnReqView(contact.activeConn.id) if let conn = contact.activeConn {
m.removeChat(contact.activeConn.id) m.dismissConnReqView(conn.id)
m.removeChat(conn.id)
}
} }
} }
if contact.directOrUsed { if contact.directOrUsed {
@@ -1340,8 +1400,10 @@ func processReceivedMsg(_ res: ChatResponse) async {
if active(user) && contact.directOrUsed { if active(user) && contact.directOrUsed {
await MainActor.run { await MainActor.run {
m.updateContact(contact) m.updateContact(contact)
m.dismissConnReqView(contact.activeConn.id) if let conn = contact.activeConn {
m.removeChat(contact.activeConn.id) m.dismissConnReqView(conn.id)
m.removeChat(conn.id)
}
} }
} }
case let .receivedContactRequest(user, contactRequest): case let .receivedContactRequest(user, contactRequest):
@@ -1480,9 +1542,9 @@ func processReceivedMsg(_ res: ChatResponse) async {
await MainActor.run { await MainActor.run {
m.updateGroup(groupInfo) m.updateGroup(groupInfo)
if let hostContact = hostContact { if let conn = hostContact?.activeConn {
m.dismissConnReqView(hostContact.activeConn.id) m.dismissConnReqView(conn.id)
m.removeChat(hostContact.activeConn.id) m.removeChat(conn.id)
} }
} }
case let .groupLinkConnecting(user, groupInfo, hostMember): case let .groupLinkConnecting(user, groupInfo, hostMember):
@@ -1654,6 +1716,39 @@ func processReceivedMsg(_ res: ChatResponse) async {
await MainActor.run { await MainActor.run {
m.updateGroupMemberConnectionStats(groupInfo, member, ratchetSyncProgress.connectionStats) m.updateGroupMemberConnectionStats(groupInfo, member, ratchetSyncProgress.connectionStats)
} }
case let .remoteCtrlFound(remoteCtrl, ctrlAppInfo_, appVersion, compatible):
await MainActor.run {
if let sess = m.remoteCtrlSession, case .searching = sess.sessionState {
let state = UIRemoteCtrlSessionState.found(remoteCtrl: remoteCtrl, compatible: compatible)
m.remoteCtrlSession = RemoteCtrlSession(
ctrlAppInfo: ctrlAppInfo_,
appVersion: appVersion,
sessionState: state
)
}
}
case let .remoteCtrlSessionCode(remoteCtrl_, sessionCode):
await MainActor.run {
let state = UIRemoteCtrlSessionState.pendingConfirmation(remoteCtrl_: remoteCtrl_, sessionCode: sessionCode)
m.remoteCtrlSession = m.remoteCtrlSession?.updateState(state)
}
case let .remoteCtrlConnected(remoteCtrl):
// TODO currently it is returned in response to command, so it is redundant
await MainActor.run {
let state = UIRemoteCtrlSessionState.connected(remoteCtrl: remoteCtrl, sessionCode: m.remoteCtrlSession?.sessionCode ?? "")
m.remoteCtrlSession = m.remoteCtrlSession?.updateState(state)
}
case .remoteCtrlStopped:
// This delay is needed to cancel the session that fails on network failure,
// e.g. when user did not grant permission to access local network yet.
if let sess = m.remoteCtrlSession {
m.remoteCtrlSession = nil
if case .connected = sess.sessionState {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
switchToLocalSession()
}
}
}
default: default:
logger.debug("unsupported event: \(res.responseType)") logger.debug("unsupported event: \(res.responseType)")
} }
@@ -1667,6 +1762,19 @@ func processReceivedMsg(_ res: ChatResponse) async {
} }
} }
func switchToLocalSession() {
let m = ChatModel.shared
m.remoteCtrlSession = nil
do {
m.users = try listUsers()
try getUserChatData()
let statuses = (try apiGetNetworkStatuses()).map { s in (s.agentConnId, s.networkStatus) }
m.networkStatuses = Dictionary(uniqueKeysWithValues: statuses)
} catch let error {
logger.debug("error updating chat data: \(responseError(error))")
}
}
func active(_ user: any UserLike) -> Bool { func active(_ user: any UserLike) -> Bool {
user.userId == ChatModel.shared.currentUser?.id user.userId == ChatModel.shared.currentUser?.id
} }
+4 -1
View File
@@ -26,7 +26,10 @@ struct SimpleXApp: App {
@State private var showInitializationView = false @State private var showInitializationView = false
init() { init() {
hs_init(0, nil) DispatchQueue.global(qos: .background).sync {
haskell_init()
// hs_init(0, nil)
}
UserDefaults.standard.register(defaults: appDefaults) UserDefaults.standard.register(defaults: appDefaults)
setGroupDefaults() setGroupDefaults()
registerGroupDefaults() registerGroupDefaults()
@@ -39,6 +39,7 @@ struct ActiveCallView: View {
} }
.onAppear { .onAppear {
logger.debug("ActiveCallView: appear client is nil \(client == nil), scenePhase \(String(describing: scenePhase), privacy: .public), canConnectCall \(canConnectCall)") logger.debug("ActiveCallView: appear client is nil \(client == nil), scenePhase \(String(describing: scenePhase), privacy: .public), canConnectCall \(canConnectCall)")
AppDelegate.keepScreenOn(true)
createWebRTCClient() createWebRTCClient()
dismissAllSheets() dismissAllSheets()
} }
@@ -48,6 +49,7 @@ struct ActiveCallView: View {
} }
.onDisappear { .onDisappear {
logger.debug("ActiveCallView: disappear") logger.debug("ActiveCallView: disappear")
AppDelegate.keepScreenOn(false)
client?.endCall() client?.endCall()
} }
.onChange(of: m.callCommand) { _ in sendCommandToClient()} .onChange(of: m.callCommand) { _ in sendCommandToClient()}
@@ -338,7 +338,7 @@ struct ChatInfoView: View {
verify: { code in verify: { code in
if let r = apiVerifyContact(chat.chatInfo.apiId, connectionCode: code) { if let r = apiVerifyContact(chat.chatInfo.apiId, connectionCode: code) {
let (verified, existingCode) = r let (verified, existingCode) = r
contact.activeConn.connectionCode = verified ? SecurityCode(securityCode: existingCode, verifiedAt: .now) : nil contact.activeConn?.connectionCode = verified ? SecurityCode(securityCode: existingCode, verifiedAt: .now) : nil
connectionCode = existingCode connectionCode = existingCode
DispatchQueue.main.async { DispatchQueue.main.async {
chat.chatInfo = .direct(contact: contact) chat.chatInfo = .direct(contact: contact)
@@ -66,7 +66,7 @@ struct CIRcvDecryptionError: View {
@ViewBuilder private func viewBody() -> some View { @ViewBuilder private func viewBody() -> some View {
if case let .direct(contact) = chat.chatInfo, if case let .direct(contact) = chat.chatInfo,
let contactStats = contact.activeConn.connectionStats { let contactStats = contact.activeConn?.connectionStats {
if contactStats.ratchetSyncAllowed { if contactStats.ratchetSyncAllowed {
decryptionErrorItemFixButton(syncSupported: true) { decryptionErrorItemFixButton(syncSupported: true) {
alert = .syncAllowedAlert { syncContactConnection(contact) } alert = .syncAllowedAlert { syncContactConnection(contact) }
@@ -165,6 +165,8 @@ struct CIRcvDecryptionError: View {
message = Text("\(msgCount) messages failed to decrypt.") + Text("\n") + why message = Text("\(msgCount) messages failed to decrypt.") + Text("\n") + why
case .other: case .other:
message = Text("\(msgCount) messages failed to decrypt.") + Text("\n") + why message = Text("\(msgCount) messages failed to decrypt.") + Text("\n") + why
case .ratchetSync:
message = Text("Encryption re-negotiation failed.")
} }
return message return message
} }
@@ -9,6 +9,7 @@
import SwiftUI import SwiftUI
import AVKit import AVKit
import SimpleXChat import SimpleXChat
import Combine
struct CIVideoView: View { struct CIVideoView: View {
@EnvironmentObject var m: ChatModel @EnvironmentObject var m: ChatModel
@@ -28,6 +29,7 @@ struct CIVideoView: View {
@State private var showFullScreenPlayer = false @State private var showFullScreenPlayer = false
@State private var timeObserver: Any? = nil @State private var timeObserver: Any? = nil
@State private var fullScreenTimeObserver: Any? = nil @State private var fullScreenTimeObserver: Any? = nil
@State private var publisher: AnyCancellable? = nil
init(chatItem: ChatItem, image: String, duration: Int, maxWidth: CGFloat, videoWidth: Binding<CGFloat?>, scrollProxy: ScrollViewProxy?) { init(chatItem: ChatItem, image: String, duration: Int, maxWidth: CGFloat, videoWidth: Binding<CGFloat?>, scrollProxy: ScrollViewProxy?) {
self.chatItem = chatItem self.chatItem = chatItem
@@ -294,6 +296,14 @@ struct CIVideoView: View {
m.stopPreviousRecPlay = url m.stopPreviousRecPlay = url
if let player = fullPlayer { if let player = fullPlayer {
player.play() player.play()
var played = false
publisher = player.publisher(for: \.timeControlStatus).sink { status in
if played || status == .playing {
AppDelegate.keepScreenOn(status == .playing)
AudioPlayer.changeAudioSession(status == .playing)
}
played = status == .playing
}
fullScreenTimeObserver = NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: player.currentItem, queue: .main) { _ in fullScreenTimeObserver = NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: player.currentItem, queue: .main) { _ in
player.seek(to: CMTime.zero) player.seek(to: CMTime.zero)
player.play() player.play()
@@ -308,6 +318,7 @@ struct CIVideoView: View {
fullScreenTimeObserver = nil fullScreenTimeObserver = nil
fullPlayer?.pause() fullPlayer?.pause()
fullPlayer?.seek(to: CMTime.zero) fullPlayer?.seek(to: CMTime.zero)
publisher?.cancel()
} }
} }
} }
+2 -2
View File
@@ -114,7 +114,7 @@ struct ChatView: View {
connectionStats = stats connectionStats = stats
customUserProfile = profile customUserProfile = profile
connectionCode = code connectionCode = code
if contact.activeConn.connectionCode != ct.activeConn.connectionCode { if contact.activeConn?.connectionCode != ct.activeConn?.connectionCode {
chat.chatInfo = .direct(contact: ct) chat.chatInfo = .direct(contact: ct)
} }
} }
@@ -767,7 +767,7 @@ struct ChatView: View {
} else if ci.isDeletedContent { } else if ci.isDeletedContent {
menu.append(viewInfoUIAction(ci)) menu.append(viewInfoUIAction(ci))
menu.append(deleteUIAction(ci)) menu.append(deleteUIAction(ci))
} else if ci.mergeCategory != nil { } else if ci.mergeCategory != nil && ((range?.count ?? 0) > 1 || revealed) {
menu.append(revealed ? shrinkUIAction() : expandUIAction()) menu.append(revealed ? shrinkUIAction() : expandUIAction())
} }
return menu return menu
@@ -157,7 +157,7 @@ struct AddGroupMembersViewCommon: View {
private func rolePicker() -> some View { private func rolePicker() -> some View {
Picker("New member role", selection: $selectedRole) { Picker("New member role", selection: $selectedRole) {
ForEach(GroupMemberRole.allCases) { role in ForEach(GroupMemberRole.allCases) { role in
if role <= groupInfo.membership.memberRole { if role <= groupInfo.membership.memberRole && role != .author {
Text(role.text) Text(role.text)
} }
} }
@@ -33,6 +33,7 @@ struct ChatListNavLink: View {
@State private var showContactConnectionInfo = false @State private var showContactConnectionInfo = false
@State private var showInvalidJSON = false @State private var showInvalidJSON = false
@State private var showDeleteContactActionSheet = false @State private var showDeleteContactActionSheet = false
@State private var showConnectContactViaAddressDialog = false
@State private var inProgress = false @State private var inProgress = false
@State private var progressByTimeout = false @State private var progressByTimeout = false
@@ -63,32 +64,52 @@ struct ChatListNavLink: View {
} }
@ViewBuilder private func contactNavLink(_ contact: Contact) -> some View { @ViewBuilder private func contactNavLink(_ contact: Contact) -> some View {
NavLinkPlain( Group {
tag: chat.chatInfo.id, if contact.activeConn == nil && contact.profile.contactLink != nil {
selection: $chatModel.chatId, ChatPreviewView(chat: chat, progressByTimeout: Binding.constant(false))
label: { ChatPreviewView(chat: chat, progressByTimeout: Binding.constant(false)) } .frame(height: rowHeights[dynamicTypeSize])
) .swipeActions(edge: .trailing, allowsFullSwipe: true) {
.swipeActions(edge: .leading, allowsFullSwipe: true) { Button {
markReadButton() showDeleteContactActionSheet = true
toggleFavoriteButton() } label: {
toggleNtfsButton(chat) Label("Delete", systemImage: "trash")
} }
.swipeActions(edge: .trailing, allowsFullSwipe: true) { .tint(.red)
if !chat.chatItems.isEmpty { }
clearChatButton() .onTapGesture { showConnectContactViaAddressDialog = true }
} .confirmationDialog("Connect with \(contact.chatViewName)", isPresented: $showConnectContactViaAddressDialog, titleVisibility: .visible) {
Button { Button("Use current profile") { connectContactViaAddress_(contact, false) }
if contact.ready || !contact.active { Button("Use new incognito profile") { connectContactViaAddress_(contact, true) }
showDeleteContactActionSheet = true }
} else { } else {
AlertManager.shared.showAlert(deletePendingContactAlert(chat, contact)) NavLinkPlain(
tag: chat.chatInfo.id,
selection: $chatModel.chatId,
label: { ChatPreviewView(chat: chat, progressByTimeout: Binding.constant(false)) }
)
.swipeActions(edge: .leading, allowsFullSwipe: true) {
markReadButton()
toggleFavoriteButton()
toggleNtfsButton(chat)
} }
} label: { .swipeActions(edge: .trailing, allowsFullSwipe: true) {
Label("Delete", systemImage: "trash") if !chat.chatItems.isEmpty {
clearChatButton()
}
Button {
if contact.ready || !contact.active {
showDeleteContactActionSheet = true
} else {
AlertManager.shared.showAlert(deletePendingContactAlert(chat, contact))
}
} label: {
Label("Delete", systemImage: "trash")
}
.tint(.red)
}
.frame(height: rowHeights[dynamicTypeSize])
} }
.tint(.red)
} }
.frame(height: rowHeights[dynamicTypeSize])
.actionSheet(isPresented: $showDeleteContactActionSheet) { .actionSheet(isPresented: $showDeleteContactActionSheet) {
if contact.ready && contact.active { if contact.ready && contact.active {
return ActionSheet( return ActionSheet(
@@ -411,6 +432,17 @@ struct ChatListNavLink: View {
.environment(\EnvironmentValues.refresh as! WritableKeyPath<EnvironmentValues, RefreshAction?>, nil) .environment(\EnvironmentValues.refresh as! WritableKeyPath<EnvironmentValues, RefreshAction?>, nil)
} }
} }
private func connectContactViaAddress_(_ contact: Contact, _ incognito: Bool) {
Task {
let ok = await connectContactViaAddress(contact.contactId, incognito)
if ok {
await MainActor.run {
chatModel.chatId = contact.id
}
}
}
}
} }
func deleteContactConnectionAlert(_ contactConnection: PendingContactConnection, showError: @escaping (ErrorAlert) -> Void, success: @escaping () -> Void = {}) -> Alert { func deleteContactConnectionAlert(_ contactConnection: PendingContactConnection, showError: @escaping (ErrorAlert) -> Void, success: @escaping () -> Void = {}) -> Alert {
@@ -439,6 +471,21 @@ func deleteContactConnectionAlert(_ contactConnection: PendingContactConnection,
) )
} }
func connectContactViaAddress(_ contactId: Int64, _ incognito: Bool) async -> Bool {
let (contact, alert) = await apiConnectContactViaAddress(incognito: incognito, contactId: contactId)
if let alert = alert {
AlertManager.shared.showAlert(alert)
return false
} else if let contact = contact {
await MainActor.run {
ChatModel.shared.updateContact(contact)
AlertManager.shared.showAlert(connReqSentAlert(.contact))
}
return true
}
return false
}
func joinGroup(_ groupId: Int64, _ onComplete: @escaping () async -> Void) { func joinGroup(_ groupId: Int64, _ onComplete: @escaping () async -> Void) {
Task { Task {
logger.debug("joinGroup") logger.debug("joinGroup")
@@ -15,6 +15,7 @@ struct ChatListView: View {
@State private var searchText = "" @State private var searchText = ""
@State private var showAddChat = false @State private var showAddChat = false
@State private var userPickerVisible = false @State private var userPickerVisible = false
@State private var showConnectDesktop = false
@AppStorage(DEFAULT_SHOW_UNREAD_AND_FAVORITES) private var showUnreadAndFavorites = false @AppStorage(DEFAULT_SHOW_UNREAD_AND_FAVORITES) private var showUnreadAndFavorites = false
var body: some View { var body: some View {
@@ -48,7 +49,14 @@ struct ChatListView: View {
} }
} }
} }
UserPicker(showSettings: $showSettings, userPickerVisible: $userPickerVisible) UserPicker(
showSettings: $showSettings,
showConnectDesktop: $showConnectDesktop,
userPickerVisible: $userPickerVisible
)
}
.sheet(isPresented: $showConnectDesktop) {
ConnectDesktopView()
} }
} }
@@ -177,13 +185,6 @@ struct ChatListView: View {
showAddChat = true showAddChat = true
} }
connectButton("or chat with the developers") {
DispatchQueue.main.async {
UIApplication.shared.open(simplexTeamURL)
}
}
.padding(.top, 10)
Spacer() Spacer()
Text("You have no chats") Text("You have no chats")
.foregroundColor(.secondary) .foregroundColor(.secondary)
@@ -190,7 +190,10 @@ struct ChatPreviewView: View {
} else { } else {
switch (chat.chatInfo) { switch (chat.chatInfo) {
case let .direct(contact): case let .direct(contact):
if !contact.ready { if contact.activeConn == nil && contact.profile.contactLink != nil {
chatPreviewInfoText("Tap to Connect")
.foregroundColor(.accentColor)
} else if !contact.ready && contact.activeConn != nil {
if contact.nextSendGrpInv { if contact.nextSendGrpInv {
chatPreviewInfoText("send direct message") chatPreviewInfoText("send direct message")
} else if contact.active { } else if contact.active {
@@ -238,7 +241,7 @@ struct ChatPreviewView: View {
@ViewBuilder private func chatStatusImage() -> some View { @ViewBuilder private func chatStatusImage() -> some View {
switch chat.chatInfo { switch chat.chatInfo {
case let .direct(contact): case let .direct(contact):
if contact.active { if contact.active && contact.activeConn != nil {
switch (chatModel.contactNetworkStatus(contact)) { switch (chatModel.contactNetworkStatus(contact)) {
case .connected: incognitoIcon(chat.chatInfo.incognito) case .connected: incognitoIcon(chat.chatInfo.incognito)
case .error: case .error:
@@ -13,6 +13,7 @@ struct UserPicker: View {
@EnvironmentObject var m: ChatModel @EnvironmentObject var m: ChatModel
@Environment(\.colorScheme) var colorScheme @Environment(\.colorScheme) var colorScheme
@Binding var showSettings: Bool @Binding var showSettings: Bool
@Binding var showConnectDesktop: Bool
@Binding var userPickerVisible: Bool @Binding var userPickerVisible: Bool
@State var scrollViewContentSize: CGSize = .zero @State var scrollViewContentSize: CGSize = .zero
@State var disableScrolling: Bool = true @State var disableScrolling: Bool = true
@@ -62,6 +63,13 @@ struct UserPicker: View {
.simultaneousGesture(DragGesture(minimumDistance: disableScrolling ? 0 : 10000000)) .simultaneousGesture(DragGesture(minimumDistance: disableScrolling ? 0 : 10000000))
.frame(maxHeight: scrollViewContentSize.height) .frame(maxHeight: scrollViewContentSize.height)
menuButton("Use from desktop", icon: "desktopcomputer") {
showConnectDesktop = true
withAnimation {
userPickerVisible.toggle()
}
}
Divider()
menuButton("Settings", icon: "gearshape") { menuButton("Settings", icon: "gearshape") {
showSettings = true showSettings = true
withAnimation { withAnimation {
@@ -85,7 +93,7 @@ struct UserPicker: View {
do { do {
m.users = try listUsers() m.users = try listUsers()
} catch let error { } catch let error {
logger.error("Error updating users \(responseError(error))") logger.error("Error loading users \(responseError(error))")
} }
} }
} }
@@ -144,7 +152,8 @@ struct UserPicker: View {
.overlay(DetermineWidth()) .overlay(DetermineWidth())
Spacer() Spacer()
Image(systemName: icon) Image(systemName: icon)
// .frame(width: 24, alignment: .center) .symbolRenderingMode(.monochrome)
.foregroundColor(.secondary)
} }
.padding(.horizontal) .padding(.horizontal)
.padding(.vertical, 22) .padding(.vertical, 22)
@@ -170,6 +179,7 @@ struct UserPicker_Previews: PreviewProvider {
m.users = [UserInfo.sampleData, UserInfo.sampleData] m.users = [UserInfo.sampleData, UserInfo.sampleData]
return UserPicker( return UserPicker(
showSettings: Binding.constant(false), showSettings: Binding.constant(false),
showConnectDesktop: Binding.constant(false),
userPickerVisible: Binding.constant(true) userPickerVisible: Binding.constant(true)
) )
.environmentObject(m) .environmentObject(m)
@@ -6,6 +6,7 @@
import Foundation import Foundation
import SwiftUI import SwiftUI
import AVKit import AVKit
import Combine
struct VideoPlayerView: UIViewRepresentable { struct VideoPlayerView: UIViewRepresentable {
@@ -37,6 +38,14 @@ struct VideoPlayerView: UIViewRepresentable {
player.seek(to: CMTime.zero) player.seek(to: CMTime.zero)
player.play() player.play()
} }
var played = false
context.coordinator.publisher = player.publisher(for: \.timeControlStatus).sink { status in
if played || status == .playing {
AppDelegate.keepScreenOn(status == .playing)
AudioPlayer.changeAudioSession(status == .playing)
}
played = status == .playing
}
return controller.view return controller.view
} }
@@ -50,11 +59,13 @@ struct VideoPlayerView: UIViewRepresentable {
class Coordinator: NSObject { class Coordinator: NSObject {
var controller: AVPlayerViewController? var controller: AVPlayerViewController?
var timeObserver: Any? = nil var timeObserver: Any? = nil
var publisher: AnyCancellable? = nil
deinit { deinit {
if let timeObserver = timeObserver { if let timeObserver = timeObserver {
NotificationCenter.default.removeObserver(timeObserver) NotificationCenter.default.removeObserver(timeObserver)
} }
publisher?.cancel()
} }
} }
} }
@@ -155,12 +155,14 @@ func planAndConnectAlert(_ alert: PlanAndConnectAlert, dismiss: Bool) -> Alert {
enum PlanAndConnectActionSheet: Identifiable { enum PlanAndConnectActionSheet: Identifiable {
case askCurrentOrIncognitoProfile(connectionLink: String, connectionPlan: ConnectionPlan?, title: LocalizedStringKey) case askCurrentOrIncognitoProfile(connectionLink: String, connectionPlan: ConnectionPlan?, title: LocalizedStringKey)
case askCurrentOrIncognitoProfileDestructive(connectionLink: String, connectionPlan: ConnectionPlan, title: LocalizedStringKey) case askCurrentOrIncognitoProfileDestructive(connectionLink: String, connectionPlan: ConnectionPlan, title: LocalizedStringKey)
case askCurrentOrIncognitoProfileConnectContactViaAddress(contact: Contact)
case ownGroupLinkConfirmConnect(connectionLink: String, connectionPlan: ConnectionPlan, incognito: Bool?, groupInfo: GroupInfo) case ownGroupLinkConfirmConnect(connectionLink: String, connectionPlan: ConnectionPlan, incognito: Bool?, groupInfo: GroupInfo)
var id: String { var id: String {
switch self { switch self {
case let .askCurrentOrIncognitoProfile(connectionLink, _, _): return "askCurrentOrIncognitoProfile \(connectionLink)" case let .askCurrentOrIncognitoProfile(connectionLink, _, _): return "askCurrentOrIncognitoProfile \(connectionLink)"
case let .askCurrentOrIncognitoProfileDestructive(connectionLink, _, _): return "askCurrentOrIncognitoProfileDestructive \(connectionLink)" case let .askCurrentOrIncognitoProfileDestructive(connectionLink, _, _): return "askCurrentOrIncognitoProfileDestructive \(connectionLink)"
case let .askCurrentOrIncognitoProfileConnectContactViaAddress(contact): return "askCurrentOrIncognitoProfileConnectContactViaAddress \(contact.contactId)"
case let .ownGroupLinkConfirmConnect(connectionLink, _, _, _): return "ownGroupLinkConfirmConnect \(connectionLink)" case let .ownGroupLinkConfirmConnect(connectionLink, _, _, _): return "ownGroupLinkConfirmConnect \(connectionLink)"
} }
} }
@@ -186,6 +188,15 @@ func planAndConnectActionSheet(_ sheet: PlanAndConnectActionSheet, dismiss: Bool
.cancel() .cancel()
] ]
) )
case let .askCurrentOrIncognitoProfileConnectContactViaAddress(contact):
return ActionSheet(
title: Text("Connect with \(contact.chatViewName)"),
buttons: [
.default(Text("Use current profile")) { connectContactViaAddress_(contact, dismiss: dismiss, incognito: false) },
.default(Text("Use new incognito profile")) { connectContactViaAddress_(contact, dismiss: dismiss, incognito: true) },
.cancel()
]
)
case let .ownGroupLinkConfirmConnect(connectionLink, connectionPlan, incognito, groupInfo): case let .ownGroupLinkConfirmConnect(connectionLink, connectionPlan, incognito, groupInfo):
if let incognito = incognito { if let incognito = incognito {
return ActionSheet( return ActionSheet(
@@ -277,6 +288,13 @@ func planAndConnect(
case let .known(contact): case let .known(contact):
logger.debug("planAndConnect, .contactAddress, .known, incognito=\(incognito?.description ?? "nil")") logger.debug("planAndConnect, .contactAddress, .known, incognito=\(incognito?.description ?? "nil")")
openKnownContact(contact, dismiss: dismiss) { AlertManager.shared.showAlert(contactAlreadyExistsAlert(contact)) } openKnownContact(contact, dismiss: dismiss) { AlertManager.shared.showAlert(contactAlreadyExistsAlert(contact)) }
case let .contactViaAddress(contact):
logger.debug("planAndConnect, .contactAddress, .contactViaAddress, incognito=\(incognito?.description ?? "nil")")
if let incognito = incognito {
connectContactViaAddress_(contact, dismiss: dismiss, incognito: incognito)
} else {
showActionSheet(.askCurrentOrIncognitoProfileConnectContactViaAddress(contact: contact))
}
} }
case let .groupLink(glp): case let .groupLink(glp):
switch glp { switch glp {
@@ -315,6 +333,17 @@ func planAndConnect(
} }
} }
private func connectContactViaAddress_(_ contact: Contact, dismiss: Bool, incognito: Bool) {
Task {
if dismiss {
DispatchQueue.main.async {
dismissAllSheets(animated: true)
}
}
_ = await connectContactViaAddress(contact.contactId, incognito)
}
}
private func connectViaLink(_ connectionLink: String, connectionPlan: ConnectionPlan?, dismiss: Bool, incognito: Bool) { private func connectViaLink(_ connectionLink: String, connectionPlan: ConnectionPlan?, dismiss: Bool, incognito: Bool) {
Task { Task {
if let connReqType = await apiConnect(incognito: incognito, connReq: connectionLink) { if let connReqType = await apiConnect(incognito: incognito, connReq: connectionLink) {
@@ -283,6 +283,37 @@ private let versionDescriptions: [VersionDescription] = [
), ),
] ]
), ),
VersionDescription(
version: "v5.4",
post: URL(string: "https://simplex.chat/blog/20231125-simplex-chat-v5-4-link-mobile-desktop-quantum-resistant-better-groups.html"),
features: [
FeatureDescription(
icon: "desktopcomputer",
title: "Link mobile and desktop apps! 🔗",
description: "Via secure quantum resistant protocol."
),
FeatureDescription(
icon: "person.2",
title: "Better groups",
description: "Faster joining and more reliable messages."
),
FeatureDescription(
icon: "theatermasks",
title: "Incognito groups",
description: "Create a group using a random profile."
),
FeatureDescription(
icon: "hand.raised",
title: "Block group members",
description: "To hide unwanted messages."
),
FeatureDescription(
icon: "gift",
title: "A few more things",
description: "- optionally notify deleted contacts.\n- profile names with spaces.\n- and more!"
),
]
),
] ]
private let lastVersion = versionDescriptions.last!.version private let lastVersion = versionDescriptions.last!.version
@@ -0,0 +1,556 @@
//
// ConnectDesktopView.swift
// SimpleX (iOS)
//
// Created by Evgeny on 13/10/2023.
// Copyright © 2023 SimpleX Chat. All rights reserved.
//
import SwiftUI
import SimpleXChat
import CodeScanner
struct ConnectDesktopView: View {
@EnvironmentObject var m: ChatModel
@Environment(\.dismiss) var dismiss: DismissAction
var viaSettings = false
@AppStorage(DEFAULT_DEVICE_NAME_FOR_REMOTE_ACCESS) private var deviceName = UIDevice.current.name
@AppStorage(DEFAULT_CONFIRM_REMOTE_SESSIONS) private var confirmRemoteSessions = false
@AppStorage(DEFAULT_CONNECT_REMOTE_VIA_MULTICAST) private var connectRemoteViaMulticast = true
@AppStorage(DEFAULT_CONNECT_REMOTE_VIA_MULTICAST_AUTO) private var connectRemoteViaMulticastAuto = true
@AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false
@State private var sessionAddress: String = ""
@State private var remoteCtrls: [RemoteCtrlInfo] = []
@State private var alert: ConnectDesktopAlert?
@State private var showConnectScreen = true
@State private var showQRCodeScanner = true
@State private var firstAppearance = true
private var useMulticast: Bool {
connectRemoteViaMulticast && !remoteCtrls.isEmpty
}
private enum ConnectDesktopAlert: Identifiable {
case unlinkDesktop(rc: RemoteCtrlInfo)
case disconnectDesktop(action: UserDisconnectAction)
case badInvitationError
case badVersionError(version: String?)
case desktopDisconnectedError
case error(title: LocalizedStringKey, error: LocalizedStringKey = "")
var id: String {
switch self {
case let .unlinkDesktop(rc): "unlinkDesktop \(rc.remoteCtrlId)"
case let .disconnectDesktop(action): "disconnectDecktop \(action)"
case .badInvitationError: "badInvitationError"
case let .badVersionError(v): "badVersionError \(v ?? "")"
case .desktopDisconnectedError: "desktopDisconnectedError"
case let .error(title, _): "error \(title)"
}
}
}
private enum UserDisconnectAction: String {
case back
case dismiss // TODO dismiss settings after confirmation
}
var body: some View {
if viaSettings {
viewBody
.modifier(BackButton(label: "Back") {
if m.activeRemoteCtrl {
alert = .disconnectDesktop(action: .back)
} else {
dismiss()
}
})
} else {
NavigationView {
viewBody
}
}
}
var viewBody: some View {
Group {
let discovery = m.remoteCtrlSession?.discovery
if discovery == true || (discovery == nil && !showConnectScreen) {
searchingDesktopView()
} else if let session = m.remoteCtrlSession {
switch session.sessionState {
case .starting: connectingDesktopView(session, nil)
case .searching: searchingDesktopView()
case let .found(rc, compatible): foundDesktopView(session, rc, compatible)
case let .connecting(rc_): connectingDesktopView(session, rc_)
case let .pendingConfirmation(rc_, sessCode):
if confirmRemoteSessions || rc_ == nil {
verifySessionView(session, rc_, sessCode)
} else {
connectingDesktopView(session, rc_).onAppear {
verifyDesktopSessionCode(sessCode)
}
}
case let .connected(rc, _): activeSessionView(session, rc)
}
// The hack below prevents camera freezing when exiting linked devices view.
// Using showQRCodeScanner inside connectDesktopView or passing it as parameter still results in freezing.
} else if showQRCodeScanner || firstAppearance {
connectDesktopView()
} else {
connectDesktopView(showScanner: false)
}
}
.onAppear {
setDeviceName(deviceName)
updateRemoteCtrls()
showConnectScreen = !useMulticast
if m.remoteCtrlSession != nil {
disconnectDesktop()
} else if useMulticast {
findKnownDesktop()
}
// The hack below prevents camera freezing when exiting linked devices view.
// `firstAppearance` prevents camera flicker when the view first opens.
// moving `showQRCodeScanner = false` to `onDisappear` (to avoid `firstAppearance`) does not prevent freeze.
showQRCodeScanner = false
DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
firstAppearance = false
showQRCodeScanner = true
}
}
.onDisappear {
if m.remoteCtrlSession != nil {
showConnectScreen = false
disconnectDesktop()
}
}
.onChange(of: deviceName) {
setDeviceName($0)
}
.onChange(of: m.activeRemoteCtrl) {
UIApplication.shared.isIdleTimerDisabled = $0
}
.alert(item: $alert) { a in
switch a {
case let .unlinkDesktop(rc):
Alert(
title: Text("Unlink desktop?"),
primaryButton: .destructive(Text("Unlink")) {
unlinkDesktop(rc)
},
secondaryButton: .cancel()
)
case let .disconnectDesktop(action):
Alert(
title: Text("Disconnect desktop?"),
primaryButton: .destructive(Text("Disconnect")) {
disconnectDesktop(action)
},
secondaryButton: .cancel()
)
case .badInvitationError:
Alert(title: Text("Bad desktop address"))
case let .badVersionError(v):
Alert(
title: Text("Incompatible version"),
message: Text("Desktop app version \(v ?? "") is not compatible with this app.")
)
case .desktopDisconnectedError:
Alert(title: Text("Connection terminated"))
case let .error(title, error):
Alert(title: Text(title), message: Text(error))
}
}
.interactiveDismissDisabled(m.activeRemoteCtrl)
}
private func connectDesktopView(showScanner: Bool = true) -> some View {
List {
Section("This device name") {
devicesView()
}
if showScanner {
scanDesctopAddressView()
}
if developerTools {
desktopAddressView()
}
}
.navigationTitle("Connect to desktop")
}
private func connectingDesktopView(_ session: RemoteCtrlSession, _ rc: RemoteCtrlInfo?) -> some View {
List {
Section("Connecting to desktop") {
ctrlDeviceNameText(session, rc)
ctrlDeviceVersionText(session)
}
if let sessCode = session.sessionCode {
Section("Session code") {
sessionCodeText(sessCode)
}
}
Section {
disconnectButton()
}
}
.navigationTitle("Connecting to desktop")
}
private func searchingDesktopView() -> some View {
List {
Section("This device name") {
devicesView()
}
Section("Found desktop") {
Text("Waiting for desktop...").italic()
Button {
disconnectDesktop()
} label: {
Label("Scan QR code", systemImage: "qrcode")
}
}
}
.navigationTitle("Connecting to desktop")
}
@ViewBuilder private func foundDesktopView(_ session: RemoteCtrlSession, _ rc: RemoteCtrlInfo, _ compatible: Bool) -> some View {
let v = List {
Section("This device name") {
devicesView()
}
Section("Found desktop") {
ctrlDeviceNameText(session, rc)
ctrlDeviceVersionText(session)
if !compatible {
Text("Not compatible!").foregroundColor(.red)
} else if !connectRemoteViaMulticastAuto {
Button {
confirmKnownDesktop(rc)
} label: {
Label("Connect", systemImage: "checkmark")
}
}
}
if !compatible && !connectRemoteViaMulticastAuto {
Section {
disconnectButton("Cancel")
}
}
}
.navigationTitle("Found desktop")
if compatible && connectRemoteViaMulticastAuto {
v.onAppear { confirmKnownDesktop(rc) }
} else {
v
}
}
private func verifySessionView(_ session: RemoteCtrlSession, _ rc: RemoteCtrlInfo?, _ sessCode: String) -> some View {
List {
Section("Connected to desktop") {
ctrlDeviceNameText(session, rc)
ctrlDeviceVersionText(session)
}
Section("Verify code with desktop") {
sessionCodeText(sessCode)
Button {
verifyDesktopSessionCode(sessCode)
} label: {
Label("Confirm", systemImage: "checkmark")
}
}
Section {
disconnectButton()
}
}
.navigationTitle("Verify connection")
}
private func ctrlDeviceNameText(_ session: RemoteCtrlSession, _ rc: RemoteCtrlInfo?) -> Text {
var t = Text(rc?.deviceViewName ?? session.ctrlAppInfo?.deviceName ?? "")
if (rc == nil) {
t = t + Text(" ") + Text("(new)").italic()
}
return t
}
private func ctrlDeviceVersionText(_ session: RemoteCtrlSession) -> Text {
let v = session.ctrlAppInfo?.appVersionRange.maxVersion
var t = Text("v\(v ?? "")")
if v != session.appVersion {
t = t + Text(" ") + Text("(this device v\(session.appVersion))").italic()
}
return t
}
private func activeSessionView(_ session: RemoteCtrlSession, _ rc: RemoteCtrlInfo) -> some View {
List {
Section("Connected desktop") {
Text(rc.deviceViewName)
ctrlDeviceVersionText(session)
}
if let sessCode = session.sessionCode {
Section("Session code") {
sessionCodeText(sessCode)
}
}
Section {
disconnectButton()
} footer: {
// This is specific to iOS
Text("Keep the app open to use it from desktop")
}
}
.navigationTitle("Connected to desktop")
}
private func sessionCodeText(_ code: String) -> some View {
Text(code.prefix(23))
}
private func devicesView() -> some View {
Group {
TextField("Enter this device name…", text: $deviceName)
if !remoteCtrls.isEmpty {
NavigationLink {
linkedDesktopsView()
} label: {
Text("Linked desktops")
}
}
}
}
private func scanDesctopAddressView() -> some View {
Section("Scan QR code from desktop") {
CodeScannerView(codeTypes: [.qr], completion: processDesktopQRCode)
.aspectRatio(1, contentMode: .fit)
.cornerRadius(12)
.listRowBackground(Color.clear)
.listRowSeparator(.hidden)
.listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
.padding(.horizontal)
}
}
private func desktopAddressView() -> some View {
Section("Desktop address") {
if sessionAddress.isEmpty {
Button {
sessionAddress = UIPasteboard.general.string ?? ""
} label: {
Label("Paste desktop address", systemImage: "doc.plaintext")
}
.disabled(!UIPasteboard.general.hasStrings)
} else {
HStack {
Text(sessionAddress).lineLimit(1)
Spacer()
Image(systemName: "multiply.circle.fill")
.foregroundColor(.secondary)
.onTapGesture { sessionAddress = "" }
}
}
Button {
connectDesktopAddress(sessionAddress)
} label: {
Label("Connect to desktop", systemImage: "rectangle.connected.to.line.below")
}
.disabled(sessionAddress.isEmpty)
}
}
private func linkedDesktopsView() -> some View {
List {
Section("Desktop devices") {
ForEach(remoteCtrls, id: \.remoteCtrlId) { rc in
remoteCtrlView(rc)
}
.onDelete { indexSet in
if let i = indexSet.first, i < remoteCtrls.count {
alert = .unlinkDesktop(rc: remoteCtrls[i])
}
}
}
Section("Linked desktop options") {
Toggle("Verify connections", isOn: $confirmRemoteSessions)
Toggle("Discover via local network", isOn: $connectRemoteViaMulticast)
if connectRemoteViaMulticast {
Toggle("Connect automatically", isOn: $connectRemoteViaMulticastAuto)
}
}
}
.navigationTitle("Linked desktops")
}
private func remoteCtrlView(_ rc: RemoteCtrlInfo) -> some View {
Text(rc.deviceViewName)
}
private func setDeviceName(_ name: String) {
do {
try setLocalDeviceName(deviceName)
} catch let e {
errorAlert(e)
}
}
private func updateRemoteCtrls() {
do {
remoteCtrls = try listRemoteCtrls()
} catch let e {
errorAlert(e)
}
}
private func processDesktopQRCode(_ resp: Result<ScanResult, ScanError>) {
switch resp {
case let .success(r): connectDesktopAddress(r.string)
case let .failure(e): errorAlert(e)
}
}
private func findKnownDesktop() {
Task {
do {
try await findKnownRemoteCtrl()
await MainActor.run {
m.remoteCtrlSession = RemoteCtrlSession(
ctrlAppInfo: nil,
appVersion: "",
sessionState: .searching
)
showConnectScreen = true
}
} catch let e {
await MainActor.run {
errorAlert(e)
}
}
}
}
private func confirmKnownDesktop(_ rc: RemoteCtrlInfo) {
connectDesktop_ {
try await confirmRemoteCtrl(rc.remoteCtrlId)
}
}
private func connectDesktopAddress(_ addr: String) {
connectDesktop_ {
try await connectRemoteCtrl(desktopAddress: addr)
}
}
private func connectDesktop_(_ connect: @escaping () async throws -> (RemoteCtrlInfo?, CtrlAppInfo, String)) {
Task {
do {
let (rc_, ctrlAppInfo, v) = try await connect()
await MainActor.run {
sessionAddress = ""
m.remoteCtrlSession = RemoteCtrlSession(
ctrlAppInfo: ctrlAppInfo,
appVersion: v,
sessionState: .connecting(remoteCtrl_: rc_)
)
}
} catch let e {
await MainActor.run {
switch e as? ChatResponse {
case .chatCmdError(_, .errorRemoteCtrl(.badInvitation)): alert = .badInvitationError
case .chatCmdError(_, .error(.commandError)): alert = .badInvitationError
case let .chatCmdError(_, .errorRemoteCtrl(.badVersion(v))): alert = .badVersionError(version: v)
case .chatCmdError(_, .errorAgent(.RCP(.version))): alert = .badVersionError(version: nil)
case .chatCmdError(_, .errorAgent(.RCP(.ctrlAuth))): alert = .desktopDisconnectedError
default: errorAlert(e)
}
}
}
}
}
private func verifyDesktopSessionCode(_ sessCode: String) {
Task {
do {
let rc = try await verifyRemoteCtrlSession(sessCode)
await MainActor.run {
m.remoteCtrlSession = m.remoteCtrlSession?.updateState(.connected(remoteCtrl: rc, sessionCode: sessCode))
}
await MainActor.run {
updateRemoteCtrls()
}
} catch let error {
await MainActor.run {
errorAlert(error)
}
}
}
}
private func disconnectButton(_ label: LocalizedStringKey = "Disconnect") -> some View {
Button {
disconnectDesktop(.dismiss)
} label: {
Label(label, systemImage: "multiply")
}
}
private func disconnectDesktop(_ action: UserDisconnectAction? = nil) {
Task {
do {
try await stopRemoteCtrl()
await MainActor.run {
if case .connected = m.remoteCtrlSession?.sessionState {
switchToLocalSession()
} else {
m.remoteCtrlSession = nil
}
switch action {
case .back: dismiss()
case .dismiss: dismiss()
case .none: ()
}
}
} catch let e {
await MainActor.run {
errorAlert(e)
}
}
}
}
private func unlinkDesktop(_ rc: RemoteCtrlInfo) {
Task {
do {
try await deleteRemoteCtrl(rc.remoteCtrlId)
await MainActor.run {
remoteCtrls.removeAll(where: { $0.remoteCtrlId == rc.remoteCtrlId })
}
} catch let e {
await MainActor.run {
errorAlert(e)
}
}
}
}
private func errorAlert(_ error: Error) {
let a = getErrorAlert(error, "Error")
alert = .error(title: a.title, error: a.message)
}
}
#Preview {
ConnectDesktopView()
}
@@ -53,6 +53,10 @@ let DEFAULT_WHATS_NEW_VERSION = "defaultWhatsNewVersion"
let DEFAULT_ONBOARDING_STAGE = "onboardingStage" let DEFAULT_ONBOARDING_STAGE = "onboardingStage"
let DEFAULT_CUSTOM_DISAPPEARING_MESSAGE_TIME = "customDisappearingMessageTime" let DEFAULT_CUSTOM_DISAPPEARING_MESSAGE_TIME = "customDisappearingMessageTime"
let DEFAULT_SHOW_UNREAD_AND_FAVORITES = "showUnreadAndFavorites" let DEFAULT_SHOW_UNREAD_AND_FAVORITES = "showUnreadAndFavorites"
let DEFAULT_DEVICE_NAME_FOR_REMOTE_ACCESS = "deviceNameForRemoteAccess"
let DEFAULT_CONFIRM_REMOTE_SESSIONS = "confirmRemoteSessions"
let DEFAULT_CONNECT_REMOTE_VIA_MULTICAST = "connectRemoteViaMulticast"
let DEFAULT_CONNECT_REMOTE_VIA_MULTICAST_AUTO = "connectRemoteViaMulticastAuto"
let appDefaults: [String: Any] = [ let appDefaults: [String: Any] = [
DEFAULT_SHOW_LA_NOTICE: false, DEFAULT_SHOW_LA_NOTICE: false,
@@ -85,7 +89,10 @@ let appDefaults: [String: Any] = [
DEFAULT_SHOW_MUTE_PROFILE_ALERT: true, DEFAULT_SHOW_MUTE_PROFILE_ALERT: true,
DEFAULT_ONBOARDING_STAGE: OnboardingStage.onboardingComplete.rawValue, DEFAULT_ONBOARDING_STAGE: OnboardingStage.onboardingComplete.rawValue,
DEFAULT_CUSTOM_DISAPPEARING_MESSAGE_TIME: 300, DEFAULT_CUSTOM_DISAPPEARING_MESSAGE_TIME: 300,
DEFAULT_SHOW_UNREAD_AND_FAVORITES: false DEFAULT_SHOW_UNREAD_AND_FAVORITES: false,
DEFAULT_CONFIRM_REMOTE_SESSIONS: false,
DEFAULT_CONNECT_REMOTE_VIA_MULTICAST: true,
DEFAULT_CONNECT_REMOTE_VIA_MULTICAST_AUTO: true,
] ]
enum SimpleXLinkMode: String, Identifiable { enum SimpleXLinkMode: String, Identifiable {
@@ -178,6 +185,12 @@ struct SettingsView: View {
} label: { } label: {
settingsRow("switch.2") { Text("Chat preferences") } settingsRow("switch.2") { Text("Chat preferences") }
} }
NavigationLink {
ConnectDesktopView(viaSettings: true)
} label: {
settingsRow("desktopcomputer") { Text("Use from desktop") }
}
} }
.disabled(chatModel.chatRunning != true) .disabled(chatModel.chatRunning != true)
@@ -362,7 +375,9 @@ struct SettingsView: View {
func settingsRow<Content : View>(_ icon: String, color: Color = .secondary, content: @escaping () -> Content) -> some View { func settingsRow<Content : View>(_ icon: String, color: Color = .secondary, content: @escaping () -> Content) -> some View {
ZStack(alignment: .leading) { ZStack(alignment: .leading) {
Image(systemName: icon).frame(maxWidth: 24, maxHeight: 24, alignment: .center).foregroundColor(color) Image(systemName: icon).frame(maxWidth: 24, maxHeight: 24, alignment: .center)
.symbolRenderingMode(.monochrome)
.foregroundColor(color)
content().padding(.leading, indent) content().padding(.leading, indent)
} }
} }
+4
View File
@@ -18,5 +18,9 @@
<array> <array>
<string>$(AppIdentifierPrefix)chat.simplex.app</string> <string>$(AppIdentifierPrefix)chat.simplex.app</string>
</array> </array>
<key>com.apple.developer.networking.multicast</key>
<true/>
<key>com.apple.developer.device-information.user-assigned-device-name</key>
<true/>
</dict> </dict>
</plist> </plist>
@@ -87,6 +87,10 @@
<target>%@ / %@</target> <target>%@ / %@</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="%@ and %@" xml:space="preserve">
<source>%@ and %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ and %@ connected" xml:space="preserve"> <trans-unit id="%@ and %@ connected" xml:space="preserve">
<source>%@ and %@ connected</source> <source>%@ and %@ connected</source>
<target>%@ и %@ са свързани</target> <target>%@ и %@ са свързани</target>
@@ -97,6 +101,10 @@
<target>%1$@ в %2$@:</target> <target>%1$@ в %2$@:</target>
<note>copied message info, &lt;sender&gt; at &lt;time&gt;</note> <note>copied message info, &lt;sender&gt; at &lt;time&gt;</note>
</trans-unit> </trans-unit>
<trans-unit id="%@ connected" xml:space="preserve">
<source>%@ connected</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve"> <trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source> <source>%@ is connected!</source>
<target>%@ е свързан!</target> <target>%@ е свързан!</target>
@@ -122,6 +130,10 @@
<target>%@ иска да се свърже!</target> <target>%@ иска да се свърже!</target>
<note>notification title</note> <note>notification title</note>
</trans-unit> </trans-unit>
<trans-unit id="%@, %@ and %lld members" xml:space="preserve">
<source>%@, %@ and %lld members</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@, %@ and %lld other members connected" xml:space="preserve"> <trans-unit id="%@, %@ and %lld other members connected" xml:space="preserve">
<source>%@, %@ and %lld other members connected</source> <source>%@, %@ and %lld other members connected</source>
<target>%@, %@ и %lld други членове са свързани</target> <target>%@, %@ и %lld други членове са свързани</target>
@@ -187,11 +199,27 @@
<target>%lld файл(а) с общ размер от %@</target> <target>%lld файл(а) с общ размер от %@</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="%lld group events" xml:space="preserve">
<source>%lld group events</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld members" xml:space="preserve"> <trans-unit id="%lld members" xml:space="preserve">
<source>%lld members</source> <source>%lld members</source>
<target>%lld членове</target> <target>%lld членове</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="%lld messages blocked" xml:space="preserve">
<source>%lld messages blocked</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld messages marked deleted" xml:space="preserve">
<source>%lld messages marked deleted</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld messages moderated by %@" xml:space="preserve">
<source>%lld messages moderated by %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve"> <trans-unit id="%lld minutes" xml:space="preserve">
<source>%lld minutes</source> <source>%lld minutes</source>
<target>%lld минути</target> <target>%lld минути</target>
@@ -262,6 +290,14 @@
<target>(</target> <target>(</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="(new)" xml:space="preserve">
<source>(new)</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="(this device v%@)" xml:space="preserve">
<source>(this device v%@)</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=")" xml:space="preserve"> <trans-unit id=")" xml:space="preserve">
<source>)</source> <source>)</source>
<target>)</target> <target>)</target>
@@ -350,6 +386,12 @@
- и още!</target> - и още!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="- optionally notify deleted contacts.&#10;- profile names with spaces.&#10;- and more!" xml:space="preserve">
<source>- optionally notify deleted contacts.
- profile names with spaces.
- and more!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="- voice messages up to 5 minutes.&#10;- custom time to disappear.&#10;- editing history." xml:space="preserve"> <trans-unit id="- voice messages up to 5 minutes.&#10;- custom time to disappear.&#10;- editing history." xml:space="preserve">
<source>- voice messages up to 5 minutes. <source>- voice messages up to 5 minutes.
- custom time to disappear. - custom time to disappear.
@@ -364,6 +406,10 @@
<target>.</target> <target>.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="0 sec" xml:space="preserve">
<source>0 sec</source>
<note>time to disappear</note>
</trans-unit>
<trans-unit id="0s" xml:space="preserve"> <trans-unit id="0s" xml:space="preserve">
<source>0s</source> <source>0s</source>
<target>0s</target> <target>0s</target>
@@ -589,6 +635,10 @@
<target>Всички съобщения ще бъдат изтрити - това не може да бъде отменено! Съобщенията ще бъдат изтрити САМО за вас.</target> <target>Всички съобщения ще бъдат изтрити - това не може да бъде отменено! Съобщенията ще бъдат изтрити САМО за вас.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="All new messages from %@ will be hidden!" xml:space="preserve">
<source>All new messages from %@ will be hidden!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts will remain connected." xml:space="preserve"> <trans-unit id="All your contacts will remain connected." xml:space="preserve">
<source>All your contacts will remain connected.</source> <source>All your contacts will remain connected.</source>
<target>Всички ваши контакти ще останат свързани.</target> <target>Всички ваши контакти ще останат свързани.</target>
@@ -694,6 +744,14 @@
<target>Вече сте свързани?</target> <target>Вече сте свързани?</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Already connecting!" xml:space="preserve">
<source>Already connecting!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Already joining the group!" xml:space="preserve">
<source>Already joining the group!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Always use relay" xml:space="preserve"> <trans-unit id="Always use relay" xml:space="preserve">
<source>Always use relay</source> <source>Always use relay</source>
<target>Винаги използвай реле</target> <target>Винаги използвай реле</target>
@@ -814,6 +872,10 @@
<target>Назад</target> <target>Назад</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Bad desktop address" xml:space="preserve">
<source>Bad desktop address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Bad message ID" xml:space="preserve"> <trans-unit id="Bad message ID" xml:space="preserve">
<source>Bad message ID</source> <source>Bad message ID</source>
<target>Лошо ID на съобщението</target> <target>Лошо ID на съобщението</target>
@@ -824,11 +886,31 @@
<target>Лош хеш на съобщението</target> <target>Лош хеш на съобщението</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Better groups" xml:space="preserve">
<source>Better groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Better messages" xml:space="preserve"> <trans-unit id="Better messages" xml:space="preserve">
<source>Better messages</source> <source>Better messages</source>
<target>По-добри съобщения</target> <target>По-добри съобщения</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Block" xml:space="preserve">
<source>Block</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block group members" xml:space="preserve">
<source>Block group members</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block member" xml:space="preserve">
<source>Block member</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block member?" xml:space="preserve">
<source>Block member?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve">
<source>Both you and your contact can add message reactions.</source> <source>Both you and your contact can add message reactions.</source>
<target>И вие, и вашият контакт можете да добавяте реакции към съобщението.</target> <target>И вие, и вашият контакт можете да добавяте реакции към съобщението.</target>
@@ -1090,9 +1172,8 @@
<target>Свързване</target> <target>Свързване</target>
<note>server test step</note> <note>server test step</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect directly" xml:space="preserve"> <trans-unit id="Connect automatically" xml:space="preserve">
<source>Connect directly</source> <source>Connect automatically</source>
<target>Свързване директно</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect incognito" xml:space="preserve"> <trans-unit id="Connect incognito" xml:space="preserve">
@@ -1100,14 +1181,26 @@
<target>Свързване инкогнито</target> <target>Свързване инкогнито</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect via contact link" xml:space="preserve"> <trans-unit id="Connect to desktop" xml:space="preserve">
<source>Connect via contact link</source> <source>Connect to desktop</source>
<target>Свързване чрез линк на контакта</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect via group link?" xml:space="preserve"> <trans-unit id="Connect to yourself?" xml:space="preserve">
<source>Connect via group link?</source> <source>Connect to yourself?</source>
<target>Свързване чрез групов линк?</target> <note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect to yourself?&#10;This is your own SimpleX address!" xml:space="preserve">
<source>Connect to yourself?
This is your own SimpleX address!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect to yourself?&#10;This is your own one-time link!" xml:space="preserve">
<source>Connect to yourself?
This is your own one-time link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect via contact address" xml:space="preserve">
<source>Connect via contact address</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect via link" xml:space="preserve"> <trans-unit id="Connect via link" xml:space="preserve">
@@ -1125,6 +1218,18 @@
<target>Свързване чрез еднократен линк за връзка</target> <target>Свързване чрез еднократен линк за връзка</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect with %@" xml:space="preserve">
<source>Connect with %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connected desktop" xml:space="preserve">
<source>Connected desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connected to desktop" xml:space="preserve">
<source>Connected to desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connecting server…" xml:space="preserve"> <trans-unit id="Connecting server…" xml:space="preserve">
<source>Connecting to server…</source> <source>Connecting to server…</source>
<target>Свързване със сървъра…</target> <target>Свързване със сървъра…</target>
@@ -1135,6 +1240,10 @@
<target>Свързване със сървър…(грешка: %@)</target> <target>Свързване със сървър…(грешка: %@)</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connecting to desktop" xml:space="preserve">
<source>Connecting to desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connection" xml:space="preserve"> <trans-unit id="Connection" xml:space="preserve">
<source>Connection</source> <source>Connection</source>
<target>Връзка</target> <target>Връзка</target>
@@ -1155,6 +1264,10 @@
<target>Заявката за връзка е изпратена!</target> <target>Заявката за връзка е изпратена!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connection terminated" xml:space="preserve">
<source>Connection terminated</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connection timeout" xml:space="preserve"> <trans-unit id="Connection timeout" xml:space="preserve">
<source>Connection timeout</source> <source>Connection timeout</source>
<target>Времето на изчакване за установяване на връзката изтече</target> <target>Времето на изчакване за установяване на връзката изтече</target>
@@ -1170,11 +1283,6 @@
<target>Контактът вече съществува</target> <target>Контактът вече съществува</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Contact and all messages will be deleted - this cannot be undone!" xml:space="preserve">
<source>Contact and all messages will be deleted - this cannot be undone!</source>
<target>Контактът и всички съобщения ще бъдат изтрити - това не може да бъде отменено!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Contact hidden:" xml:space="preserve"> <trans-unit id="Contact hidden:" xml:space="preserve">
<source>Contact hidden:</source> <source>Contact hidden:</source>
<target>Контактът е скрит:</target> <target>Контактът е скрит:</target>
@@ -1225,6 +1333,10 @@
<target>Версия на ядрото: v%@</target> <target>Версия на ядрото: v%@</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Correct name to %@?" xml:space="preserve">
<source>Correct name to %@?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create" xml:space="preserve"> <trans-unit id="Create" xml:space="preserve">
<source>Create</source> <source>Create</source>
<target>Създай</target> <target>Създай</target>
@@ -1235,6 +1347,10 @@
<target>Създай SimpleX адрес</target> <target>Създай SimpleX адрес</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Create a group using a random profile." xml:space="preserve">
<source>Create a group using a random profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create an address to let people connect with you." xml:space="preserve"> <trans-unit id="Create an address to let people connect with you." xml:space="preserve">
<source>Create an address to let people connect with you.</source> <source>Create an address to let people connect with you.</source>
<target>Създайте адрес, за да позволите на хората да се свързват с вас.</target> <target>Създайте адрес, за да позволите на хората да се свързват с вас.</target>
@@ -1245,6 +1361,10 @@
<target>Създай файл</target> <target>Създай файл</target>
<note>server test step</note> <note>server test step</note>
</trans-unit> </trans-unit>
<trans-unit id="Create group" xml:space="preserve">
<source>Create group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve"> <trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source> <source>Create group link</source>
<target>Създай групов линк</target> <target>Създай групов линк</target>
@@ -1265,6 +1385,10 @@
<target>Създай линк за еднократна покана</target> <target>Създай линк за еднократна покана</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Create profile" xml:space="preserve">
<source>Create profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create queue" xml:space="preserve"> <trans-unit id="Create queue" xml:space="preserve">
<source>Create queue</source> <source>Create queue</source>
<target>Създай опашка</target> <target>Създай опашка</target>
@@ -1423,6 +1547,10 @@
<target>Изтрий</target> <target>Изтрий</target>
<note>chat item action</note> <note>chat item action</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete %lld messages?" xml:space="preserve">
<source>Delete %lld messages?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete Contact" xml:space="preserve"> <trans-unit id="Delete Contact" xml:space="preserve">
<source>Delete Contact</source> <source>Delete Contact</source>
<target>Изтрий контакт</target> <target>Изтрий контакт</target>
@@ -1448,6 +1576,10 @@
<target>Изтрий всички файлове</target> <target>Изтрий всички файлове</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete and notify contact" xml:space="preserve">
<source>Delete and notify contact</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete archive" xml:space="preserve"> <trans-unit id="Delete archive" xml:space="preserve">
<source>Delete archive</source> <source>Delete archive</source>
<target>Изтрий архив</target> <target>Изтрий архив</target>
@@ -1478,9 +1610,9 @@
<target>Изтрий контакт</target> <target>Изтрий контакт</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete contact?" xml:space="preserve"> <trans-unit id="Delete contact?&#10;This cannot be undone!" xml:space="preserve">
<source>Delete contact?</source> <source>Delete contact?
<target>Изтрий контакт?</target> This cannot be undone!</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete database" xml:space="preserve"> <trans-unit id="Delete database" xml:space="preserve">
@@ -1623,6 +1755,18 @@
<target>Описание</target> <target>Описание</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Desktop address" xml:space="preserve">
<source>Desktop address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Desktop app version %@ is not compatible with this app." xml:space="preserve">
<source>Desktop app version %@ is not compatible with this app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Desktop devices" xml:space="preserve">
<source>Desktop devices</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Develop" xml:space="preserve"> <trans-unit id="Develop" xml:space="preserve">
<source>Develop</source> <source>Develop</source>
<target>Разработване</target> <target>Разработване</target>
@@ -1713,19 +1857,17 @@
<target>Прекъсни връзката</target> <target>Прекъсни връзката</target>
<note>server test step</note> <note>server test step</note>
</trans-unit> </trans-unit>
<trans-unit id="Disconnect desktop?" xml:space="preserve">
<source>Disconnect desktop?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Discover and join groups" xml:space="preserve"> <trans-unit id="Discover and join groups" xml:space="preserve">
<source>Discover and join groups</source> <source>Discover and join groups</source>
<target>Открийте и се присъединете към групи</target> <target>Открийте и се присъединете към групи</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Display name" xml:space="preserve"> <trans-unit id="Discover via local network" xml:space="preserve">
<source>Display name</source> <source>Discover via local network</source>
<target>Показвано Име</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Display name:" xml:space="preserve">
<source>Display name:</source>
<target>Показвано име:</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve"> <trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve">
@@ -1898,6 +2040,14 @@
<target>Криптирано съобщение: неочаквана грешка</target> <target>Криптирано съобщение: неочаквана грешка</target>
<note>notification</note> <note>notification</note>
</trans-unit> </trans-unit>
<trans-unit id="Encryption re-negotiation error" xml:space="preserve">
<source>Encryption re-negotiation error</source>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Encryption re-negotiation failed." xml:space="preserve">
<source>Encryption re-negotiation failed.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter Passcode" xml:space="preserve"> <trans-unit id="Enter Passcode" xml:space="preserve">
<source>Enter Passcode</source> <source>Enter Passcode</source>
<target>Въведете kодa за достъп</target> <target>Въведете kодa за достъп</target>
@@ -1908,6 +2058,10 @@
<target>Въведи правилна парола.</target> <target>Въведи правилна парола.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Enter group name…" xml:space="preserve">
<source>Enter group name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve"> <trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source> <source>Enter passphrase…</source>
<target>Въведи парола…</target> <target>Въведи парола…</target>
@@ -1923,6 +2077,10 @@
<target>Въведи сървъра ръчно</target> <target>Въведи сървъра ръчно</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Enter this device name…" xml:space="preserve">
<source>Enter this device name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter welcome message…" xml:space="preserve"> <trans-unit id="Enter welcome message…" xml:space="preserve">
<source>Enter welcome message…</source> <source>Enter welcome message…</source>
<target>Въведи съобщение при посрещане…</target> <target>Въведи съобщение при посрещане…</target>
@@ -1933,6 +2091,10 @@
<target>Въведи съобщение при посрещане…(незадължително)</target> <target>Въведи съобщение при посрещане…(незадължително)</target>
<note>placeholder</note> <note>placeholder</note>
</trans-unit> </trans-unit>
<trans-unit id="Enter your name…" xml:space="preserve">
<source>Enter your name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error" xml:space="preserve"> <trans-unit id="Error" xml:space="preserve">
<source>Error</source> <source>Error</source>
<target>Грешка при свързване със сървъра</target> <target>Грешка при свързване със сървъра</target>
@@ -1990,6 +2152,7 @@
</trans-unit> </trans-unit>
<trans-unit id="Error creating member contact" xml:space="preserve"> <trans-unit id="Error creating member contact" xml:space="preserve">
<source>Error creating member contact</source> <source>Error creating member contact</source>
<target>Грешка при създаване на контакт с член</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Error creating profile!" xml:space="preserve"> <trans-unit id="Error creating profile!" xml:space="preserve">
@@ -2124,6 +2287,7 @@
</trans-unit> </trans-unit>
<trans-unit id="Error sending member contact invitation" xml:space="preserve"> <trans-unit id="Error sending member contact invitation" xml:space="preserve">
<source>Error sending member contact invitation</source> <source>Error sending member contact invitation</source>
<target>Грешка при изпращане на съобщение за покана за контакт</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Error sending message" xml:space="preserve"> <trans-unit id="Error sending message" xml:space="preserve">
@@ -2206,6 +2370,10 @@
<target>Изход без запазване</target> <target>Изход без запазване</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Expand" xml:space="preserve">
<source>Expand</source>
<note>chat item action</note>
</trans-unit>
<trans-unit id="Export database" xml:space="preserve"> <trans-unit id="Export database" xml:space="preserve">
<source>Export database</source> <source>Export database</source>
<target>Експортирай база данни</target> <target>Експортирай база данни</target>
@@ -2236,6 +2404,10 @@
<target>Бързо и без чакане, докато подателят е онлайн!</target> <target>Бързо и без чакане, докато подателят е онлайн!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Faster joining and more reliable messages." xml:space="preserve">
<source>Faster joining and more reliable messages.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve"> <trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source> <source>Favorite</source>
<target>Любим</target> <target>Любим</target>
@@ -2331,6 +2503,10 @@
<target>За конзолата</target> <target>За конзолата</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Found desktop" xml:space="preserve">
<source>Found desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="French interface" xml:space="preserve"> <trans-unit id="French interface" xml:space="preserve">
<source>French interface</source> <source>French interface</source>
<target>Френски интерфейс</target> <target>Френски интерфейс</target>
@@ -2351,6 +2527,10 @@
<target>Пълно име:</target> <target>Пълно име:</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Fully decentralized visible only to members." xml:space="preserve">
<source>Fully decentralized visible only to members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Fully re-implemented - work in background!" xml:space="preserve"> <trans-unit id="Fully re-implemented - work in background!" xml:space="preserve">
<source>Fully re-implemented - work in background!</source> <source>Fully re-implemented - work in background!</source>
<target>Напълно преработено - работи във фонов режим!</target> <target>Напълно преработено - работи във фонов режим!</target>
@@ -2371,6 +2551,14 @@
<target>Група</target> <target>Група</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Group already exists" xml:space="preserve">
<source>Group already exists</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group already exists!" xml:space="preserve">
<source>Group already exists!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group display name" xml:space="preserve"> <trans-unit id="Group display name" xml:space="preserve">
<source>Group display name</source> <source>Group display name</source>
<target>Показвано име на групата</target> <target>Показвано име на групата</target>
@@ -2641,6 +2829,10 @@
<target>Инкогнито</target> <target>Инкогнито</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Incognito groups" xml:space="preserve">
<source>Incognito groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incognito mode" xml:space="preserve"> <trans-unit id="Incognito mode" xml:space="preserve">
<source>Incognito mode</source> <source>Incognito mode</source>
<target>Режим инкогнито</target> <target>Режим инкогнито</target>
@@ -2671,6 +2863,10 @@
<target>Несъвместима версия на базата данни</target> <target>Несъвместима версия на базата данни</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Incompatible version" xml:space="preserve">
<source>Incompatible version</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incorrect passcode" xml:space="preserve"> <trans-unit id="Incorrect passcode" xml:space="preserve">
<source>Incorrect passcode</source> <source>Incorrect passcode</source>
<target>Неправилен kод за достъп</target> <target>Неправилен kод за достъп</target>
@@ -2718,6 +2914,10 @@
<target>Невалиден линк за връзка</target> <target>Невалиден линк за връзка</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid server address!" xml:space="preserve"> <trans-unit id="Invalid server address!" xml:space="preserve">
<source>Invalid server address!</source> <source>Invalid server address!</source>
<target>Невалиден адрес на сървъра!</target> <target>Невалиден адрес на сървъра!</target>
@@ -2809,16 +3009,33 @@
<target>Влез в групата</target> <target>Влез в групата</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Join group?" xml:space="preserve">
<source>Join group?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join incognito" xml:space="preserve"> <trans-unit id="Join incognito" xml:space="preserve">
<source>Join incognito</source> <source>Join incognito</source>
<target>Влез инкогнито</target> <target>Влез инкогнито</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Join with current profile" xml:space="preserve">
<source>Join with current profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join your group?&#10;This is your link for group %@!" xml:space="preserve">
<source>Join your group?
This is your link for group %@!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Joining group" xml:space="preserve"> <trans-unit id="Joining group" xml:space="preserve">
<source>Joining group</source> <source>Joining group</source>
<target>Присъединяване към групата</target> <target>Присъединяване към групата</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Keep the app open to use it from desktop" xml:space="preserve">
<source>Keep the app open to use it from desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep your connections" xml:space="preserve"> <trans-unit id="Keep your connections" xml:space="preserve">
<source>Keep your connections</source> <source>Keep your connections</source>
<target>Запазете връзките си</target> <target>Запазете връзките си</target>
@@ -2879,6 +3096,18 @@
<target>Ограничения</target> <target>Ограничения</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Link mobile and desktop apps! 🔗" xml:space="preserve">
<source>Link mobile and desktop apps! 🔗</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Linked desktop options" xml:space="preserve">
<source>Linked desktop options</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Linked desktops" xml:space="preserve">
<source>Linked desktops</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Live message!" xml:space="preserve"> <trans-unit id="Live message!" xml:space="preserve">
<source>Live message!</source> <source>Live message!</source>
<target>Съобщение на живо!</target> <target>Съобщение на живо!</target>
@@ -3029,6 +3258,10 @@
<target>Съобщения и файлове</target> <target>Съобщения и файлове</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Messages from %@ will be shown!" xml:space="preserve">
<source>Messages from %@ will be shown!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve"> <trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source> <source>Migrating database archive…</source>
<target>Архивът на базата данни се мигрира…</target> <target>Архивът на базата данни се мигрира…</target>
@@ -3224,6 +3457,10 @@
<target>Няма получени или изпратени файлове</target> <target>Няма получени или изпратени файлове</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Not compatible!" xml:space="preserve">
<source>Not compatible!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Notifications" xml:space="preserve"> <trans-unit id="Notifications" xml:space="preserve">
<source>Notifications</source> <source>Notifications</source>
<target>Известия</target> <target>Известия</target>
@@ -3360,6 +3597,7 @@
</trans-unit> </trans-unit>
<trans-unit id="Open" xml:space="preserve"> <trans-unit id="Open" xml:space="preserve">
<source>Open</source> <source>Open</source>
<target>Отвори</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Open Settings" xml:space="preserve"> <trans-unit id="Open Settings" xml:space="preserve">
@@ -3377,6 +3615,10 @@
<target>Отвори конзолата</target> <target>Отвори конзолата</target>
<note>authentication reason</note> <note>authentication reason</note>
</trans-unit> </trans-unit>
<trans-unit id="Open group" xml:space="preserve">
<source>Open group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve"> <trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source> <source>Open user profiles</source>
<target>Отвори потребителските профили</target> <target>Отвори потребителските профили</target>
@@ -3392,11 +3634,6 @@
<target>Отваряне на база данни…</target> <target>Отваряне на база данни…</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." xml:space="preserve">
<source>Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red.</source>
<target>Отварянето на линка в браузъра може да намали поверителността и сигурността на връзката. Несигурните SimpleX линкове ще бъдат червени.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="PING count" xml:space="preserve"> <trans-unit id="PING count" xml:space="preserve">
<source>PING count</source> <source>PING count</source>
<target>PING бройка</target> <target>PING бройка</target>
@@ -3442,6 +3679,10 @@
<target>Постави</target> <target>Постави</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Paste desktop address" xml:space="preserve">
<source>Paste desktop address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Paste image" xml:space="preserve"> <trans-unit id="Paste image" xml:space="preserve">
<source>Paste image</source> <source>Paste image</source>
<target>Постави изображение</target> <target>Постави изображение</target>
@@ -3587,6 +3828,14 @@
<target>Профилно изображение</target> <target>Профилно изображение</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Profile name" xml:space="preserve">
<source>Profile name</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile name:" xml:space="preserve">
<source>Profile name:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile password" xml:space="preserve"> <trans-unit id="Profile password" xml:space="preserve">
<source>Profile password</source> <source>Profile password</source>
<target>Профилна парола</target> <target>Профилна парола</target>
@@ -3832,6 +4081,14 @@
<target>Предоговори криптирането?</target> <target>Предоговори криптирането?</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Repeat connection request?" xml:space="preserve">
<source>Repeat connection request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve"> <trans-unit id="Reply" xml:space="preserve">
<source>Reply</source> <source>Reply</source>
<target>Отговори</target> <target>Отговори</target>
@@ -4017,6 +4274,10 @@
<target>Сканирай QR код</target> <target>Сканирай QR код</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Scan QR code from desktop" xml:space="preserve">
<source>Scan QR code from desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Scan code" xml:space="preserve"> <trans-unit id="Scan code" xml:space="preserve">
<source>Scan code</source> <source>Scan code</source>
<target>Сканирай код</target> <target>Сканирай код</target>
@@ -4099,6 +4360,7 @@
</trans-unit> </trans-unit>
<trans-unit id="Send direct message to connect" xml:space="preserve"> <trans-unit id="Send direct message to connect" xml:space="preserve">
<source>Send direct message to connect</source> <source>Send direct message to connect</source>
<target>Изпрати лично съобщение за свързване</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Send disappearing message" xml:space="preserve"> <trans-unit id="Send disappearing message" xml:space="preserve">
@@ -4236,6 +4498,10 @@
<target>Сървъри</target> <target>Сървъри</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Session code" xml:space="preserve">
<source>Session code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set 1 day" xml:space="preserve"> <trans-unit id="Set 1 day" xml:space="preserve">
<source>Set 1 day</source> <source>Set 1 day</source>
<target>Задай 1 ден</target> <target>Задай 1 ден</target>
@@ -4546,6 +4812,10 @@
<target>Докосни бутона </target> <target>Докосни бутона </target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Tap to Connect" xml:space="preserve">
<source>Tap to Connect</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to activate profile." xml:space="preserve"> <trans-unit id="Tap to activate profile." xml:space="preserve">
<source>Tap to activate profile.</source> <source>Tap to activate profile.</source>
<target>Докосни за активиране на профил.</target> <target>Докосни за активиране на профил.</target>
@@ -4643,11 +4913,6 @@ It can happen because of some bug or when the connection is compromised.</source
<target>Криптирането работи и новото споразумение за криптиране не е необходимо. Това може да доведе до грешки при свързване!</target> <target>Криптирането работи и новото споразумение за криптиране не е необходимо. Това може да доведе до грешки при свързване!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="The group is fully decentralized it is visible only to the members." xml:space="preserve">
<source>The group is fully decentralized it is visible only to the members.</source>
<target>Групата е напълно децентрализирана – видима е само за членовете.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The hash of the previous message is different." xml:space="preserve"> <trans-unit id="The hash of the previous message is different." xml:space="preserve">
<source>The hash of the previous message is different.</source> <source>The hash of the previous message is different.</source>
<target>Хешът на предишното съобщение е различен.</target> <target>Хешът на предишното съобщение е различен.</target>
@@ -4733,6 +4998,10 @@ It can happen because of some bug or when the connection is compromised.</source
<target>Това действие не може да бъде отменено - вашият профил, контакти, съобщения и файлове ще бъдат безвъзвратно загубени.</target> <target>Това действие не може да бъде отменено - вашият профил, контакти, съобщения и файлове ще бъдат безвъзвратно загубени.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve"> <trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source> <source>This group has over %lld members, delivery receipts are not sent.</source>
<target>Тази група има над %lld членове, потвърждения за доставка не се изпращат.</target> <target>Тази група има над %lld членове, потвърждения за доставка не се изпращат.</target>
@@ -4743,6 +5012,14 @@ It can happen because of some bug or when the connection is compromised.</source
<target>Тази група вече не съществува.</target> <target>Тази група вече не съществува.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="This is your own SimpleX address!" xml:space="preserve">
<source>This is your own SimpleX address!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This is your own one-time link!" xml:space="preserve">
<source>This is your own one-time link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This setting applies to messages in your current chat profile **%@**." xml:space="preserve"> <trans-unit id="This setting applies to messages in your current chat profile **%@**." xml:space="preserve">
<source>This setting applies to messages in your current chat profile **%@**.</source> <source>This setting applies to messages in your current chat profile **%@**.</source>
<target>Тази настройка се прилага за съобщения в текущия ви профил **%@**.</target> <target>Тази настройка се прилага за съобщения в текущия ви профил **%@**.</target>
@@ -4758,6 +5035,10 @@ It can happen because of some bug or when the connection is compromised.</source
<target>За да се свърже, вашият контакт може да сканира QR код или да използва линка в приложението.</target> <target>За да се свърже, вашият контакт може да сканира QR код или да използва линка в приложението.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="To hide unwanted messages." xml:space="preserve">
<source>To hide unwanted messages.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To make a new connection" xml:space="preserve"> <trans-unit id="To make a new connection" xml:space="preserve">
<source>To make a new connection</source> <source>To make a new connection</source>
<target>За да направите нова връзка</target> <target>За да направите нова връзка</target>
@@ -4840,6 +5121,18 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Не може да се запише гласово съобщение</target> <target>Не може да се запише гласово съобщение</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Unblock" xml:space="preserve">
<source>Unblock</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unblock member" xml:space="preserve">
<source>Unblock member</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unblock member?" xml:space="preserve">
<source>Unblock member?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unexpected error: %@" xml:space="preserve"> <trans-unit id="Unexpected error: %@" xml:space="preserve">
<source>Unexpected error: %@</source> <source>Unexpected error: %@</source>
<target>Неочаквана грешка: %@</target> <target>Неочаквана грешка: %@</target>
@@ -4902,6 +5195,14 @@ To connect, please ask your contact to create another connection link and check
За да се свържете, моля, помолете вашия контакт да създаде друг линк за връзка и проверете дали имате стабилна мрежова връзка.</target> За да се свържете, моля, помолете вашия контакт да създаде друг линк за връзка и проверете дали имате стабилна мрежова връзка.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Unlink" xml:space="preserve">
<source>Unlink</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlink desktop?" xml:space="preserve">
<source>Unlink desktop?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlock" xml:space="preserve"> <trans-unit id="Unlock" xml:space="preserve">
<source>Unlock</source> <source>Unlock</source>
<target>Отключи</target> <target>Отключи</target>
@@ -4992,6 +5293,10 @@ To connect, please ask your contact to create another connection link and check
<target>Използвай за нови връзки</target> <target>Използвай за нови връзки</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Use from desktop" xml:space="preserve">
<source>Use from desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use iOS call interface" xml:space="preserve"> <trans-unit id="Use iOS call interface" xml:space="preserve">
<source>Use iOS call interface</source> <source>Use iOS call interface</source>
<target>Използвай интерфейса за повикване на iOS</target> <target>Използвай интерфейса за повикване на iOS</target>
@@ -5022,11 +5327,23 @@ To connect, please ask your contact to create another connection link and check
<target>Използват се сървърите на SimpleX Chat.</target> <target>Използват се сървърите на SimpleX Chat.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Verify code with desktop" xml:space="preserve">
<source>Verify code with desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify connection" xml:space="preserve">
<source>Verify connection</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify connection security" xml:space="preserve"> <trans-unit id="Verify connection security" xml:space="preserve">
<source>Verify connection security</source> <source>Verify connection security</source>
<target>Потвръди сигурността на връзката</target> <target>Потвръди сигурността на връзката</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Verify connections" xml:space="preserve">
<source>Verify connections</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve"> <trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source> <source>Verify security code</source>
<target>Потвръди кода за сигурност</target> <target>Потвръди кода за сигурност</target>
@@ -5037,6 +5354,10 @@ To connect, please ask your contact to create another connection link and check
<target>Чрез браузър</target> <target>Чрез браузър</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Via secure quantum resistant protocol." xml:space="preserve">
<source>Via secure quantum resistant protocol.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video call" xml:space="preserve"> <trans-unit id="Video call" xml:space="preserve">
<source>Video call</source> <source>Video call</source>
<target>Видео разговор</target> <target>Видео разговор</target>
@@ -5087,6 +5408,10 @@ To connect, please ask your contact to create another connection link and check
<target>Гласово съобщение…</target> <target>Гласово съобщение…</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Waiting for desktop..." xml:space="preserve">
<source>Waiting for desktop...</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Waiting for file" xml:space="preserve"> <trans-unit id="Waiting for file" xml:space="preserve">
<source>Waiting for file</source> <source>Waiting for file</source>
<target>Изчаква се получаването на файла</target> <target>Изчаква се получаването на файла</target>
@@ -5187,6 +5512,35 @@ To connect, please ask your contact to create another connection link and check
<target>Вече сте вече свързани с %@.</target> <target>Вече сте вече свързани с %@.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You are already connecting to %@." xml:space="preserve">
<source>You are already connecting to %@.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already connecting via this one-time link!" xml:space="preserve">
<source>You are already connecting via this one-time link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already in group %@." xml:space="preserve">
<source>You are already in group %@.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group %@." xml:space="preserve">
<source>You are already joining the group %@.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group via this link!" xml:space="preserve">
<source>You are already joining the group via this link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group via this link." xml:space="preserve">
<source>You are already joining the group via this link.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group!&#10;Repeat join request?" xml:space="preserve">
<source>You are already joining the group!
Repeat join request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are connected to the server used to receive messages from this contact." xml:space="preserve"> <trans-unit id="You are connected to the server used to receive messages from this contact." xml:space="preserve">
<source>You are connected to the server used to receive messages from this contact.</source> <source>You are connected to the server used to receive messages from this contact.</source>
<target>Вие сте свързани към сървъра, използван за получаване на съобщения от този контакт.</target> <target>Вие сте свързани към сървъра, използван за получаване на съобщения от този контакт.</target>
@@ -5282,6 +5636,15 @@ To connect, please ask your contact to create another connection link and check
<target>Не можахте да бъдете потвърдени; Моля, опитайте отново.</target> <target>Не можахте да бъдете потвърдени; Моля, опитайте отново.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You have already requested connection via this address!" xml:space="preserve">
<source>You have already requested connection via this address!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You have already requested connection!&#10;Repeat connection request?" xml:space="preserve">
<source>You have already requested connection!
Repeat connection request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You have no chats" xml:space="preserve"> <trans-unit id="You have no chats" xml:space="preserve">
<source>You have no chats</source> <source>You have no chats</source>
<target>Нямате чатове</target> <target>Нямате чатове</target>
@@ -5332,6 +5695,10 @@ To connect, please ask your contact to create another connection link and check
<target>Ще бъдете свързани с групата, когато устройството на домакина на групата е онлайн, моля, изчакайте или проверете по-късно!</target> <target>Ще бъдете свързани с групата, когато устройството на домакина на групата е онлайн, моля, изчакайте или проверете по-късно!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You will be connected when group link host's device is online, please wait or check later!" xml:space="preserve">
<source>You will be connected when group link host's device is online, please wait or check later!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will be connected when your connection request is accepted, please wait or check later!" xml:space="preserve"> <trans-unit id="You will be connected when your connection request is accepted, please wait or check later!" xml:space="preserve">
<source>You will be connected when your connection request is accepted, please wait or check later!</source> <source>You will be connected when your connection request is accepted, please wait or check later!</source>
<target>Ще бъдете свързани, когато заявката ви за връзка бъде приета, моля, изчакайте или проверете по-късно!</target> <target>Ще бъдете свързани, когато заявката ви за връзка бъде приета, моля, изчакайте или проверете по-късно!</target>
@@ -5347,9 +5714,8 @@ To connect, please ask your contact to create another connection link and check
<target>Ще трябва да се идентифицирате, когато стартирате или възобновите приложението след 30 секунди във фонов режим.</target> <target>Ще трябва да се идентифицирате, когато стартирате или възобновите приложението след 30 секунди във фонов режим.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You will join a group this link refers to and connect to its group members." xml:space="preserve"> <trans-unit id="You will connect to all group members." xml:space="preserve">
<source>You will join a group this link refers to and connect to its group members.</source> <source>You will connect to all group members.</source>
<target>Ще се присъедините към групата, към която този линк препраща, и ще се свържете с нейните членове.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve"> <trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve">
@@ -5417,11 +5783,6 @@ To connect, please ask your contact to create another connection link and check
<target>Вашата чат база данни не е криптирана - задайте парола, за да я криптирате.</target> <target>Вашата чат база данни не е криптирана - задайте парола, за да я криптирате.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Your chat profile will be sent to group members" xml:space="preserve">
<source>Your chat profile will be sent to group members</source>
<target>Вашият чат профил ще бъде изпратен на членовете на групата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profiles" xml:space="preserve"> <trans-unit id="Your chat profiles" xml:space="preserve">
<source>Your chat profiles</source> <source>Your chat profiles</source>
<target>Вашите чат профили</target> <target>Вашите чат профили</target>
@@ -5476,6 +5837,10 @@ You can change it in Settings.</source>
<target>Вашата поверителност</target> <target>Вашата поверителност</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Your profile" xml:space="preserve">
<source>Your profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your profile **%@** will be shared." xml:space="preserve"> <trans-unit id="Your profile **%@** will be shared." xml:space="preserve">
<source>Your profile **%@** will be shared.</source> <source>Your profile **%@** will be shared.</source>
<target>Вашият профил **%@** ще бъде споделен.</target> <target>Вашият профил **%@** ще бъде споделен.</target>
@@ -5568,11 +5933,19 @@ SimpleX сървърите не могат да видят вашия профи
<target>винаги</target> <target>винаги</target>
<note>pref value</note> <note>pref value</note>
</trans-unit> </trans-unit>
<trans-unit id="and %lld other events" xml:space="preserve">
<source>and %lld other events</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="audio call (not e2e encrypted)" xml:space="preserve"> <trans-unit id="audio call (not e2e encrypted)" xml:space="preserve">
<source>audio call (not e2e encrypted)</source> <source>audio call (not e2e encrypted)</source>
<target>аудио разговор (не е e2e криптиран)</target> <target>аудио разговор (не е e2e криптиран)</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="author" xml:space="preserve">
<source>author</source>
<note>member role</note>
</trans-unit>
<trans-unit id="bad message ID" xml:space="preserve"> <trans-unit id="bad message ID" xml:space="preserve">
<source>bad message ID</source> <source>bad message ID</source>
<target>лошо ID на съобщението</target> <target>лошо ID на съобщението</target>
@@ -5583,6 +5956,10 @@ SimpleX сървърите не могат да видят вашия профи
<target>лош хеш на съобщението</target> <target>лош хеш на съобщението</target>
<note>integrity error chat item</note> <note>integrity error chat item</note>
</trans-unit> </trans-unit>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve"> <trans-unit id="bold" xml:space="preserve">
<source>bold</source> <source>bold</source>
<target>удебелен</target> <target>удебелен</target>
@@ -5655,6 +6032,7 @@ SimpleX сървърите не могат да видят вашия профи
</trans-unit> </trans-unit>
<trans-unit id="connected directly" xml:space="preserve"> <trans-unit id="connected directly" xml:space="preserve">
<source>connected directly</source> <source>connected directly</source>
<target>свързан директно</target>
<note>rcv group event chat item</note> <note>rcv group event chat item</note>
</trans-unit> </trans-unit>
<trans-unit id="connecting" xml:space="preserve"> <trans-unit id="connecting" xml:space="preserve">
@@ -5752,6 +6130,10 @@ SimpleX сървърите не могат да видят вашия профи
<target>изтрит</target> <target>изтрит</target>
<note>deleted chat item</note> <note>deleted chat item</note>
</trans-unit> </trans-unit>
<trans-unit id="deleted contact" xml:space="preserve">
<source>deleted contact</source>
<note>rcv direct event chat item</note>
</trans-unit>
<trans-unit id="deleted group" xml:space="preserve"> <trans-unit id="deleted group" xml:space="preserve">
<source>deleted group</source> <source>deleted group</source>
<target>групата изтрита</target> <target>групата изтрита</target>
@@ -6036,7 +6418,8 @@ SimpleX сървърите не могат да видят вашия профи
<source>off</source> <source>off</source>
<target>изключено</target> <target>изключено</target>
<note>enabled status <note>enabled status
group pref value</note> group pref value
time to disappear</note>
</trans-unit> </trans-unit>
<trans-unit id="offered %@" xml:space="preserve"> <trans-unit id="offered %@" xml:space="preserve">
<source>offered %@</source> <source>offered %@</source>
@@ -6053,11 +6436,6 @@ SimpleX сървърите не могат да видят вашия профи
<target>включено</target> <target>включено</target>
<note>group pref value</note> <note>group pref value</note>
</trans-unit> </trans-unit>
<trans-unit id="or chat with the developers" xml:space="preserve">
<source>or chat with the developers</source>
<target>или пишете на разработчиците</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="owner" xml:space="preserve"> <trans-unit id="owner" xml:space="preserve">
<source>owner</source> <source>owner</source>
<target>собственик</target> <target>собственик</target>
@@ -6120,6 +6498,7 @@ SimpleX сървърите не могат да видят вашия профи
</trans-unit> </trans-unit>
<trans-unit id="send direct message" xml:space="preserve"> <trans-unit id="send direct message" xml:space="preserve">
<source>send direct message</source> <source>send direct message</source>
<target>изпрати лично съобщение</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="starting…" xml:space="preserve"> <trans-unit id="starting…" xml:space="preserve">
@@ -6147,6 +6526,10 @@ SimpleX сървърите не могат да видят вашия профи
<target>актуализиран профил на групата</target> <target>актуализиран профил на групата</target>
<note>rcv group event chat item</note> <note>rcv group event chat item</note>
</trans-unit> </trans-unit>
<trans-unit id="v%@" xml:space="preserve">
<source>v%@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="v%@ (%@)" xml:space="preserve"> <trans-unit id="v%@ (%@)" xml:space="preserve">
<source>v%@ (%@)</source> <source>v%@ (%@)</source>
<target>v%@ (%@)</target> <target>v%@ (%@)</target>
@@ -6284,6 +6667,10 @@ SimpleX сървърите не могат да видят вашия профи
<target>SimpleX използва Face ID за локалнa идентификация</target> <target>SimpleX използва Face ID за локалнa идентификация</target>
<note>Privacy - Face ID Usage Description</note> <note>Privacy - Face ID Usage Description</note>
</trans-unit> </trans-unit>
<trans-unit id="NSLocalNetworkUsageDescription" xml:space="preserve">
<source>SimpleX uses local network access to allow using user chat profile via desktop app on the same network.</source>
<note>Privacy - Local Network Usage Description</note>
</trans-unit>
<trans-unit id="NSMicrophoneUsageDescription" xml:space="preserve"> <trans-unit id="NSMicrophoneUsageDescription" xml:space="preserve">
<source>SimpleX needs microphone access for audio and video calls, and to record voice messages.</source> <source>SimpleX needs microphone access for audio and video calls, and to record voice messages.</source>
<target>SimpleX се нуждае от достъп до микрофона за аудио и видео разговори и за запис на гласови съобщения.</target> <target>SimpleX се нуждае от достъп до микрофона за аудио и видео разговори и за запис на гласови съобщения.</target>
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
File diff suppressed because it is too large Load Diff
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
File diff suppressed because it is too large Load Diff
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
File diff suppressed because it is too large Load Diff
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
File diff suppressed because it is too large Load Diff
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
@@ -87,6 +87,10 @@
<target>%@ / % @</target> <target>%@ / % @</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="%@ and %@" xml:space="preserve">
<source>%@ and %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ and %@ connected" xml:space="preserve"> <trans-unit id="%@ and %@ connected" xml:space="preserve">
<source>%@ and %@ connected</source> <source>%@ and %@ connected</source>
<target>%@ ja %@ yhdistetty</target> <target>%@ ja %@ yhdistetty</target>
@@ -97,6 +101,10 @@
<target>%1$@ klo %2$@:</target> <target>%1$@ klo %2$@:</target>
<note>copied message info, &lt;sender&gt; at &lt;time&gt;</note> <note>copied message info, &lt;sender&gt; at &lt;time&gt;</note>
</trans-unit> </trans-unit>
<trans-unit id="%@ connected" xml:space="preserve">
<source>%@ connected</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve"> <trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source> <source>%@ is connected!</source>
<target>%@ on yhdistetty!</target> <target>%@ on yhdistetty!</target>
@@ -122,6 +130,10 @@
<target>%@ haluaa muodostaa yhteyden!</target> <target>%@ haluaa muodostaa yhteyden!</target>
<note>notification title</note> <note>notification title</note>
</trans-unit> </trans-unit>
<trans-unit id="%@, %@ and %lld members" xml:space="preserve">
<source>%@, %@ and %lld members</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@, %@ and %lld other members connected" xml:space="preserve"> <trans-unit id="%@, %@ and %lld other members connected" xml:space="preserve">
<source>%@, %@ and %lld other members connected</source> <source>%@, %@ and %lld other members connected</source>
<target>%@, %@ ja %lld muut jäsenet yhdistetty</target> <target>%@, %@ ja %lld muut jäsenet yhdistetty</target>
@@ -187,11 +199,27 @@
<target>%lld tiedosto(a), joiden kokonaiskoko on %@</target> <target>%lld tiedosto(a), joiden kokonaiskoko on %@</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="%lld group events" xml:space="preserve">
<source>%lld group events</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld members" xml:space="preserve"> <trans-unit id="%lld members" xml:space="preserve">
<source>%lld members</source> <source>%lld members</source>
<target>%lld jäsenet</target> <target>%lld jäsenet</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="%lld messages blocked" xml:space="preserve">
<source>%lld messages blocked</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld messages marked deleted" xml:space="preserve">
<source>%lld messages marked deleted</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld messages moderated by %@" xml:space="preserve">
<source>%lld messages moderated by %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve"> <trans-unit id="%lld minutes" xml:space="preserve">
<source>%lld minutes</source> <source>%lld minutes</source>
<target>%lld minuuttia</target> <target>%lld minuuttia</target>
@@ -199,6 +227,7 @@
</trans-unit> </trans-unit>
<trans-unit id="%lld new interface languages" xml:space="preserve"> <trans-unit id="%lld new interface languages" xml:space="preserve">
<source>%lld new interface languages</source> <source>%lld new interface languages</source>
<target>%lld uutta käyttöliittymän kieltä</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="%lld second(s)" xml:space="preserve"> <trans-unit id="%lld second(s)" xml:space="preserve">
@@ -261,6 +290,14 @@
<target>(</target> <target>(</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="(new)" xml:space="preserve">
<source>(new)</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="(this device v%@)" xml:space="preserve">
<source>(this device v%@)</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=")" xml:space="preserve"> <trans-unit id=")" xml:space="preserve">
<source>)</source> <source>)</source>
<target>)</target> <target>)</target>
@@ -346,6 +383,12 @@
- ja paljon muuta!</target> - ja paljon muuta!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="- optionally notify deleted contacts.&#10;- profile names with spaces.&#10;- and more!" xml:space="preserve">
<source>- optionally notify deleted contacts.
- profile names with spaces.
- and more!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="- voice messages up to 5 minutes.&#10;- custom time to disappear.&#10;- editing history." xml:space="preserve"> <trans-unit id="- voice messages up to 5 minutes.&#10;- custom time to disappear.&#10;- editing history." xml:space="preserve">
<source>- voice messages up to 5 minutes. <source>- voice messages up to 5 minutes.
- custom time to disappear. - custom time to disappear.
@@ -360,6 +403,10 @@
<target>.</target> <target>.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="0 sec" xml:space="preserve">
<source>0 sec</source>
<note>time to disappear</note>
</trans-unit>
<trans-unit id="0s" xml:space="preserve"> <trans-unit id="0s" xml:space="preserve">
<source>0s</source> <source>0s</source>
<target>0s</target> <target>0s</target>
@@ -585,6 +632,10 @@
<target>Kaikki viestit poistetaan - tätä ei voi kumota! Viestit poistuvat VAIN sinulta.</target> <target>Kaikki viestit poistetaan - tätä ei voi kumota! Viestit poistuvat VAIN sinulta.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="All new messages from %@ will be hidden!" xml:space="preserve">
<source>All new messages from %@ will be hidden!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts will remain connected." xml:space="preserve"> <trans-unit id="All your contacts will remain connected." xml:space="preserve">
<source>All your contacts will remain connected.</source> <source>All your contacts will remain connected.</source>
<target>Kaikki kontaktisi pysyvät yhteydessä.</target> <target>Kaikki kontaktisi pysyvät yhteydessä.</target>
@@ -690,6 +741,14 @@
<target>Oletko jo muodostanut yhteyden?</target> <target>Oletko jo muodostanut yhteyden?</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Already connecting!" xml:space="preserve">
<source>Already connecting!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Already joining the group!" xml:space="preserve">
<source>Already joining the group!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Always use relay" xml:space="preserve"> <trans-unit id="Always use relay" xml:space="preserve">
<source>Always use relay</source> <source>Always use relay</source>
<target>Käytä aina relettä</target> <target>Käytä aina relettä</target>
@@ -809,6 +868,10 @@
<target>Takaisin</target> <target>Takaisin</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Bad desktop address" xml:space="preserve">
<source>Bad desktop address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Bad message ID" xml:space="preserve"> <trans-unit id="Bad message ID" xml:space="preserve">
<source>Bad message ID</source> <source>Bad message ID</source>
<target>Virheellinen viestin tunniste</target> <target>Virheellinen viestin tunniste</target>
@@ -819,11 +882,31 @@
<target>Virheellinen viestin tarkiste</target> <target>Virheellinen viestin tarkiste</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Better groups" xml:space="preserve">
<source>Better groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Better messages" xml:space="preserve"> <trans-unit id="Better messages" xml:space="preserve">
<source>Better messages</source> <source>Better messages</source>
<target>Parempia viestejä</target> <target>Parempia viestejä</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Block" xml:space="preserve">
<source>Block</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block group members" xml:space="preserve">
<source>Block group members</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block member" xml:space="preserve">
<source>Block member</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block member?" xml:space="preserve">
<source>Block member?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve">
<source>Both you and your contact can add message reactions.</source> <source>Both you and your contact can add message reactions.</source>
<target>Sekä sinä että kontaktisi voivat käyttää viestireaktioita.</target> <target>Sekä sinä että kontaktisi voivat käyttää viestireaktioita.</target>
@@ -1084,9 +1167,8 @@
<target>Yhdistä</target> <target>Yhdistä</target>
<note>server test step</note> <note>server test step</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect directly" xml:space="preserve"> <trans-unit id="Connect automatically" xml:space="preserve">
<source>Connect directly</source> <source>Connect automatically</source>
<target>Yhdistä suoraan</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect incognito" xml:space="preserve"> <trans-unit id="Connect incognito" xml:space="preserve">
@@ -1094,14 +1176,26 @@
<target>Yhdistä Incognito</target> <target>Yhdistä Incognito</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect via contact link" xml:space="preserve"> <trans-unit id="Connect to desktop" xml:space="preserve">
<source>Connect via contact link</source> <source>Connect to desktop</source>
<target>Yhdistä kontaktilinkillä</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect via group link?" xml:space="preserve"> <trans-unit id="Connect to yourself?" xml:space="preserve">
<source>Connect via group link?</source> <source>Connect to yourself?</source>
<target>Yhdistetäänkö ryhmälinkin kautta?</target> <note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect to yourself?&#10;This is your own SimpleX address!" xml:space="preserve">
<source>Connect to yourself?
This is your own SimpleX address!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect to yourself?&#10;This is your own one-time link!" xml:space="preserve">
<source>Connect to yourself?
This is your own one-time link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect via contact address" xml:space="preserve">
<source>Connect via contact address</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect via link" xml:space="preserve"> <trans-unit id="Connect via link" xml:space="preserve">
@@ -1119,6 +1213,18 @@
<target>Yhdistä kertalinkillä</target> <target>Yhdistä kertalinkillä</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect with %@" xml:space="preserve">
<source>Connect with %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connected desktop" xml:space="preserve">
<source>Connected desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connected to desktop" xml:space="preserve">
<source>Connected to desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connecting server…" xml:space="preserve"> <trans-unit id="Connecting server…" xml:space="preserve">
<source>Connecting to server…</source> <source>Connecting to server…</source>
<target>Yhteyden muodostaminen palvelimeen…</target> <target>Yhteyden muodostaminen palvelimeen…</target>
@@ -1129,6 +1235,10 @@
<target>Yhteyden muodostaminen palvelimeen... (virhe: %@)</target> <target>Yhteyden muodostaminen palvelimeen... (virhe: %@)</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connecting to desktop" xml:space="preserve">
<source>Connecting to desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connection" xml:space="preserve"> <trans-unit id="Connection" xml:space="preserve">
<source>Connection</source> <source>Connection</source>
<target>Yhteys</target> <target>Yhteys</target>
@@ -1149,6 +1259,10 @@
<target>Yhteyspyyntö lähetetty!</target> <target>Yhteyspyyntö lähetetty!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connection terminated" xml:space="preserve">
<source>Connection terminated</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connection timeout" xml:space="preserve"> <trans-unit id="Connection timeout" xml:space="preserve">
<source>Connection timeout</source> <source>Connection timeout</source>
<target>Yhteyden aikakatkaisu</target> <target>Yhteyden aikakatkaisu</target>
@@ -1164,11 +1278,6 @@
<target>Kontakti on jo olemassa</target> <target>Kontakti on jo olemassa</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Contact and all messages will be deleted - this cannot be undone!" xml:space="preserve">
<source>Contact and all messages will be deleted - this cannot be undone!</source>
<target>Kontakti ja kaikki viestit poistetaan - tätä ei voi perua!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Contact hidden:" xml:space="preserve"> <trans-unit id="Contact hidden:" xml:space="preserve">
<source>Contact hidden:</source> <source>Contact hidden:</source>
<target>Kontakti piilotettu:</target> <target>Kontakti piilotettu:</target>
@@ -1219,6 +1328,10 @@
<target>Ydinversio: v%@</target> <target>Ydinversio: v%@</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Correct name to %@?" xml:space="preserve">
<source>Correct name to %@?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create" xml:space="preserve"> <trans-unit id="Create" xml:space="preserve">
<source>Create</source> <source>Create</source>
<target>Luo</target> <target>Luo</target>
@@ -1229,6 +1342,10 @@
<target>Luo SimpleX-osoite</target> <target>Luo SimpleX-osoite</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Create a group using a random profile." xml:space="preserve">
<source>Create a group using a random profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create an address to let people connect with you." xml:space="preserve"> <trans-unit id="Create an address to let people connect with you." xml:space="preserve">
<source>Create an address to let people connect with you.</source> <source>Create an address to let people connect with you.</source>
<target>Luo osoite, jolla ihmiset voivat ottaa sinuun yhteyttä.</target> <target>Luo osoite, jolla ihmiset voivat ottaa sinuun yhteyttä.</target>
@@ -1239,6 +1356,10 @@
<target>Luo tiedosto</target> <target>Luo tiedosto</target>
<note>server test step</note> <note>server test step</note>
</trans-unit> </trans-unit>
<trans-unit id="Create group" xml:space="preserve">
<source>Create group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve"> <trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source> <source>Create group link</source>
<target>Luo ryhmälinkki</target> <target>Luo ryhmälinkki</target>
@@ -1251,6 +1372,7 @@
</trans-unit> </trans-unit>
<trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve"> <trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve">
<source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source> <source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source>
<target>Luo uusi profiili [työpöytäsovelluksessa](https://simplex.chat/downloads/). 💻</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Create one-time invitation link" xml:space="preserve"> <trans-unit id="Create one-time invitation link" xml:space="preserve">
@@ -1258,6 +1380,10 @@
<target>Luo kertakutsulinkki</target> <target>Luo kertakutsulinkki</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Create profile" xml:space="preserve">
<source>Create profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create queue" xml:space="preserve"> <trans-unit id="Create queue" xml:space="preserve">
<source>Create queue</source> <source>Create queue</source>
<target>Luo jono</target> <target>Luo jono</target>
@@ -1416,6 +1542,10 @@
<target>Poista</target> <target>Poista</target>
<note>chat item action</note> <note>chat item action</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete %lld messages?" xml:space="preserve">
<source>Delete %lld messages?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete Contact" xml:space="preserve"> <trans-unit id="Delete Contact" xml:space="preserve">
<source>Delete Contact</source> <source>Delete Contact</source>
<target>Poista kontakti</target> <target>Poista kontakti</target>
@@ -1441,6 +1571,10 @@
<target>Poista kaikki tiedostot</target> <target>Poista kaikki tiedostot</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete and notify contact" xml:space="preserve">
<source>Delete and notify contact</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete archive" xml:space="preserve"> <trans-unit id="Delete archive" xml:space="preserve">
<source>Delete archive</source> <source>Delete archive</source>
<target>Poista arkisto</target> <target>Poista arkisto</target>
@@ -1471,9 +1605,9 @@
<target>Poista kontakti</target> <target>Poista kontakti</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete contact?" xml:space="preserve"> <trans-unit id="Delete contact?&#10;This cannot be undone!" xml:space="preserve">
<source>Delete contact?</source> <source>Delete contact?
<target>Poista kontakti?</target> This cannot be undone!</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete database" xml:space="preserve"> <trans-unit id="Delete database" xml:space="preserve">
@@ -1616,6 +1750,18 @@
<target>Kuvaus</target> <target>Kuvaus</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Desktop address" xml:space="preserve">
<source>Desktop address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Desktop app version %@ is not compatible with this app." xml:space="preserve">
<source>Desktop app version %@ is not compatible with this app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Desktop devices" xml:space="preserve">
<source>Desktop devices</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Develop" xml:space="preserve"> <trans-unit id="Develop" xml:space="preserve">
<source>Develop</source> <source>Develop</source>
<target>Kehitä</target> <target>Kehitä</target>
@@ -1706,18 +1852,17 @@
<target>Katkaise</target> <target>Katkaise</target>
<note>server test step</note> <note>server test step</note>
</trans-unit> </trans-unit>
<trans-unit id="Disconnect desktop?" xml:space="preserve">
<source>Disconnect desktop?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Discover and join groups" xml:space="preserve"> <trans-unit id="Discover and join groups" xml:space="preserve">
<source>Discover and join groups</source> <source>Discover and join groups</source>
<target>Löydä ryhmiä ja liity niihin</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Display name" xml:space="preserve"> <trans-unit id="Discover via local network" xml:space="preserve">
<source>Display name</source> <source>Discover via local network</source>
<target>Näyttönimi</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Display name:" xml:space="preserve">
<source>Display name:</source>
<target>Näyttönimi:</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve"> <trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve">
@@ -1889,6 +2034,14 @@
<target>Salattu viesti: odottamaton virhe</target> <target>Salattu viesti: odottamaton virhe</target>
<note>notification</note> <note>notification</note>
</trans-unit> </trans-unit>
<trans-unit id="Encryption re-negotiation error" xml:space="preserve">
<source>Encryption re-negotiation error</source>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Encryption re-negotiation failed." xml:space="preserve">
<source>Encryption re-negotiation failed.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter Passcode" xml:space="preserve"> <trans-unit id="Enter Passcode" xml:space="preserve">
<source>Enter Passcode</source> <source>Enter Passcode</source>
<target>Syötä pääsykoodi</target> <target>Syötä pääsykoodi</target>
@@ -1899,6 +2052,10 @@
<target>Anna oikea tunnuslause.</target> <target>Anna oikea tunnuslause.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Enter group name…" xml:space="preserve">
<source>Enter group name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve"> <trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source> <source>Enter passphrase…</source>
<target>Syötä tunnuslause…</target> <target>Syötä tunnuslause…</target>
@@ -1914,6 +2071,10 @@
<target>Syötä palvelin manuaalisesti</target> <target>Syötä palvelin manuaalisesti</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Enter this device name…" xml:space="preserve">
<source>Enter this device name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter welcome message…" xml:space="preserve"> <trans-unit id="Enter welcome message…" xml:space="preserve">
<source>Enter welcome message…</source> <source>Enter welcome message…</source>
<target>Kirjoita tervetuloviesti…</target> <target>Kirjoita tervetuloviesti…</target>
@@ -1924,6 +2085,10 @@
<target>Kirjoita tervetuloviesti... (valinnainen)</target> <target>Kirjoita tervetuloviesti... (valinnainen)</target>
<note>placeholder</note> <note>placeholder</note>
</trans-unit> </trans-unit>
<trans-unit id="Enter your name…" xml:space="preserve">
<source>Enter your name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error" xml:space="preserve"> <trans-unit id="Error" xml:space="preserve">
<source>Error</source> <source>Error</source>
<target>Virhe</target> <target>Virhe</target>
@@ -2197,6 +2362,10 @@
<target>Poistu tallentamatta</target> <target>Poistu tallentamatta</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Expand" xml:space="preserve">
<source>Expand</source>
<note>chat item action</note>
</trans-unit>
<trans-unit id="Export database" xml:space="preserve"> <trans-unit id="Export database" xml:space="preserve">
<source>Export database</source> <source>Export database</source>
<target>Vie tietokanta</target> <target>Vie tietokanta</target>
@@ -2227,6 +2396,10 @@
<target>Nopea ja ei odotusta, kunnes lähettäjä on online-tilassa!</target> <target>Nopea ja ei odotusta, kunnes lähettäjä on online-tilassa!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Faster joining and more reliable messages." xml:space="preserve">
<source>Faster joining and more reliable messages.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve"> <trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source> <source>Favorite</source>
<target>Suosikki</target> <target>Suosikki</target>
@@ -2322,6 +2495,10 @@
<target>Konsoliin</target> <target>Konsoliin</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Found desktop" xml:space="preserve">
<source>Found desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="French interface" xml:space="preserve"> <trans-unit id="French interface" xml:space="preserve">
<source>French interface</source> <source>French interface</source>
<target>Ranskalainen käyttöliittymä</target> <target>Ranskalainen käyttöliittymä</target>
@@ -2342,6 +2519,10 @@
<target>Koko nimi:</target> <target>Koko nimi:</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Fully decentralized visible only to members." xml:space="preserve">
<source>Fully decentralized visible only to members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Fully re-implemented - work in background!" xml:space="preserve"> <trans-unit id="Fully re-implemented - work in background!" xml:space="preserve">
<source>Fully re-implemented - work in background!</source> <source>Fully re-implemented - work in background!</source>
<target>Täysin uudistettu - toimii taustalla!</target> <target>Täysin uudistettu - toimii taustalla!</target>
@@ -2362,6 +2543,14 @@
<target>Ryhmä</target> <target>Ryhmä</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Group already exists" xml:space="preserve">
<source>Group already exists</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group already exists!" xml:space="preserve">
<source>Group already exists!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group display name" xml:space="preserve"> <trans-unit id="Group display name" xml:space="preserve">
<source>Group display name</source> <source>Group display name</source>
<target>Ryhmän näyttönimi</target> <target>Ryhmän näyttönimi</target>
@@ -2632,6 +2821,10 @@
<target>Incognito</target> <target>Incognito</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Incognito groups" xml:space="preserve">
<source>Incognito groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incognito mode" xml:space="preserve"> <trans-unit id="Incognito mode" xml:space="preserve">
<source>Incognito mode</source> <source>Incognito mode</source>
<target>Incognito-tila</target> <target>Incognito-tila</target>
@@ -2662,6 +2855,10 @@
<target>Yhteensopimaton tietokantaversio</target> <target>Yhteensopimaton tietokantaversio</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Incompatible version" xml:space="preserve">
<source>Incompatible version</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incorrect passcode" xml:space="preserve"> <trans-unit id="Incorrect passcode" xml:space="preserve">
<source>Incorrect passcode</source> <source>Incorrect passcode</source>
<target>Väärä pääsykoodi</target> <target>Väärä pääsykoodi</target>
@@ -2709,6 +2906,10 @@
<target>Virheellinen yhteyslinkki</target> <target>Virheellinen yhteyslinkki</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid server address!" xml:space="preserve"> <trans-unit id="Invalid server address!" xml:space="preserve">
<source>Invalid server address!</source> <source>Invalid server address!</source>
<target>Virheellinen palvelinosoite!</target> <target>Virheellinen palvelinosoite!</target>
@@ -2800,16 +3001,33 @@
<target>Liity ryhmään</target> <target>Liity ryhmään</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Join group?" xml:space="preserve">
<source>Join group?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join incognito" xml:space="preserve"> <trans-unit id="Join incognito" xml:space="preserve">
<source>Join incognito</source> <source>Join incognito</source>
<target>Liity incognito-tilassa</target> <target>Liity incognito-tilassa</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Join with current profile" xml:space="preserve">
<source>Join with current profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join your group?&#10;This is your link for group %@!" xml:space="preserve">
<source>Join your group?
This is your link for group %@!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Joining group" xml:space="preserve"> <trans-unit id="Joining group" xml:space="preserve">
<source>Joining group</source> <source>Joining group</source>
<target>Liittyy ryhmään</target> <target>Liittyy ryhmään</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Keep the app open to use it from desktop" xml:space="preserve">
<source>Keep the app open to use it from desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep your connections" xml:space="preserve"> <trans-unit id="Keep your connections" xml:space="preserve">
<source>Keep your connections</source> <source>Keep your connections</source>
<target>Pidä kontaktisi</target> <target>Pidä kontaktisi</target>
@@ -2870,6 +3088,18 @@
<target>Rajoitukset</target> <target>Rajoitukset</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Link mobile and desktop apps! 🔗" xml:space="preserve">
<source>Link mobile and desktop apps! 🔗</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Linked desktop options" xml:space="preserve">
<source>Linked desktop options</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Linked desktops" xml:space="preserve">
<source>Linked desktops</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Live message!" xml:space="preserve"> <trans-unit id="Live message!" xml:space="preserve">
<source>Live message!</source> <source>Live message!</source>
<target>Live-viesti!</target> <target>Live-viesti!</target>
@@ -3020,6 +3250,10 @@
<target>Viestit ja tiedostot</target> <target>Viestit ja tiedostot</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Messages from %@ will be shown!" xml:space="preserve">
<source>Messages from %@ will be shown!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve"> <trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source> <source>Migrating database archive…</source>
<target>Siirretään tietokannan arkistoa…</target> <target>Siirretään tietokannan arkistoa…</target>
@@ -3214,6 +3448,10 @@
<target>Ei vastaanotettuja tai lähetettyjä tiedostoja</target> <target>Ei vastaanotettuja tai lähetettyjä tiedostoja</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Not compatible!" xml:space="preserve">
<source>Not compatible!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Notifications" xml:space="preserve"> <trans-unit id="Notifications" xml:space="preserve">
<source>Notifications</source> <source>Notifications</source>
<target>Ilmoitukset</target> <target>Ilmoitukset</target>
@@ -3367,6 +3605,10 @@
<target>Avaa keskustelukonsoli</target> <target>Avaa keskustelukonsoli</target>
<note>authentication reason</note> <note>authentication reason</note>
</trans-unit> </trans-unit>
<trans-unit id="Open group" xml:space="preserve">
<source>Open group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve"> <trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source> <source>Open user profiles</source>
<target>Avaa käyttäjäprofiilit</target> <target>Avaa käyttäjäprofiilit</target>
@@ -3382,11 +3624,6 @@
<target>Avataan tietokantaa…</target> <target>Avataan tietokantaa…</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." xml:space="preserve">
<source>Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red.</source>
<target>Linkin avaaminen selaimessa voi heikentää yhteyden yksityisyyttä ja turvallisuutta. Epäluotetut SimpleX-linkit näkyvät punaisina.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="PING count" xml:space="preserve"> <trans-unit id="PING count" xml:space="preserve">
<source>PING count</source> <source>PING count</source>
<target>PING-määrä</target> <target>PING-määrä</target>
@@ -3432,6 +3669,10 @@
<target>Liitä</target> <target>Liitä</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Paste desktop address" xml:space="preserve">
<source>Paste desktop address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Paste image" xml:space="preserve"> <trans-unit id="Paste image" xml:space="preserve">
<source>Paste image</source> <source>Paste image</source>
<target>Liitä kuva</target> <target>Liitä kuva</target>
@@ -3577,6 +3818,14 @@
<target>Profiilikuva</target> <target>Profiilikuva</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Profile name" xml:space="preserve">
<source>Profile name</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile name:" xml:space="preserve">
<source>Profile name:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile password" xml:space="preserve"> <trans-unit id="Profile password" xml:space="preserve">
<source>Profile password</source> <source>Profile password</source>
<target>Profiilin salasana</target> <target>Profiilin salasana</target>
@@ -3822,6 +4071,14 @@
<target>Uudelleenneuvottele salaus?</target> <target>Uudelleenneuvottele salaus?</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Repeat connection request?" xml:space="preserve">
<source>Repeat connection request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve"> <trans-unit id="Reply" xml:space="preserve">
<source>Reply</source> <source>Reply</source>
<target>Vastaa</target> <target>Vastaa</target>
@@ -4007,6 +4264,10 @@
<target>Skannaa QR-koodi</target> <target>Skannaa QR-koodi</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Scan QR code from desktop" xml:space="preserve">
<source>Scan QR code from desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Scan code" xml:space="preserve"> <trans-unit id="Scan code" xml:space="preserve">
<source>Scan code</source> <source>Scan code</source>
<target>Skannaa koodi</target> <target>Skannaa koodi</target>
@@ -4226,6 +4487,10 @@
<target>Palvelimet</target> <target>Palvelimet</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Session code" xml:space="preserve">
<source>Session code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set 1 day" xml:space="preserve"> <trans-unit id="Set 1 day" xml:space="preserve">
<source>Set 1 day</source> <source>Set 1 day</source>
<target>Aseta 1 päivä</target> <target>Aseta 1 päivä</target>
@@ -4535,6 +4800,10 @@
<target>Napauta painiketta </target> <target>Napauta painiketta </target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Tap to Connect" xml:space="preserve">
<source>Tap to Connect</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to activate profile." xml:space="preserve"> <trans-unit id="Tap to activate profile." xml:space="preserve">
<source>Tap to activate profile.</source> <source>Tap to activate profile.</source>
<target>Aktivoi profiili napauttamalla.</target> <target>Aktivoi profiili napauttamalla.</target>
@@ -4632,11 +4901,6 @@ Tämä voi johtua jostain virheestä tai siitä, että yhteys on vaarantunut.</t
<target>Salaus toimii ja uutta salaussopimusta ei tarvita. Tämä voi johtaa yhteysvirheisiin!</target> <target>Salaus toimii ja uutta salaussopimusta ei tarvita. Tämä voi johtaa yhteysvirheisiin!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="The group is fully decentralized it is visible only to the members." xml:space="preserve">
<source>The group is fully decentralized it is visible only to the members.</source>
<target>Ryhmä on täysin hajautettu - se näkyy vain jäsenille.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The hash of the previous message is different." xml:space="preserve"> <trans-unit id="The hash of the previous message is different." xml:space="preserve">
<source>The hash of the previous message is different.</source> <source>The hash of the previous message is different.</source>
<target>Edellisen viestin tarkiste on erilainen.</target> <target>Edellisen viestin tarkiste on erilainen.</target>
@@ -4722,6 +4986,10 @@ Tämä voi johtua jostain virheestä tai siitä, että yhteys on vaarantunut.</t
<target>Tätä toimintoa ei voi kumota - profiilisi, kontaktisi, viestisi ja tiedostosi poistuvat peruuttamattomasti.</target> <target>Tätä toimintoa ei voi kumota - profiilisi, kontaktisi, viestisi ja tiedostosi poistuvat peruuttamattomasti.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve"> <trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source> <source>This group has over %lld members, delivery receipts are not sent.</source>
<target>Tässä ryhmässä on yli %lld jäsentä, lähetyskuittauksia ei lähetetä.</target> <target>Tässä ryhmässä on yli %lld jäsentä, lähetyskuittauksia ei lähetetä.</target>
@@ -4732,6 +5000,14 @@ Tämä voi johtua jostain virheestä tai siitä, että yhteys on vaarantunut.</t
<target>Tätä ryhmää ei enää ole olemassa.</target> <target>Tätä ryhmää ei enää ole olemassa.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="This is your own SimpleX address!" xml:space="preserve">
<source>This is your own SimpleX address!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This is your own one-time link!" xml:space="preserve">
<source>This is your own one-time link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This setting applies to messages in your current chat profile **%@**." xml:space="preserve"> <trans-unit id="This setting applies to messages in your current chat profile **%@**." xml:space="preserve">
<source>This setting applies to messages in your current chat profile **%@**.</source> <source>This setting applies to messages in your current chat profile **%@**.</source>
<target>Tämä asetus koskee nykyisen keskusteluprofiilisi viestejä *%@**.</target> <target>Tämä asetus koskee nykyisen keskusteluprofiilisi viestejä *%@**.</target>
@@ -4747,6 +5023,10 @@ Tämä voi johtua jostain virheestä tai siitä, että yhteys on vaarantunut.</t
<target>Kontaktisi voi muodostaa yhteyden skannaamalla QR-koodin tai käyttämällä sovelluksessa olevaa linkkiä.</target> <target>Kontaktisi voi muodostaa yhteyden skannaamalla QR-koodin tai käyttämällä sovelluksessa olevaa linkkiä.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="To hide unwanted messages." xml:space="preserve">
<source>To hide unwanted messages.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To make a new connection" xml:space="preserve"> <trans-unit id="To make a new connection" xml:space="preserve">
<source>To make a new connection</source> <source>To make a new connection</source>
<target>Uuden yhteyden luominen</target> <target>Uuden yhteyden luominen</target>
@@ -4828,6 +5108,18 @@ Sinua kehotetaan suorittamaan todennus loppuun, ennen kuin tämä ominaisuus ote
<target>Ääniviestiä ei voi tallentaa</target> <target>Ääniviestiä ei voi tallentaa</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Unblock" xml:space="preserve">
<source>Unblock</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unblock member" xml:space="preserve">
<source>Unblock member</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unblock member?" xml:space="preserve">
<source>Unblock member?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unexpected error: %@" xml:space="preserve"> <trans-unit id="Unexpected error: %@" xml:space="preserve">
<source>Unexpected error: %@</source> <source>Unexpected error: %@</source>
<target>Odottamaton virhe: %@</target> <target>Odottamaton virhe: %@</target>
@@ -4890,6 +5182,14 @@ To connect, please ask your contact to create another connection link and check
Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja tarkista, että verkkoyhteytesi on vakaa.</target> Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja tarkista, että verkkoyhteytesi on vakaa.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Unlink" xml:space="preserve">
<source>Unlink</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlink desktop?" xml:space="preserve">
<source>Unlink desktop?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlock" xml:space="preserve"> <trans-unit id="Unlock" xml:space="preserve">
<source>Unlock</source> <source>Unlock</source>
<target>Avaa</target> <target>Avaa</target>
@@ -4980,6 +5280,10 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Käytä uusiin yhteyksiin</target> <target>Käytä uusiin yhteyksiin</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Use from desktop" xml:space="preserve">
<source>Use from desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use iOS call interface" xml:space="preserve"> <trans-unit id="Use iOS call interface" xml:space="preserve">
<source>Use iOS call interface</source> <source>Use iOS call interface</source>
<target>Käytä iOS:n puhelujen käyttöliittymää</target> <target>Käytä iOS:n puhelujen käyttöliittymää</target>
@@ -5010,11 +5314,23 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Käyttää SimpleX Chat -palvelimia.</target> <target>Käyttää SimpleX Chat -palvelimia.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Verify code with desktop" xml:space="preserve">
<source>Verify code with desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify connection" xml:space="preserve">
<source>Verify connection</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify connection security" xml:space="preserve"> <trans-unit id="Verify connection security" xml:space="preserve">
<source>Verify connection security</source> <source>Verify connection security</source>
<target>Tarkista yhteyden suojaus</target> <target>Tarkista yhteyden suojaus</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Verify connections" xml:space="preserve">
<source>Verify connections</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve"> <trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source> <source>Verify security code</source>
<target>Tarkista turvakoodi</target> <target>Tarkista turvakoodi</target>
@@ -5025,6 +5341,10 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Selaimella</target> <target>Selaimella</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Via secure quantum resistant protocol." xml:space="preserve">
<source>Via secure quantum resistant protocol.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video call" xml:space="preserve"> <trans-unit id="Video call" xml:space="preserve">
<source>Video call</source> <source>Video call</source>
<target>Videopuhelu</target> <target>Videopuhelu</target>
@@ -5075,6 +5395,10 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Ääniviesti…</target> <target>Ääniviesti…</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Waiting for desktop..." xml:space="preserve">
<source>Waiting for desktop...</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Waiting for file" xml:space="preserve"> <trans-unit id="Waiting for file" xml:space="preserve">
<source>Waiting for file</source> <source>Waiting for file</source>
<target>Odottaa tiedostoa</target> <target>Odottaa tiedostoa</target>
@@ -5175,6 +5499,35 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Olet jo muodostanut yhteyden %@:n kanssa.</target> <target>Olet jo muodostanut yhteyden %@:n kanssa.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You are already connecting to %@." xml:space="preserve">
<source>You are already connecting to %@.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already connecting via this one-time link!" xml:space="preserve">
<source>You are already connecting via this one-time link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already in group %@." xml:space="preserve">
<source>You are already in group %@.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group %@." xml:space="preserve">
<source>You are already joining the group %@.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group via this link!" xml:space="preserve">
<source>You are already joining the group via this link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group via this link." xml:space="preserve">
<source>You are already joining the group via this link.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group!&#10;Repeat join request?" xml:space="preserve">
<source>You are already joining the group!
Repeat join request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are connected to the server used to receive messages from this contact." xml:space="preserve"> <trans-unit id="You are connected to the server used to receive messages from this contact." xml:space="preserve">
<source>You are connected to the server used to receive messages from this contact.</source> <source>You are connected to the server used to receive messages from this contact.</source>
<target>Olet yhteydessä palvelimeen, jota käytetään vastaanottamaan viestejä tältä kontaktilta.</target> <target>Olet yhteydessä palvelimeen, jota käytetään vastaanottamaan viestejä tältä kontaktilta.</target>
@@ -5270,6 +5623,15 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Sinua ei voitu todentaa; yritä uudelleen.</target> <target>Sinua ei voitu todentaa; yritä uudelleen.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You have already requested connection via this address!" xml:space="preserve">
<source>You have already requested connection via this address!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You have already requested connection!&#10;Repeat connection request?" xml:space="preserve">
<source>You have already requested connection!
Repeat connection request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You have no chats" xml:space="preserve"> <trans-unit id="You have no chats" xml:space="preserve">
<source>You have no chats</source> <source>You have no chats</source>
<target>Sinulla ei ole keskusteluja</target> <target>Sinulla ei ole keskusteluja</target>
@@ -5320,6 +5682,10 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Sinut yhdistetään ryhmään, kun ryhmän isännän laite on online-tilassa, odota tai tarkista myöhemmin!</target> <target>Sinut yhdistetään ryhmään, kun ryhmän isännän laite on online-tilassa, odota tai tarkista myöhemmin!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You will be connected when group link host's device is online, please wait or check later!" xml:space="preserve">
<source>You will be connected when group link host's device is online, please wait or check later!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will be connected when your connection request is accepted, please wait or check later!" xml:space="preserve"> <trans-unit id="You will be connected when your connection request is accepted, please wait or check later!" xml:space="preserve">
<source>You will be connected when your connection request is accepted, please wait or check later!</source> <source>You will be connected when your connection request is accepted, please wait or check later!</source>
<target>Sinut yhdistetään, kun yhteyspyyntösi on hyväksytty, odota tai tarkista myöhemmin!</target> <target>Sinut yhdistetään, kun yhteyspyyntösi on hyväksytty, odota tai tarkista myöhemmin!</target>
@@ -5335,9 +5701,8 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Sinun on tunnistauduttava, kun käynnistät sovelluksen tai jatkat sen käyttöä 30 sekunnin tauon jälkeen.</target> <target>Sinun on tunnistauduttava, kun käynnistät sovelluksen tai jatkat sen käyttöä 30 sekunnin tauon jälkeen.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You will join a group this link refers to and connect to its group members." xml:space="preserve"> <trans-unit id="You will connect to all group members." xml:space="preserve">
<source>You will join a group this link refers to and connect to its group members.</source> <source>You will connect to all group members.</source>
<target>Liityt ryhmään, johon tämä linkki viittaa, ja muodostat yhteyden sen ryhmän jäseniin.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve"> <trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve">
@@ -5405,11 +5770,6 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Keskustelut-tietokantasi ei ole salattu - aseta tunnuslause sen salaamiseksi.</target> <target>Keskustelut-tietokantasi ei ole salattu - aseta tunnuslause sen salaamiseksi.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Your chat profile will be sent to group members" xml:space="preserve">
<source>Your chat profile will be sent to group members</source>
<target>Keskusteluprofiilisi lähetetään ryhmän jäsenille</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profiles" xml:space="preserve"> <trans-unit id="Your chat profiles" xml:space="preserve">
<source>Your chat profiles</source> <source>Your chat profiles</source>
<target>Keskusteluprofiilisi</target> <target>Keskusteluprofiilisi</target>
@@ -5464,6 +5824,10 @@ Voit muuttaa sitä Asetuksista.</target>
<target>Yksityisyytesi</target> <target>Yksityisyytesi</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Your profile" xml:space="preserve">
<source>Your profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your profile **%@** will be shared." xml:space="preserve"> <trans-unit id="Your profile **%@** will be shared." xml:space="preserve">
<source>Your profile **%@** will be shared.</source> <source>Your profile **%@** will be shared.</source>
<target>Profiilisi **%@** jaetaan.</target> <target>Profiilisi **%@** jaetaan.</target>
@@ -5556,11 +5920,19 @@ SimpleX-palvelimet eivät näe profiiliasi.</target>
<target>aina</target> <target>aina</target>
<note>pref value</note> <note>pref value</note>
</trans-unit> </trans-unit>
<trans-unit id="and %lld other events" xml:space="preserve">
<source>and %lld other events</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="audio call (not e2e encrypted)" xml:space="preserve"> <trans-unit id="audio call (not e2e encrypted)" xml:space="preserve">
<source>audio call (not e2e encrypted)</source> <source>audio call (not e2e encrypted)</source>
<target>äänipuhelu (ei e2e-salattu)</target> <target>äänipuhelu (ei e2e-salattu)</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="author" xml:space="preserve">
<source>author</source>
<note>member role</note>
</trans-unit>
<trans-unit id="bad message ID" xml:space="preserve"> <trans-unit id="bad message ID" xml:space="preserve">
<source>bad message ID</source> <source>bad message ID</source>
<target>virheellinen viestin tunniste</target> <target>virheellinen viestin tunniste</target>
@@ -5571,6 +5943,10 @@ SimpleX-palvelimet eivät näe profiiliasi.</target>
<target>virheellinen viestin tarkiste</target> <target>virheellinen viestin tarkiste</target>
<note>integrity error chat item</note> <note>integrity error chat item</note>
</trans-unit> </trans-unit>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve"> <trans-unit id="bold" xml:space="preserve">
<source>bold</source> <source>bold</source>
<target>lihavoitu</target> <target>lihavoitu</target>
@@ -5740,6 +6116,10 @@ SimpleX-palvelimet eivät näe profiiliasi.</target>
<target>poistettu</target> <target>poistettu</target>
<note>deleted chat item</note> <note>deleted chat item</note>
</trans-unit> </trans-unit>
<trans-unit id="deleted contact" xml:space="preserve">
<source>deleted contact</source>
<note>rcv direct event chat item</note>
</trans-unit>
<trans-unit id="deleted group" xml:space="preserve"> <trans-unit id="deleted group" xml:space="preserve">
<source>deleted group</source> <source>deleted group</source>
<target>poistettu ryhmä</target> <target>poistettu ryhmä</target>
@@ -6024,7 +6404,8 @@ SimpleX-palvelimet eivät näe profiiliasi.</target>
<source>off</source> <source>off</source>
<target>pois</target> <target>pois</target>
<note>enabled status <note>enabled status
group pref value</note> group pref value
time to disappear</note>
</trans-unit> </trans-unit>
<trans-unit id="offered %@" xml:space="preserve"> <trans-unit id="offered %@" xml:space="preserve">
<source>offered %@</source> <source>offered %@</source>
@@ -6041,11 +6422,6 @@ SimpleX-palvelimet eivät näe profiiliasi.</target>
<target>päällä</target> <target>päällä</target>
<note>group pref value</note> <note>group pref value</note>
</trans-unit> </trans-unit>
<trans-unit id="or chat with the developers" xml:space="preserve">
<source>or chat with the developers</source>
<target>tai keskustele kehittäjien kanssa</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="owner" xml:space="preserve"> <trans-unit id="owner" xml:space="preserve">
<source>owner</source> <source>owner</source>
<target>omistaja</target> <target>omistaja</target>
@@ -6135,6 +6511,10 @@ SimpleX-palvelimet eivät näe profiiliasi.</target>
<target>päivitetty ryhmäprofiili</target> <target>päivitetty ryhmäprofiili</target>
<note>rcv group event chat item</note> <note>rcv group event chat item</note>
</trans-unit> </trans-unit>
<trans-unit id="v%@" xml:space="preserve">
<source>v%@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="v%@ (%@)" xml:space="preserve"> <trans-unit id="v%@ (%@)" xml:space="preserve">
<source>v%@ (%@)</source> <source>v%@ (%@)</source>
<target>v%@ (%@)</target> <target>v%@ (%@)</target>
@@ -6272,6 +6652,10 @@ SimpleX-palvelimet eivät näe profiiliasi.</target>
<target>SimpleX käyttää Face ID:tä paikalliseen todennukseen</target> <target>SimpleX käyttää Face ID:tä paikalliseen todennukseen</target>
<note>Privacy - Face ID Usage Description</note> <note>Privacy - Face ID Usage Description</note>
</trans-unit> </trans-unit>
<trans-unit id="NSLocalNetworkUsageDescription" xml:space="preserve">
<source>SimpleX uses local network access to allow using user chat profile via desktop app on the same network.</source>
<note>Privacy - Local Network Usage Description</note>
</trans-unit>
<trans-unit id="NSMicrophoneUsageDescription" xml:space="preserve"> <trans-unit id="NSMicrophoneUsageDescription" xml:space="preserve">
<source>SimpleX needs microphone access for audio and video calls, and to record voice messages.</source> <source>SimpleX needs microphone access for audio and video calls, and to record voice messages.</source>
<target>SimpleX tarvitsee mikrofonia ääni- ja videopuheluita ja ääniviestien tallentamista varten.</target> <target>SimpleX tarvitsee mikrofonia ääni- ja videopuheluita ja ääniviestien tallentamista varten.</target>
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
File diff suppressed because it is too large Load Diff
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
File diff suppressed because it is too large Load Diff
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
File diff suppressed because it is too large Load Diff
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
File diff suppressed because it is too large Load Diff
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
File diff suppressed because it is too large Load Diff
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
File diff suppressed because it is too large Load Diff
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
@@ -84,6 +84,10 @@
<target>%@ / %@</target> <target>%@ / %@</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="%@ and %@" xml:space="preserve">
<source>%@ and %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ and %@ connected" xml:space="preserve"> <trans-unit id="%@ and %@ connected" xml:space="preserve">
<source>%@ and %@ connected</source> <source>%@ and %@ connected</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
@@ -93,6 +97,10 @@
<target>%1$@ ที่ %2$@:</target> <target>%1$@ ที่ %2$@:</target>
<note>copied message info, &lt;sender&gt; at &lt;time&gt;</note> <note>copied message info, &lt;sender&gt; at &lt;time&gt;</note>
</trans-unit> </trans-unit>
<trans-unit id="%@ connected" xml:space="preserve">
<source>%@ connected</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve"> <trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source> <source>%@ is connected!</source>
<target>%@ เชื่อมต่อสำเร็จ!</target> <target>%@ เชื่อมต่อสำเร็จ!</target>
@@ -118,6 +126,10 @@
<target>%@ อยากเชื่อมต่อ!</target> <target>%@ อยากเชื่อมต่อ!</target>
<note>notification title</note> <note>notification title</note>
</trans-unit> </trans-unit>
<trans-unit id="%@, %@ and %lld members" xml:space="preserve">
<source>%@, %@ and %lld members</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@, %@ and %lld other members connected" xml:space="preserve"> <trans-unit id="%@, %@ and %lld other members connected" xml:space="preserve">
<source>%@, %@ and %lld other members connected</source> <source>%@, %@ and %lld other members connected</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
@@ -182,11 +194,27 @@
<target>%lld ไฟล์ที่มีขนาดรวม %@</target> <target>%lld ไฟล์ที่มีขนาดรวม %@</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="%lld group events" xml:space="preserve">
<source>%lld group events</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld members" xml:space="preserve"> <trans-unit id="%lld members" xml:space="preserve">
<source>%lld members</source> <source>%lld members</source>
<target>%lld สมาชิก</target> <target>%lld สมาชิก</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="%lld messages blocked" xml:space="preserve">
<source>%lld messages blocked</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld messages marked deleted" xml:space="preserve">
<source>%lld messages marked deleted</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld messages moderated by %@" xml:space="preserve">
<source>%lld messages moderated by %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve"> <trans-unit id="%lld minutes" xml:space="preserve">
<source>%lld minutes</source> <source>%lld minutes</source>
<target>%lld นาที</target> <target>%lld นาที</target>
@@ -256,6 +284,14 @@
<target>(</target> <target>(</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="(new)" xml:space="preserve">
<source>(new)</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="(this device v%@)" xml:space="preserve">
<source>(this device v%@)</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=")" xml:space="preserve"> <trans-unit id=")" xml:space="preserve">
<source>)</source> <source>)</source>
<target>)</target> <target>)</target>
@@ -341,6 +377,12 @@
- และอื่น ๆ!</target> - และอื่น ๆ!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="- optionally notify deleted contacts.&#10;- profile names with spaces.&#10;- and more!" xml:space="preserve">
<source>- optionally notify deleted contacts.
- profile names with spaces.
- and more!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="- voice messages up to 5 minutes.&#10;- custom time to disappear.&#10;- editing history." xml:space="preserve"> <trans-unit id="- voice messages up to 5 minutes.&#10;- custom time to disappear.&#10;- editing history." xml:space="preserve">
<source>- voice messages up to 5 minutes. <source>- voice messages up to 5 minutes.
- custom time to disappear. - custom time to disappear.
@@ -355,6 +397,10 @@
<target>.</target> <target>.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="0 sec" xml:space="preserve">
<source>0 sec</source>
<note>time to disappear</note>
</trans-unit>
<trans-unit id="0s" xml:space="preserve"> <trans-unit id="0s" xml:space="preserve">
<source>0s</source> <source>0s</source>
<target>0s</target> <target>0s</target>
@@ -578,6 +624,10 @@
<target>ข้อความทั้งหมดจะถูกลบ - ไม่สามารถยกเลิกได้! ข้อความจะถูกลบสำหรับคุณเท่านั้น.</target> <target>ข้อความทั้งหมดจะถูกลบ - ไม่สามารถยกเลิกได้! ข้อความจะถูกลบสำหรับคุณเท่านั้น.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="All new messages from %@ will be hidden!" xml:space="preserve">
<source>All new messages from %@ will be hidden!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts will remain connected." xml:space="preserve"> <trans-unit id="All your contacts will remain connected." xml:space="preserve">
<source>All your contacts will remain connected.</source> <source>All your contacts will remain connected.</source>
<target>ผู้ติดต่อทั้งหมดของคุณจะยังคงเชื่อมต่ออยู่.</target> <target>ผู้ติดต่อทั้งหมดของคุณจะยังคงเชื่อมต่ออยู่.</target>
@@ -683,6 +733,14 @@
<target>เชื่อมต่อสำเร็จแล้ว?</target> <target>เชื่อมต่อสำเร็จแล้ว?</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Already connecting!" xml:space="preserve">
<source>Already connecting!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Already joining the group!" xml:space="preserve">
<source>Already joining the group!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Always use relay" xml:space="preserve"> <trans-unit id="Always use relay" xml:space="preserve">
<source>Always use relay</source> <source>Always use relay</source>
<target>ใช้รีเลย์เสมอ</target> <target>ใช้รีเลย์เสมอ</target>
@@ -802,6 +860,10 @@
<target>กลับ</target> <target>กลับ</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Bad desktop address" xml:space="preserve">
<source>Bad desktop address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Bad message ID" xml:space="preserve"> <trans-unit id="Bad message ID" xml:space="preserve">
<source>Bad message ID</source> <source>Bad message ID</source>
<target>ID ข้อความที่ไม่ดี</target> <target>ID ข้อความที่ไม่ดี</target>
@@ -812,11 +874,31 @@
<target>แฮชข้อความไม่ดี</target> <target>แฮชข้อความไม่ดี</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Better groups" xml:space="preserve">
<source>Better groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Better messages" xml:space="preserve"> <trans-unit id="Better messages" xml:space="preserve">
<source>Better messages</source> <source>Better messages</source>
<target>ข้อความที่ดีขึ้น</target> <target>ข้อความที่ดีขึ้น</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Block" xml:space="preserve">
<source>Block</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block group members" xml:space="preserve">
<source>Block group members</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block member" xml:space="preserve">
<source>Block member</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block member?" xml:space="preserve">
<source>Block member?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve">
<source>Both you and your contact can add message reactions.</source> <source>Both you and your contact can add message reactions.</source>
<target>ทั้งคุณและผู้ติดต่อของคุณสามารถเพิ่มปฏิกิริยาของข้อความได้</target> <target>ทั้งคุณและผู้ติดต่อของคุณสามารถเพิ่มปฏิกิริยาของข้อความได้</target>
@@ -1077,21 +1159,34 @@
<target>เชื่อมต่อ</target> <target>เชื่อมต่อ</target>
<note>server test step</note> <note>server test step</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect directly" xml:space="preserve"> <trans-unit id="Connect automatically" xml:space="preserve">
<source>Connect directly</source> <source>Connect automatically</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect incognito" xml:space="preserve"> <trans-unit id="Connect incognito" xml:space="preserve">
<source>Connect incognito</source> <source>Connect incognito</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect via contact link" xml:space="preserve"> <trans-unit id="Connect to desktop" xml:space="preserve">
<source>Connect via contact link</source> <source>Connect to desktop</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect via group link?" xml:space="preserve"> <trans-unit id="Connect to yourself?" xml:space="preserve">
<source>Connect via group link?</source> <source>Connect to yourself?</source>
<target>เชื่อมต่อผ่านลิงค์กลุ่ม?</target> <note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect to yourself?&#10;This is your own SimpleX address!" xml:space="preserve">
<source>Connect to yourself?
This is your own SimpleX address!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect to yourself?&#10;This is your own one-time link!" xml:space="preserve">
<source>Connect to yourself?
This is your own one-time link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect via contact address" xml:space="preserve">
<source>Connect via contact address</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect via link" xml:space="preserve"> <trans-unit id="Connect via link" xml:space="preserve">
@@ -1108,6 +1203,18 @@
<source>Connect via one-time link</source> <source>Connect via one-time link</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect with %@" xml:space="preserve">
<source>Connect with %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connected desktop" xml:space="preserve">
<source>Connected desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connected to desktop" xml:space="preserve">
<source>Connected to desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connecting server…" xml:space="preserve"> <trans-unit id="Connecting server…" xml:space="preserve">
<source>Connecting to server…</source> <source>Connecting to server…</source>
<target>กำลังเชื่อมต่อกับเซิร์ฟเวอร์…</target> <target>กำลังเชื่อมต่อกับเซิร์ฟเวอร์…</target>
@@ -1118,6 +1225,10 @@
<target>กำลังเชื่อมต่อกับเซิร์ฟเวอร์... (ข้อผิดพลาด: %@)</target> <target>กำลังเชื่อมต่อกับเซิร์ฟเวอร์... (ข้อผิดพลาด: %@)</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connecting to desktop" xml:space="preserve">
<source>Connecting to desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connection" xml:space="preserve"> <trans-unit id="Connection" xml:space="preserve">
<source>Connection</source> <source>Connection</source>
<target>การเชื่อมต่อ</target> <target>การเชื่อมต่อ</target>
@@ -1138,6 +1249,10 @@
<target>ส่งคําขอเชื่อมต่อแล้ว!</target> <target>ส่งคําขอเชื่อมต่อแล้ว!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connection terminated" xml:space="preserve">
<source>Connection terminated</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connection timeout" xml:space="preserve"> <trans-unit id="Connection timeout" xml:space="preserve">
<source>Connection timeout</source> <source>Connection timeout</source>
<target>หมดเวลาการเชื่อมต่อ</target> <target>หมดเวลาการเชื่อมต่อ</target>
@@ -1153,11 +1268,6 @@
<target>ผู้ติดต่อรายนี้มีอยู่แล้ว</target> <target>ผู้ติดต่อรายนี้มีอยู่แล้ว</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Contact and all messages will be deleted - this cannot be undone!" xml:space="preserve">
<source>Contact and all messages will be deleted - this cannot be undone!</source>
<target>ผู้ติดต่อและข้อความทั้งหมดจะถูกลบ - ไม่สามารถยกเลิกได้!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Contact hidden:" xml:space="preserve"> <trans-unit id="Contact hidden:" xml:space="preserve">
<source>Contact hidden:</source> <source>Contact hidden:</source>
<target>ผู้ติดต่อถูกซ่อน:</target> <target>ผู้ติดต่อถูกซ่อน:</target>
@@ -1208,6 +1318,10 @@
<target>รุ่นหลัก: v%@</target> <target>รุ่นหลัก: v%@</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Correct name to %@?" xml:space="preserve">
<source>Correct name to %@?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create" xml:space="preserve"> <trans-unit id="Create" xml:space="preserve">
<source>Create</source> <source>Create</source>
<target>สร้าง</target> <target>สร้าง</target>
@@ -1218,6 +1332,10 @@
<target>สร้างที่อยู่ SimpleX</target> <target>สร้างที่อยู่ SimpleX</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Create a group using a random profile." xml:space="preserve">
<source>Create a group using a random profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create an address to let people connect with you." xml:space="preserve"> <trans-unit id="Create an address to let people connect with you." xml:space="preserve">
<source>Create an address to let people connect with you.</source> <source>Create an address to let people connect with you.</source>
<target>สร้างที่อยู่เพื่อให้ผู้อื่นเชื่อมต่อกับคุณ</target> <target>สร้างที่อยู่เพื่อให้ผู้อื่นเชื่อมต่อกับคุณ</target>
@@ -1228,6 +1346,10 @@
<target>สร้างไฟล์</target> <target>สร้างไฟล์</target>
<note>server test step</note> <note>server test step</note>
</trans-unit> </trans-unit>
<trans-unit id="Create group" xml:space="preserve">
<source>Create group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve"> <trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source> <source>Create group link</source>
<target>สร้างลิงค์กลุ่ม</target> <target>สร้างลิงค์กลุ่ม</target>
@@ -1247,6 +1369,10 @@
<target>สร้างลิงก์เชิญแบบใช้ครั้งเดียว</target> <target>สร้างลิงก์เชิญแบบใช้ครั้งเดียว</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Create profile" xml:space="preserve">
<source>Create profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create queue" xml:space="preserve"> <trans-unit id="Create queue" xml:space="preserve">
<source>Create queue</source> <source>Create queue</source>
<target>สร้างคิว</target> <target>สร้างคิว</target>
@@ -1405,6 +1531,10 @@
<target>ลบ</target> <target>ลบ</target>
<note>chat item action</note> <note>chat item action</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete %lld messages?" xml:space="preserve">
<source>Delete %lld messages?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete Contact" xml:space="preserve"> <trans-unit id="Delete Contact" xml:space="preserve">
<source>Delete Contact</source> <source>Delete Contact</source>
<target>ลบผู้ติดต่อ</target> <target>ลบผู้ติดต่อ</target>
@@ -1430,6 +1560,10 @@
<target>ลบไฟล์ทั้งหมด</target> <target>ลบไฟล์ทั้งหมด</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete and notify contact" xml:space="preserve">
<source>Delete and notify contact</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete archive" xml:space="preserve"> <trans-unit id="Delete archive" xml:space="preserve">
<source>Delete archive</source> <source>Delete archive</source>
<target>ลบที่เก็บถาวร</target> <target>ลบที่เก็บถาวร</target>
@@ -1460,9 +1594,9 @@
<target>ลบผู้ติดต่อ</target> <target>ลบผู้ติดต่อ</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete contact?" xml:space="preserve"> <trans-unit id="Delete contact?&#10;This cannot be undone!" xml:space="preserve">
<source>Delete contact?</source> <source>Delete contact?
<target>ลบผู้ติดต่อ?</target> This cannot be undone!</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete database" xml:space="preserve"> <trans-unit id="Delete database" xml:space="preserve">
@@ -1604,6 +1738,18 @@
<target>คำอธิบาย</target> <target>คำอธิบาย</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Desktop address" xml:space="preserve">
<source>Desktop address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Desktop app version %@ is not compatible with this app." xml:space="preserve">
<source>Desktop app version %@ is not compatible with this app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Desktop devices" xml:space="preserve">
<source>Desktop devices</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Develop" xml:space="preserve"> <trans-unit id="Develop" xml:space="preserve">
<source>Develop</source> <source>Develop</source>
<target>พัฒนา</target> <target>พัฒนา</target>
@@ -1694,18 +1840,16 @@
<target>ตัดการเชื่อมต่อ</target> <target>ตัดการเชื่อมต่อ</target>
<note>server test step</note> <note>server test step</note>
</trans-unit> </trans-unit>
<trans-unit id="Disconnect desktop?" xml:space="preserve">
<source>Disconnect desktop?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Discover and join groups" xml:space="preserve"> <trans-unit id="Discover and join groups" xml:space="preserve">
<source>Discover and join groups</source> <source>Discover and join groups</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Display name" xml:space="preserve"> <trans-unit id="Discover via local network" xml:space="preserve">
<source>Display name</source> <source>Discover via local network</source>
<target>ชื่อที่แสดง</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Display name:" xml:space="preserve">
<source>Display name:</source>
<target>ชื่อที่แสดง:</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve"> <trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve">
@@ -1876,6 +2020,14 @@
<target>ข้อความที่ encrypt: ข้อผิดพลาดที่ไม่คาดคิด</target> <target>ข้อความที่ encrypt: ข้อผิดพลาดที่ไม่คาดคิด</target>
<note>notification</note> <note>notification</note>
</trans-unit> </trans-unit>
<trans-unit id="Encryption re-negotiation error" xml:space="preserve">
<source>Encryption re-negotiation error</source>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Encryption re-negotiation failed." xml:space="preserve">
<source>Encryption re-negotiation failed.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter Passcode" xml:space="preserve"> <trans-unit id="Enter Passcode" xml:space="preserve">
<source>Enter Passcode</source> <source>Enter Passcode</source>
<target>ใส่รหัสผ่าน</target> <target>ใส่รหัสผ่าน</target>
@@ -1886,6 +2038,10 @@
<target>ใส่รหัสผ่านที่ถูกต้อง</target> <target>ใส่รหัสผ่านที่ถูกต้อง</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Enter group name…" xml:space="preserve">
<source>Enter group name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve"> <trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source> <source>Enter passphrase…</source>
<target>ใส่รหัสผ่าน</target> <target>ใส่รหัสผ่าน</target>
@@ -1901,6 +2057,10 @@
<target>ใส่เซิร์ฟเวอร์ด้วยตนเอง</target> <target>ใส่เซิร์ฟเวอร์ด้วยตนเอง</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Enter this device name…" xml:space="preserve">
<source>Enter this device name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter welcome message…" xml:space="preserve"> <trans-unit id="Enter welcome message…" xml:space="preserve">
<source>Enter welcome message…</source> <source>Enter welcome message…</source>
<target>ใส่ข้อความต้อนรับ…</target> <target>ใส่ข้อความต้อนรับ…</target>
@@ -1911,6 +2071,10 @@
<target>ใส่ข้อความต้อนรับ… (ไม่บังคับ)</target> <target>ใส่ข้อความต้อนรับ… (ไม่บังคับ)</target>
<note>placeholder</note> <note>placeholder</note>
</trans-unit> </trans-unit>
<trans-unit id="Enter your name…" xml:space="preserve">
<source>Enter your name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error" xml:space="preserve"> <trans-unit id="Error" xml:space="preserve">
<source>Error</source> <source>Error</source>
<target>ผิดพลาด</target> <target>ผิดพลาด</target>
@@ -2183,6 +2347,10 @@
<target>ออกโดยไม่บันทึก</target> <target>ออกโดยไม่บันทึก</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Expand" xml:space="preserve">
<source>Expand</source>
<note>chat item action</note>
</trans-unit>
<trans-unit id="Export database" xml:space="preserve"> <trans-unit id="Export database" xml:space="preserve">
<source>Export database</source> <source>Export database</source>
<target>ส่งออกฐานข้อมูล</target> <target>ส่งออกฐานข้อมูล</target>
@@ -2213,6 +2381,10 @@
<target>รวดเร็วและไม่ต้องรอจนกว่าผู้ส่งจะออนไลน์!</target> <target>รวดเร็วและไม่ต้องรอจนกว่าผู้ส่งจะออนไลน์!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Faster joining and more reliable messages." xml:space="preserve">
<source>Faster joining and more reliable messages.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve"> <trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source> <source>Favorite</source>
<target>ที่ชอบ</target> <target>ที่ชอบ</target>
@@ -2308,6 +2480,10 @@
<target>สำหรับคอนโซล</target> <target>สำหรับคอนโซล</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Found desktop" xml:space="preserve">
<source>Found desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="French interface" xml:space="preserve"> <trans-unit id="French interface" xml:space="preserve">
<source>French interface</source> <source>French interface</source>
<target>อินเทอร์เฟซภาษาฝรั่งเศส</target> <target>อินเทอร์เฟซภาษาฝรั่งเศส</target>
@@ -2328,6 +2504,10 @@
<target>ชื่อเต็ม:</target> <target>ชื่อเต็ม:</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Fully decentralized visible only to members." xml:space="preserve">
<source>Fully decentralized visible only to members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Fully re-implemented - work in background!" xml:space="preserve"> <trans-unit id="Fully re-implemented - work in background!" xml:space="preserve">
<source>Fully re-implemented - work in background!</source> <source>Fully re-implemented - work in background!</source>
<target>ดำเนินการใหม่อย่างสมบูรณ์ - ทำงานในพื้นหลัง!</target> <target>ดำเนินการใหม่อย่างสมบูรณ์ - ทำงานในพื้นหลัง!</target>
@@ -2348,6 +2528,14 @@
<target>กลุ่ม</target> <target>กลุ่ม</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Group already exists" xml:space="preserve">
<source>Group already exists</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group already exists!" xml:space="preserve">
<source>Group already exists!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group display name" xml:space="preserve"> <trans-unit id="Group display name" xml:space="preserve">
<source>Group display name</source> <source>Group display name</source>
<target>ชื่อกลุ่มที่แสดง</target> <target>ชื่อกลุ่มที่แสดง</target>
@@ -2618,6 +2806,10 @@
<target>ไม่ระบุตัวตน</target> <target>ไม่ระบุตัวตน</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Incognito groups" xml:space="preserve">
<source>Incognito groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incognito mode" xml:space="preserve"> <trans-unit id="Incognito mode" xml:space="preserve">
<source>Incognito mode</source> <source>Incognito mode</source>
<target>โหมดไม่ระบุตัวตน</target> <target>โหมดไม่ระบุตัวตน</target>
@@ -2647,6 +2839,10 @@
<target>เวอร์ชันฐานข้อมูลที่เข้ากันไม่ได้</target> <target>เวอร์ชันฐานข้อมูลที่เข้ากันไม่ได้</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Incompatible version" xml:space="preserve">
<source>Incompatible version</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incorrect passcode" xml:space="preserve"> <trans-unit id="Incorrect passcode" xml:space="preserve">
<source>Incorrect passcode</source> <source>Incorrect passcode</source>
<target>รหัสผ่านไม่ถูกต้อง</target> <target>รหัสผ่านไม่ถูกต้อง</target>
@@ -2694,6 +2890,10 @@
<target>ลิงค์เชื่อมต่อไม่ถูกต้อง</target> <target>ลิงค์เชื่อมต่อไม่ถูกต้อง</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid server address!" xml:space="preserve"> <trans-unit id="Invalid server address!" xml:space="preserve">
<source>Invalid server address!</source> <source>Invalid server address!</source>
<target>ที่อยู่เซิร์ฟเวอร์ไม่ถูกต้อง!</target> <target>ที่อยู่เซิร์ฟเวอร์ไม่ถูกต้อง!</target>
@@ -2784,16 +2984,33 @@
<target>เข้าร่วมกลุ่ม</target> <target>เข้าร่วมกลุ่ม</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Join group?" xml:space="preserve">
<source>Join group?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join incognito" xml:space="preserve"> <trans-unit id="Join incognito" xml:space="preserve">
<source>Join incognito</source> <source>Join incognito</source>
<target>เข้าร่วมแบบไม่ระบุตัวตน</target> <target>เข้าร่วมแบบไม่ระบุตัวตน</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Join with current profile" xml:space="preserve">
<source>Join with current profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join your group?&#10;This is your link for group %@!" xml:space="preserve">
<source>Join your group?
This is your link for group %@!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Joining group" xml:space="preserve"> <trans-unit id="Joining group" xml:space="preserve">
<source>Joining group</source> <source>Joining group</source>
<target>กำลังจะเข้าร่วมกลุ่ม</target> <target>กำลังจะเข้าร่วมกลุ่ม</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Keep the app open to use it from desktop" xml:space="preserve">
<source>Keep the app open to use it from desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep your connections" xml:space="preserve"> <trans-unit id="Keep your connections" xml:space="preserve">
<source>Keep your connections</source> <source>Keep your connections</source>
<target>รักษาการเชื่อมต่อของคุณ</target> <target>รักษาการเชื่อมต่อของคุณ</target>
@@ -2854,6 +3071,18 @@
<target>ข้อจำกัด</target> <target>ข้อจำกัด</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Link mobile and desktop apps! 🔗" xml:space="preserve">
<source>Link mobile and desktop apps! 🔗</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Linked desktop options" xml:space="preserve">
<source>Linked desktop options</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Linked desktops" xml:space="preserve">
<source>Linked desktops</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Live message!" xml:space="preserve"> <trans-unit id="Live message!" xml:space="preserve">
<source>Live message!</source> <source>Live message!</source>
<target>ข้อความสด!</target> <target>ข้อความสด!</target>
@@ -3004,6 +3233,10 @@
<target>ข้อความและไฟล์</target> <target>ข้อความและไฟล์</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Messages from %@ will be shown!" xml:space="preserve">
<source>Messages from %@ will be shown!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve"> <trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source> <source>Migrating database archive…</source>
<target>กำลังย้ายข้อมูลที่เก็บถาวรของฐานข้อมูล…</target> <target>กำลังย้ายข้อมูลที่เก็บถาวรของฐานข้อมูล…</target>
@@ -3196,6 +3429,10 @@
<target>ไม่มีไฟล์ที่ได้รับหรือส่ง</target> <target>ไม่มีไฟล์ที่ได้รับหรือส่ง</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Not compatible!" xml:space="preserve">
<source>Not compatible!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Notifications" xml:space="preserve"> <trans-unit id="Notifications" xml:space="preserve">
<source>Notifications</source> <source>Notifications</source>
<target>การแจ้งเตือน</target> <target>การแจ้งเตือน</target>
@@ -3349,6 +3586,10 @@
<target>เปิดคอนโซลการแชท</target> <target>เปิดคอนโซลการแชท</target>
<note>authentication reason</note> <note>authentication reason</note>
</trans-unit> </trans-unit>
<trans-unit id="Open group" xml:space="preserve">
<source>Open group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve"> <trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source> <source>Open user profiles</source>
<target>เปิดโปรไฟล์ผู้ใช้</target> <target>เปิดโปรไฟล์ผู้ใช้</target>
@@ -3364,11 +3605,6 @@
<target>กำลังเปิดฐานข้อมูล…</target> <target>กำลังเปิดฐานข้อมูล…</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." xml:space="preserve">
<source>Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red.</source>
<target>การเปิดลิงก์ในเบราว์เซอร์อาจลดความเป็นส่วนตัวและความปลอดภัยของการเชื่อมต่อ ลิงก์ SimpleX ที่ไม่น่าเชื่อถือจะเป็นสีแดง</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="PING count" xml:space="preserve"> <trans-unit id="PING count" xml:space="preserve">
<source>PING count</source> <source>PING count</source>
<target>จํานวน PING</target> <target>จํานวน PING</target>
@@ -3414,6 +3650,10 @@
<target>แปะ</target> <target>แปะ</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Paste desktop address" xml:space="preserve">
<source>Paste desktop address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Paste image" xml:space="preserve"> <trans-unit id="Paste image" xml:space="preserve">
<source>Paste image</source> <source>Paste image</source>
<target>แปะภาพ</target> <target>แปะภาพ</target>
@@ -3558,6 +3798,14 @@
<target>รูปโปรไฟล์</target> <target>รูปโปรไฟล์</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Profile name" xml:space="preserve">
<source>Profile name</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile name:" xml:space="preserve">
<source>Profile name:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile password" xml:space="preserve"> <trans-unit id="Profile password" xml:space="preserve">
<source>Profile password</source> <source>Profile password</source>
<target>รหัสผ่านโปรไฟล์</target> <target>รหัสผ่านโปรไฟล์</target>
@@ -3801,6 +4049,14 @@
<target>เจรจา enryption ใหม่หรือไม่?</target> <target>เจรจา enryption ใหม่หรือไม่?</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Repeat connection request?" xml:space="preserve">
<source>Repeat connection request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve"> <trans-unit id="Reply" xml:space="preserve">
<source>Reply</source> <source>Reply</source>
<target>ตอบ</target> <target>ตอบ</target>
@@ -3986,6 +4242,10 @@
<target>สแกนคิวอาร์โค้ด</target> <target>สแกนคิวอาร์โค้ด</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Scan QR code from desktop" xml:space="preserve">
<source>Scan QR code from desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Scan code" xml:space="preserve"> <trans-unit id="Scan code" xml:space="preserve">
<source>Scan code</source> <source>Scan code</source>
<target>สแกนรหัส</target> <target>สแกนรหัส</target>
@@ -4203,6 +4463,10 @@
<target>เซิร์ฟเวอร์</target> <target>เซิร์ฟเวอร์</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Session code" xml:space="preserve">
<source>Session code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set 1 day" xml:space="preserve"> <trans-unit id="Set 1 day" xml:space="preserve">
<source>Set 1 day</source> <source>Set 1 day</source>
<target>ตั้ง 1 วัน</target> <target>ตั้ง 1 วัน</target>
@@ -4510,6 +4774,10 @@
<target>แตะปุ่ม </target> <target>แตะปุ่ม </target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Tap to Connect" xml:space="preserve">
<source>Tap to Connect</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to activate profile." xml:space="preserve"> <trans-unit id="Tap to activate profile." xml:space="preserve">
<source>Tap to activate profile.</source> <source>Tap to activate profile.</source>
<target>แตะเพื่อเปิดใช้งานโปรไฟล์</target> <target>แตะเพื่อเปิดใช้งานโปรไฟล์</target>
@@ -4608,11 +4876,6 @@ It can happen because of some bug or when the connection is compromised.</source
<target>encryption กำลังทำงานและไม่จำเป็นต้องใช้ข้อตกลง encryption ใหม่ อาจทำให้การเชื่อมต่อผิดพลาดได้!</target> <target>encryption กำลังทำงานและไม่จำเป็นต้องใช้ข้อตกลง encryption ใหม่ อาจทำให้การเชื่อมต่อผิดพลาดได้!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="The group is fully decentralized it is visible only to the members." xml:space="preserve">
<source>The group is fully decentralized it is visible only to the members.</source>
<target>กลุ่มมีการกระจายอำนาจอย่างเต็มที่ – มองเห็นได้เฉพาะสมาชิกเท่านั้น</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The hash of the previous message is different." xml:space="preserve"> <trans-unit id="The hash of the previous message is different." xml:space="preserve">
<source>The hash of the previous message is different.</source> <source>The hash of the previous message is different.</source>
<target>แฮชของข้อความก่อนหน้านี้แตกต่างกัน</target> <target>แฮชของข้อความก่อนหน้านี้แตกต่างกัน</target>
@@ -4697,6 +4960,10 @@ It can happen because of some bug or when the connection is compromised.</source
<target>การดำเนินการนี้ไม่สามารถยกเลิกได้ - โปรไฟล์ ผู้ติดต่อ ข้อความ และไฟล์ของคุณจะสูญหายไปอย่างถาวร</target> <target>การดำเนินการนี้ไม่สามารถยกเลิกได้ - โปรไฟล์ ผู้ติดต่อ ข้อความ และไฟล์ของคุณจะสูญหายไปอย่างถาวร</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve"> <trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source> <source>This group has over %lld members, delivery receipts are not sent.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
@@ -4706,6 +4973,14 @@ It can happen because of some bug or when the connection is compromised.</source
<target>ไม่มีกลุ่มนี้แล้ว</target> <target>ไม่มีกลุ่มนี้แล้ว</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="This is your own SimpleX address!" xml:space="preserve">
<source>This is your own SimpleX address!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This is your own one-time link!" xml:space="preserve">
<source>This is your own one-time link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This setting applies to messages in your current chat profile **%@**." xml:space="preserve"> <trans-unit id="This setting applies to messages in your current chat profile **%@**." xml:space="preserve">
<source>This setting applies to messages in your current chat profile **%@**.</source> <source>This setting applies to messages in your current chat profile **%@**.</source>
<target>การตั้งค่านี้ใช้กับข้อความในโปรไฟล์แชทปัจจุบันของคุณ **%@**</target> <target>การตั้งค่านี้ใช้กับข้อความในโปรไฟล์แชทปัจจุบันของคุณ **%@**</target>
@@ -4721,6 +4996,10 @@ It can happen because of some bug or when the connection is compromised.</source
<target>เพื่อการเชื่อมต่อ ผู้ติดต่อของคุณสามารถสแกนคิวอาร์โค้ดหรือใช้ลิงก์ในแอป</target> <target>เพื่อการเชื่อมต่อ ผู้ติดต่อของคุณสามารถสแกนคิวอาร์โค้ดหรือใช้ลิงก์ในแอป</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="To hide unwanted messages." xml:space="preserve">
<source>To hide unwanted messages.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To make a new connection" xml:space="preserve"> <trans-unit id="To make a new connection" xml:space="preserve">
<source>To make a new connection</source> <source>To make a new connection</source>
<target>เพื่อสร้างการเชื่อมต่อใหม่</target> <target>เพื่อสร้างการเชื่อมต่อใหม่</target>
@@ -4802,6 +5081,18 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>ไม่สามารถบันทึกข้อความเสียง</target> <target>ไม่สามารถบันทึกข้อความเสียง</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Unblock" xml:space="preserve">
<source>Unblock</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unblock member" xml:space="preserve">
<source>Unblock member</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unblock member?" xml:space="preserve">
<source>Unblock member?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unexpected error: %@" xml:space="preserve"> <trans-unit id="Unexpected error: %@" xml:space="preserve">
<source>Unexpected error: %@</source> <source>Unexpected error: %@</source>
<target>ข้อผิดพลาดที่ไม่คาดคิด: %@</target> <target>ข้อผิดพลาดที่ไม่คาดคิด: %@</target>
@@ -4864,6 +5155,14 @@ To connect, please ask your contact to create another connection link and check
ในการเชื่อมต่อ โปรดขอให้ผู้ติดต่อของคุณสร้างลิงก์การเชื่อมต่ออื่น และตรวจสอบว่าคุณมีการเชื่อมต่อเครือข่ายที่เสถียร</target> ในการเชื่อมต่อ โปรดขอให้ผู้ติดต่อของคุณสร้างลิงก์การเชื่อมต่ออื่น และตรวจสอบว่าคุณมีการเชื่อมต่อเครือข่ายที่เสถียร</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Unlink" xml:space="preserve">
<source>Unlink</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlink desktop?" xml:space="preserve">
<source>Unlink desktop?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlock" xml:space="preserve"> <trans-unit id="Unlock" xml:space="preserve">
<source>Unlock</source> <source>Unlock</source>
<target>ปลดล็อค</target> <target>ปลดล็อค</target>
@@ -4953,6 +5252,10 @@ To connect, please ask your contact to create another connection link and check
<target>ใช้สำหรับการเชื่อมต่อใหม่</target> <target>ใช้สำหรับการเชื่อมต่อใหม่</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Use from desktop" xml:space="preserve">
<source>Use from desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use iOS call interface" xml:space="preserve"> <trans-unit id="Use iOS call interface" xml:space="preserve">
<source>Use iOS call interface</source> <source>Use iOS call interface</source>
<target>ใช้อินเทอร์เฟซการโทร iOS</target> <target>ใช้อินเทอร์เฟซการโทร iOS</target>
@@ -4982,11 +5285,23 @@ To connect, please ask your contact to create another connection link and check
<target>กำลังใช้เซิร์ฟเวอร์ SimpleX Chat อยู่</target> <target>กำลังใช้เซิร์ฟเวอร์ SimpleX Chat อยู่</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Verify code with desktop" xml:space="preserve">
<source>Verify code with desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify connection" xml:space="preserve">
<source>Verify connection</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify connection security" xml:space="preserve"> <trans-unit id="Verify connection security" xml:space="preserve">
<source>Verify connection security</source> <source>Verify connection security</source>
<target>ตรวจสอบความปลอดภัยในการเชื่อมต่อ</target> <target>ตรวจสอบความปลอดภัยในการเชื่อมต่อ</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Verify connections" xml:space="preserve">
<source>Verify connections</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve"> <trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source> <source>Verify security code</source>
<target>ตรวจสอบรหัสความปลอดภัย</target> <target>ตรวจสอบรหัสความปลอดภัย</target>
@@ -4997,6 +5312,10 @@ To connect, please ask your contact to create another connection link and check
<target>ผ่านเบราว์เซอร์</target> <target>ผ่านเบราว์เซอร์</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Via secure quantum resistant protocol." xml:space="preserve">
<source>Via secure quantum resistant protocol.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video call" xml:space="preserve"> <trans-unit id="Video call" xml:space="preserve">
<source>Video call</source> <source>Video call</source>
<target>การสนทนาทางวิดีโอ</target> <target>การสนทนาทางวิดีโอ</target>
@@ -5047,6 +5366,10 @@ To connect, please ask your contact to create another connection link and check
<target>ข้อความเสียง…</target> <target>ข้อความเสียง…</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Waiting for desktop..." xml:space="preserve">
<source>Waiting for desktop...</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Waiting for file" xml:space="preserve"> <trans-unit id="Waiting for file" xml:space="preserve">
<source>Waiting for file</source> <source>Waiting for file</source>
<target>กำลังรอไฟล์</target> <target>กำลังรอไฟล์</target>
@@ -5147,6 +5470,35 @@ To connect, please ask your contact to create another connection link and check
<target>คุณได้เชื่อมต่อกับ %@ แล้ว</target> <target>คุณได้เชื่อมต่อกับ %@ แล้ว</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You are already connecting to %@." xml:space="preserve">
<source>You are already connecting to %@.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already connecting via this one-time link!" xml:space="preserve">
<source>You are already connecting via this one-time link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already in group %@." xml:space="preserve">
<source>You are already in group %@.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group %@." xml:space="preserve">
<source>You are already joining the group %@.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group via this link!" xml:space="preserve">
<source>You are already joining the group via this link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group via this link." xml:space="preserve">
<source>You are already joining the group via this link.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group!&#10;Repeat join request?" xml:space="preserve">
<source>You are already joining the group!
Repeat join request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are connected to the server used to receive messages from this contact." xml:space="preserve"> <trans-unit id="You are connected to the server used to receive messages from this contact." xml:space="preserve">
<source>You are connected to the server used to receive messages from this contact.</source> <source>You are connected to the server used to receive messages from this contact.</source>
<target>คุณเชื่อมต่อกับเซิร์ฟเวอร์ที่ใช้รับข้อความจากผู้ติดต่อนี้</target> <target>คุณเชื่อมต่อกับเซิร์ฟเวอร์ที่ใช้รับข้อความจากผู้ติดต่อนี้</target>
@@ -5242,6 +5594,15 @@ To connect, please ask your contact to create another connection link and check
<target>เราไม่สามารถตรวจสอบคุณได้ กรุณาลองอีกครั้ง.</target> <target>เราไม่สามารถตรวจสอบคุณได้ กรุณาลองอีกครั้ง.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You have already requested connection via this address!" xml:space="preserve">
<source>You have already requested connection via this address!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You have already requested connection!&#10;Repeat connection request?" xml:space="preserve">
<source>You have already requested connection!
Repeat connection request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You have no chats" xml:space="preserve"> <trans-unit id="You have no chats" xml:space="preserve">
<source>You have no chats</source> <source>You have no chats</source>
<target>คุณไม่มีการแชท</target> <target>คุณไม่มีการแชท</target>
@@ -5291,6 +5652,10 @@ To connect, please ask your contact to create another connection link and check
<target>คุณจะเชื่อมต่อกับกลุ่มเมื่ออุปกรณ์โฮสต์ของกลุ่มออนไลน์อยู่ โปรดรอหรือตรวจสอบภายหลัง!</target> <target>คุณจะเชื่อมต่อกับกลุ่มเมื่ออุปกรณ์โฮสต์ของกลุ่มออนไลน์อยู่ โปรดรอหรือตรวจสอบภายหลัง!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You will be connected when group link host's device is online, please wait or check later!" xml:space="preserve">
<source>You will be connected when group link host's device is online, please wait or check later!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will be connected when your connection request is accepted, please wait or check later!" xml:space="preserve"> <trans-unit id="You will be connected when your connection request is accepted, please wait or check later!" xml:space="preserve">
<source>You will be connected when your connection request is accepted, please wait or check later!</source> <source>You will be connected when your connection request is accepted, please wait or check later!</source>
<target>คุณจะเชื่อมต่อเมื่อคำขอเชื่อมต่อของคุณได้รับการยอมรับ โปรดรอหรือตรวจสอบในภายหลัง!</target> <target>คุณจะเชื่อมต่อเมื่อคำขอเชื่อมต่อของคุณได้รับการยอมรับ โปรดรอหรือตรวจสอบในภายหลัง!</target>
@@ -5306,9 +5671,8 @@ To connect, please ask your contact to create another connection link and check
<target>คุณจะต้องตรวจสอบสิทธิ์เมื่อคุณเริ่มหรือกลับมาใช้แอปพลิเคชันอีกครั้งหลังจากผ่านไป 30 วินาทีในพื้นหลัง</target> <target>คุณจะต้องตรวจสอบสิทธิ์เมื่อคุณเริ่มหรือกลับมาใช้แอปพลิเคชันอีกครั้งหลังจากผ่านไป 30 วินาทีในพื้นหลัง</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You will join a group this link refers to and connect to its group members." xml:space="preserve"> <trans-unit id="You will connect to all group members." xml:space="preserve">
<source>You will join a group this link refers to and connect to its group members.</source> <source>You will connect to all group members.</source>
<target>คุณจะเข้าร่วมกลุ่มที่ลิงก์นี้อ้างถึงและเชื่อมต่อกับสมาชิกในกลุ่ม</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve"> <trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve">
@@ -5376,11 +5740,6 @@ To connect, please ask your contact to create another connection link and check
<target>ฐานข้อมูลการแชทของคุณไม่ได้ถูก encrypt - ตั้งรหัสผ่านเพื่อ encrypt</target> <target>ฐานข้อมูลการแชทของคุณไม่ได้ถูก encrypt - ตั้งรหัสผ่านเพื่อ encrypt</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Your chat profile will be sent to group members" xml:space="preserve">
<source>Your chat profile will be sent to group members</source>
<target>โปรไฟล์การแชทของคุณจะถูกส่งไปยังสมาชิกในกลุ่ม</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profiles" xml:space="preserve"> <trans-unit id="Your chat profiles" xml:space="preserve">
<source>Your chat profiles</source> <source>Your chat profiles</source>
<target>โปรไฟล์แชทของคุณ</target> <target>โปรไฟล์แชทของคุณ</target>
@@ -5435,6 +5794,10 @@ You can change it in Settings.</source>
<target>ความเป็นส่วนตัวของคุณ</target> <target>ความเป็นส่วนตัวของคุณ</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Your profile" xml:space="preserve">
<source>Your profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your profile **%@** will be shared." xml:space="preserve"> <trans-unit id="Your profile **%@** will be shared." xml:space="preserve">
<source>Your profile **%@** will be shared.</source> <source>Your profile **%@** will be shared.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
@@ -5526,11 +5889,19 @@ SimpleX servers cannot see your profile.</source>
<target>เสมอ</target> <target>เสมอ</target>
<note>pref value</note> <note>pref value</note>
</trans-unit> </trans-unit>
<trans-unit id="and %lld other events" xml:space="preserve">
<source>and %lld other events</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="audio call (not e2e encrypted)" xml:space="preserve"> <trans-unit id="audio call (not e2e encrypted)" xml:space="preserve">
<source>audio call (not e2e encrypted)</source> <source>audio call (not e2e encrypted)</source>
<target>การโทรด้วยเสียง (ไม่ได้ encrypt จากต้นจนจบ)</target> <target>การโทรด้วยเสียง (ไม่ได้ encrypt จากต้นจนจบ)</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="author" xml:space="preserve">
<source>author</source>
<note>member role</note>
</trans-unit>
<trans-unit id="bad message ID" xml:space="preserve"> <trans-unit id="bad message ID" xml:space="preserve">
<source>bad message ID</source> <source>bad message ID</source>
<target>ID ข้อความที่ไม่ดี</target> <target>ID ข้อความที่ไม่ดี</target>
@@ -5541,6 +5912,10 @@ SimpleX servers cannot see your profile.</source>
<target>แฮชข้อความไม่ดี</target> <target>แฮชข้อความไม่ดี</target>
<note>integrity error chat item</note> <note>integrity error chat item</note>
</trans-unit> </trans-unit>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve"> <trans-unit id="bold" xml:space="preserve">
<source>bold</source> <source>bold</source>
<target>ตัวหนา</target> <target>ตัวหนา</target>
@@ -5710,6 +6085,10 @@ SimpleX servers cannot see your profile.</source>
<target>ลบแล้ว</target> <target>ลบแล้ว</target>
<note>deleted chat item</note> <note>deleted chat item</note>
</trans-unit> </trans-unit>
<trans-unit id="deleted contact" xml:space="preserve">
<source>deleted contact</source>
<note>rcv direct event chat item</note>
</trans-unit>
<trans-unit id="deleted group" xml:space="preserve"> <trans-unit id="deleted group" xml:space="preserve">
<source>deleted group</source> <source>deleted group</source>
<target>กลุ่มที่ถูกลบ</target> <target>กลุ่มที่ถูกลบ</target>
@@ -5992,7 +6371,8 @@ SimpleX servers cannot see your profile.</source>
<source>off</source> <source>off</source>
<target>ปิด</target> <target>ปิด</target>
<note>enabled status <note>enabled status
group pref value</note> group pref value
time to disappear</note>
</trans-unit> </trans-unit>
<trans-unit id="offered %@" xml:space="preserve"> <trans-unit id="offered %@" xml:space="preserve">
<source>offered %@</source> <source>offered %@</source>
@@ -6009,11 +6389,6 @@ SimpleX servers cannot see your profile.</source>
<target>เปิด</target> <target>เปิด</target>
<note>group pref value</note> <note>group pref value</note>
</trans-unit> </trans-unit>
<trans-unit id="or chat with the developers" xml:space="preserve">
<source>or chat with the developers</source>
<target>หรือแชทกับนักพัฒนาแอป</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="owner" xml:space="preserve"> <trans-unit id="owner" xml:space="preserve">
<source>owner</source> <source>owner</source>
<target>เจ้าของ</target> <target>เจ้าของ</target>
@@ -6103,6 +6478,10 @@ SimpleX servers cannot see your profile.</source>
<target>อัปเดตโปรไฟล์กลุ่มแล้ว</target> <target>อัปเดตโปรไฟล์กลุ่มแล้ว</target>
<note>rcv group event chat item</note> <note>rcv group event chat item</note>
</trans-unit> </trans-unit>
<trans-unit id="v%@" xml:space="preserve">
<source>v%@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="v%@ (%@)" xml:space="preserve"> <trans-unit id="v%@ (%@)" xml:space="preserve">
<source>v%@ (%@)</source> <source>v%@ (%@)</source>
<target>v%@ (%@)</target> <target>v%@ (%@)</target>
@@ -6240,6 +6619,10 @@ SimpleX servers cannot see your profile.</source>
<target>SimpleX ใช้ Face ID สำหรับการรับรองความถูกต้องในเครื่อง</target> <target>SimpleX ใช้ Face ID สำหรับการรับรองความถูกต้องในเครื่อง</target>
<note>Privacy - Face ID Usage Description</note> <note>Privacy - Face ID Usage Description</note>
</trans-unit> </trans-unit>
<trans-unit id="NSLocalNetworkUsageDescription" xml:space="preserve">
<source>SimpleX uses local network access to allow using user chat profile via desktop app on the same network.</source>
<note>Privacy - Local Network Usage Description</note>
</trans-unit>
<trans-unit id="NSMicrophoneUsageDescription" xml:space="preserve"> <trans-unit id="NSMicrophoneUsageDescription" xml:space="preserve">
<source>SimpleX needs microphone access for audio and video calls, and to record voice messages.</source> <source>SimpleX needs microphone access for audio and video calls, and to record voice messages.</source>
<target>SimpleX ต้องการการเข้าถึงไมโครโฟนสำหรับการโทรด้วยเสียงและวิดีโอ และเพื่อบันทึกข้อความเสียง</target> <target>SimpleX ต้องการการเข้าถึงไมโครโฟนสำหรับการโทรด้วยเสียงและวิดีโอ และเพื่อบันทึกข้อความเสียง</target>
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
@@ -87,6 +87,10 @@
<target>%@ / %@</target> <target>%@ / %@</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="%@ and %@" xml:space="preserve">
<source>%@ and %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ and %@ connected" xml:space="preserve"> <trans-unit id="%@ and %@ connected" xml:space="preserve">
<source>%@ and %@ connected</source> <source>%@ and %@ connected</source>
<target>%@ і %@ підключено</target> <target>%@ і %@ підключено</target>
@@ -97,6 +101,10 @@
<target>%1$@ за %2$@:</target> <target>%1$@ за %2$@:</target>
<note>copied message info, &lt;sender&gt; at &lt;time&gt;</note> <note>copied message info, &lt;sender&gt; at &lt;time&gt;</note>
</trans-unit> </trans-unit>
<trans-unit id="%@ connected" xml:space="preserve">
<source>%@ connected</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve"> <trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source> <source>%@ is connected!</source>
<target>%@ підключено!</target> <target>%@ підключено!</target>
@@ -122,6 +130,10 @@
<target>%@ хоче підключитися!</target> <target>%@ хоче підключитися!</target>
<note>notification title</note> <note>notification title</note>
</trans-unit> </trans-unit>
<trans-unit id="%@, %@ and %lld members" xml:space="preserve">
<source>%@, %@ and %lld members</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@, %@ and %lld other members connected" xml:space="preserve"> <trans-unit id="%@, %@ and %lld other members connected" xml:space="preserve">
<source>%@, %@ and %lld other members connected</source> <source>%@, %@ and %lld other members connected</source>
<target>%@, %@ та %lld інші підключені учасники</target> <target>%@, %@ та %lld інші підключені учасники</target>
@@ -187,11 +199,27 @@
<target>%lld файл(и) загальним розміром %@</target> <target>%lld файл(и) загальним розміром %@</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="%lld group events" xml:space="preserve">
<source>%lld group events</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld members" xml:space="preserve"> <trans-unit id="%lld members" xml:space="preserve">
<source>%lld members</source> <source>%lld members</source>
<target>%lld учасників</target> <target>%lld учасників</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="%lld messages blocked" xml:space="preserve">
<source>%lld messages blocked</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld messages marked deleted" xml:space="preserve">
<source>%lld messages marked deleted</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld messages moderated by %@" xml:space="preserve">
<source>%lld messages moderated by %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve"> <trans-unit id="%lld minutes" xml:space="preserve">
<source>%lld minutes</source> <source>%lld minutes</source>
<target>%lld хвилин</target> <target>%lld хвилин</target>
@@ -261,6 +289,14 @@
<target>(</target> <target>(</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="(new)" xml:space="preserve">
<source>(new)</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="(this device v%@)" xml:space="preserve">
<source>(this device v%@)</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=")" xml:space="preserve"> <trans-unit id=")" xml:space="preserve">
<source>)</source> <source>)</source>
<target>)</target> <target>)</target>
@@ -346,6 +382,12 @@
- і багато іншого!</target> - і багато іншого!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="- optionally notify deleted contacts.&#10;- profile names with spaces.&#10;- and more!" xml:space="preserve">
<source>- optionally notify deleted contacts.
- profile names with spaces.
- and more!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="- voice messages up to 5 minutes.&#10;- custom time to disappear.&#10;- editing history." xml:space="preserve"> <trans-unit id="- voice messages up to 5 minutes.&#10;- custom time to disappear.&#10;- editing history." xml:space="preserve">
<source>- voice messages up to 5 minutes. <source>- voice messages up to 5 minutes.
- custom time to disappear. - custom time to disappear.
@@ -360,6 +402,10 @@
<target>.</target> <target>.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="0 sec" xml:space="preserve">
<source>0 sec</source>
<note>time to disappear</note>
</trans-unit>
<trans-unit id="0s" xml:space="preserve"> <trans-unit id="0s" xml:space="preserve">
<source>0s</source> <source>0s</source>
<target>0с</target> <target>0с</target>
@@ -585,6 +631,10 @@
<target>Всі повідомлення будуть видалені - це неможливо скасувати! Повідомлення будуть видалені ТІЛЬКИ для вас.</target> <target>Всі повідомлення будуть видалені - це неможливо скасувати! Повідомлення будуть видалені ТІЛЬКИ для вас.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="All new messages from %@ will be hidden!" xml:space="preserve">
<source>All new messages from %@ will be hidden!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts will remain connected." xml:space="preserve"> <trans-unit id="All your contacts will remain connected." xml:space="preserve">
<source>All your contacts will remain connected.</source> <source>All your contacts will remain connected.</source>
<target>Всі ваші контакти залишаться на зв'язку.</target> <target>Всі ваші контакти залишаться на зв'язку.</target>
@@ -690,6 +740,14 @@
<target>Вже підключено?</target> <target>Вже підключено?</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Already connecting!" xml:space="preserve">
<source>Already connecting!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Already joining the group!" xml:space="preserve">
<source>Already joining the group!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Always use relay" xml:space="preserve"> <trans-unit id="Always use relay" xml:space="preserve">
<source>Always use relay</source> <source>Always use relay</source>
<target>Завжди використовуйте реле</target> <target>Завжди використовуйте реле</target>
@@ -809,6 +867,10 @@
<target>Назад</target> <target>Назад</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Bad desktop address" xml:space="preserve">
<source>Bad desktop address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Bad message ID" xml:space="preserve"> <trans-unit id="Bad message ID" xml:space="preserve">
<source>Bad message ID</source> <source>Bad message ID</source>
<target>Неправильний ідентифікатор повідомлення</target> <target>Неправильний ідентифікатор повідомлення</target>
@@ -819,11 +881,31 @@
<target>Поганий хеш повідомлення</target> <target>Поганий хеш повідомлення</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Better groups" xml:space="preserve">
<source>Better groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Better messages" xml:space="preserve"> <trans-unit id="Better messages" xml:space="preserve">
<source>Better messages</source> <source>Better messages</source>
<target>Кращі повідомлення</target> <target>Кращі повідомлення</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Block" xml:space="preserve">
<source>Block</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block group members" xml:space="preserve">
<source>Block group members</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block member" xml:space="preserve">
<source>Block member</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Block member?" xml:space="preserve">
<source>Block member?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve">
<source>Both you and your contact can add message reactions.</source> <source>Both you and your contact can add message reactions.</source>
<target>Реакції на повідомлення можете додавати як ви, так і ваш контакт.</target> <target>Реакції на повідомлення можете додавати як ви, так і ваш контакт.</target>
@@ -1084,9 +1166,8 @@
<target>Підключіться</target> <target>Підключіться</target>
<note>server test step</note> <note>server test step</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect directly" xml:space="preserve"> <trans-unit id="Connect automatically" xml:space="preserve">
<source>Connect directly</source> <source>Connect automatically</source>
<target>Підключіться безпосередньо</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect incognito" xml:space="preserve"> <trans-unit id="Connect incognito" xml:space="preserve">
@@ -1094,14 +1175,26 @@
<target>Підключайтеся інкогніто</target> <target>Підключайтеся інкогніто</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect via contact link" xml:space="preserve"> <trans-unit id="Connect to desktop" xml:space="preserve">
<source>Connect via contact link</source> <source>Connect to desktop</source>
<target>Підключіться за контактним посиланням</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect via group link?" xml:space="preserve"> <trans-unit id="Connect to yourself?" xml:space="preserve">
<source>Connect via group link?</source> <source>Connect to yourself?</source>
<target>Підключитися за груповим посиланням?</target> <note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect to yourself?&#10;This is your own SimpleX address!" xml:space="preserve">
<source>Connect to yourself?
This is your own SimpleX address!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect to yourself?&#10;This is your own one-time link!" xml:space="preserve">
<source>Connect to yourself?
This is your own one-time link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect via contact address" xml:space="preserve">
<source>Connect via contact address</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect via link" xml:space="preserve"> <trans-unit id="Connect via link" xml:space="preserve">
@@ -1119,6 +1212,18 @@
<target>Під'єднатися за одноразовим посиланням</target> <target>Під'єднатися за одноразовим посиланням</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connect with %@" xml:space="preserve">
<source>Connect with %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connected desktop" xml:space="preserve">
<source>Connected desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connected to desktop" xml:space="preserve">
<source>Connected to desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connecting server…" xml:space="preserve"> <trans-unit id="Connecting server…" xml:space="preserve">
<source>Connecting to server…</source> <source>Connecting to server…</source>
<target>Підключення до сервера…</target> <target>Підключення до сервера…</target>
@@ -1129,6 +1234,10 @@
<target>Підключення до сервера... (помилка: %@)</target> <target>Підключення до сервера... (помилка: %@)</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connecting to desktop" xml:space="preserve">
<source>Connecting to desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connection" xml:space="preserve"> <trans-unit id="Connection" xml:space="preserve">
<source>Connection</source> <source>Connection</source>
<target>Підключення</target> <target>Підключення</target>
@@ -1149,6 +1258,10 @@
<target>Запит на підключення відправлено!</target> <target>Запит на підключення відправлено!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Connection terminated" xml:space="preserve">
<source>Connection terminated</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connection timeout" xml:space="preserve"> <trans-unit id="Connection timeout" xml:space="preserve">
<source>Connection timeout</source> <source>Connection timeout</source>
<target>Тайм-аут з'єднання</target> <target>Тайм-аут з'єднання</target>
@@ -1164,11 +1277,6 @@
<target>Контакт вже існує</target> <target>Контакт вже існує</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Contact and all messages will be deleted - this cannot be undone!" xml:space="preserve">
<source>Contact and all messages will be deleted - this cannot be undone!</source>
<target>Контакт і всі повідомлення будуть видалені - це неможливо скасувати!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Contact hidden:" xml:space="preserve"> <trans-unit id="Contact hidden:" xml:space="preserve">
<source>Contact hidden:</source> <source>Contact hidden:</source>
<target>Контакт приховано:</target> <target>Контакт приховано:</target>
@@ -1219,6 +1327,10 @@
<target>Основна версія: v%@</target> <target>Основна версія: v%@</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Correct name to %@?" xml:space="preserve">
<source>Correct name to %@?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create" xml:space="preserve"> <trans-unit id="Create" xml:space="preserve">
<source>Create</source> <source>Create</source>
<target>Створити</target> <target>Створити</target>
@@ -1229,6 +1341,10 @@
<target>Створіть адресу SimpleX</target> <target>Створіть адресу SimpleX</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Create a group using a random profile." xml:space="preserve">
<source>Create a group using a random profile.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create an address to let people connect with you." xml:space="preserve"> <trans-unit id="Create an address to let people connect with you." xml:space="preserve">
<source>Create an address to let people connect with you.</source> <source>Create an address to let people connect with you.</source>
<target>Створіть адресу, щоб люди могли з вами зв'язатися.</target> <target>Створіть адресу, щоб люди могли з вами зв'язатися.</target>
@@ -1239,6 +1355,10 @@
<target>Створити файл</target> <target>Створити файл</target>
<note>server test step</note> <note>server test step</note>
</trans-unit> </trans-unit>
<trans-unit id="Create group" xml:space="preserve">
<source>Create group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create group link" xml:space="preserve"> <trans-unit id="Create group link" xml:space="preserve">
<source>Create group link</source> <source>Create group link</source>
<target>Створити групове посилання</target> <target>Створити групове посилання</target>
@@ -1258,6 +1378,10 @@
<target>Створіть одноразове посилання-запрошення</target> <target>Створіть одноразове посилання-запрошення</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Create profile" xml:space="preserve">
<source>Create profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create queue" xml:space="preserve"> <trans-unit id="Create queue" xml:space="preserve">
<source>Create queue</source> <source>Create queue</source>
<target>Створити чергу</target> <target>Створити чергу</target>
@@ -1416,6 +1540,10 @@
<target>Видалити</target> <target>Видалити</target>
<note>chat item action</note> <note>chat item action</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete %lld messages?" xml:space="preserve">
<source>Delete %lld messages?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete Contact" xml:space="preserve"> <trans-unit id="Delete Contact" xml:space="preserve">
<source>Delete Contact</source> <source>Delete Contact</source>
<target>Видалити контакт</target> <target>Видалити контакт</target>
@@ -1441,6 +1569,10 @@
<target>Видалити всі файли</target> <target>Видалити всі файли</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete and notify contact" xml:space="preserve">
<source>Delete and notify contact</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete archive" xml:space="preserve"> <trans-unit id="Delete archive" xml:space="preserve">
<source>Delete archive</source> <source>Delete archive</source>
<target>Видалити архів</target> <target>Видалити архів</target>
@@ -1471,9 +1603,9 @@
<target>Видалити контакт</target> <target>Видалити контакт</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete contact?" xml:space="preserve"> <trans-unit id="Delete contact?&#10;This cannot be undone!" xml:space="preserve">
<source>Delete contact?</source> <source>Delete contact?
<target>Видалити контакт?</target> This cannot be undone!</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Delete database" xml:space="preserve"> <trans-unit id="Delete database" xml:space="preserve">
@@ -1616,6 +1748,18 @@
<target>Опис</target> <target>Опис</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Desktop address" xml:space="preserve">
<source>Desktop address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Desktop app version %@ is not compatible with this app." xml:space="preserve">
<source>Desktop app version %@ is not compatible with this app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Desktop devices" xml:space="preserve">
<source>Desktop devices</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Develop" xml:space="preserve"> <trans-unit id="Develop" xml:space="preserve">
<source>Develop</source> <source>Develop</source>
<target>Розробник</target> <target>Розробник</target>
@@ -1706,18 +1850,16 @@
<target>Від'єднати</target> <target>Від'єднати</target>
<note>server test step</note> <note>server test step</note>
</trans-unit> </trans-unit>
<trans-unit id="Disconnect desktop?" xml:space="preserve">
<source>Disconnect desktop?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Discover and join groups" xml:space="preserve"> <trans-unit id="Discover and join groups" xml:space="preserve">
<source>Discover and join groups</source> <source>Discover and join groups</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Display name" xml:space="preserve"> <trans-unit id="Discover via local network" xml:space="preserve">
<source>Display name</source> <source>Discover via local network</source>
<target>Відображуване ім'я</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Display name:" xml:space="preserve">
<source>Display name:</source>
<target>Відображуване ім'я:</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve"> <trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve">
@@ -1888,6 +2030,14 @@
<target>Зашифроване повідомлення: несподівана помилка</target> <target>Зашифроване повідомлення: несподівана помилка</target>
<note>notification</note> <note>notification</note>
</trans-unit> </trans-unit>
<trans-unit id="Encryption re-negotiation error" xml:space="preserve">
<source>Encryption re-negotiation error</source>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Encryption re-negotiation failed." xml:space="preserve">
<source>Encryption re-negotiation failed.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter Passcode" xml:space="preserve"> <trans-unit id="Enter Passcode" xml:space="preserve">
<source>Enter Passcode</source> <source>Enter Passcode</source>
<target>Введіть пароль</target> <target>Введіть пароль</target>
@@ -1898,6 +2048,10 @@
<target>Введіть правильну парольну фразу.</target> <target>Введіть правильну парольну фразу.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Enter group name…" xml:space="preserve">
<source>Enter group name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter passphrase…" xml:space="preserve"> <trans-unit id="Enter passphrase…" xml:space="preserve">
<source>Enter passphrase…</source> <source>Enter passphrase…</source>
<target>Введіть пароль…</target> <target>Введіть пароль…</target>
@@ -1913,6 +2067,10 @@
<target>Увійдіть на сервер вручну</target> <target>Увійдіть на сервер вручну</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Enter this device name…" xml:space="preserve">
<source>Enter this device name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter welcome message…" xml:space="preserve"> <trans-unit id="Enter welcome message…" xml:space="preserve">
<source>Enter welcome message…</source> <source>Enter welcome message…</source>
<target>Введіть вітальне повідомлення…</target> <target>Введіть вітальне повідомлення…</target>
@@ -1923,6 +2081,10 @@
<target>Введіть вітальне повідомлення... (необов'язково)</target> <target>Введіть вітальне повідомлення... (необов'язково)</target>
<note>placeholder</note> <note>placeholder</note>
</trans-unit> </trans-unit>
<trans-unit id="Enter your name…" xml:space="preserve">
<source>Enter your name…</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error" xml:space="preserve"> <trans-unit id="Error" xml:space="preserve">
<source>Error</source> <source>Error</source>
<target>Помилка</target> <target>Помилка</target>
@@ -2195,6 +2357,10 @@
<target>Вихід без збереження</target> <target>Вихід без збереження</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Expand" xml:space="preserve">
<source>Expand</source>
<note>chat item action</note>
</trans-unit>
<trans-unit id="Export database" xml:space="preserve"> <trans-unit id="Export database" xml:space="preserve">
<source>Export database</source> <source>Export database</source>
<target>Експорт бази даних</target> <target>Експорт бази даних</target>
@@ -2225,6 +2391,10 @@
<target>Швидко і без очікування, поки відправник буде онлайн!</target> <target>Швидко і без очікування, поки відправник буде онлайн!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Faster joining and more reliable messages." xml:space="preserve">
<source>Faster joining and more reliable messages.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve"> <trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source> <source>Favorite</source>
<target>Улюблений</target> <target>Улюблений</target>
@@ -2320,6 +2490,10 @@
<target>Для консолі</target> <target>Для консолі</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Found desktop" xml:space="preserve">
<source>Found desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="French interface" xml:space="preserve"> <trans-unit id="French interface" xml:space="preserve">
<source>French interface</source> <source>French interface</source>
<target>Французький інтерфейс</target> <target>Французький інтерфейс</target>
@@ -2340,6 +2514,10 @@
<target>Повне ім'я:</target> <target>Повне ім'я:</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Fully decentralized visible only to members." xml:space="preserve">
<source>Fully decentralized visible only to members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Fully re-implemented - work in background!" xml:space="preserve"> <trans-unit id="Fully re-implemented - work in background!" xml:space="preserve">
<source>Fully re-implemented - work in background!</source> <source>Fully re-implemented - work in background!</source>
<target>Повністю перероблено - робота у фоновому режимі!</target> <target>Повністю перероблено - робота у фоновому режимі!</target>
@@ -2360,6 +2538,14 @@
<target>Група</target> <target>Група</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Group already exists" xml:space="preserve">
<source>Group already exists</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group already exists!" xml:space="preserve">
<source>Group already exists!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group display name" xml:space="preserve"> <trans-unit id="Group display name" xml:space="preserve">
<source>Group display name</source> <source>Group display name</source>
<target>Назва групи для відображення</target> <target>Назва групи для відображення</target>
@@ -2630,6 +2816,10 @@
<target>Інкогніто</target> <target>Інкогніто</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Incognito groups" xml:space="preserve">
<source>Incognito groups</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incognito mode" xml:space="preserve"> <trans-unit id="Incognito mode" xml:space="preserve">
<source>Incognito mode</source> <source>Incognito mode</source>
<target>Режим інкогніто</target> <target>Режим інкогніто</target>
@@ -2660,6 +2850,10 @@
<target>Несумісна версія бази даних</target> <target>Несумісна версія бази даних</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Incompatible version" xml:space="preserve">
<source>Incompatible version</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Incorrect passcode" xml:space="preserve"> <trans-unit id="Incorrect passcode" xml:space="preserve">
<source>Incorrect passcode</source> <source>Incorrect passcode</source>
<target>Неправильний пароль</target> <target>Неправильний пароль</target>
@@ -2707,6 +2901,10 @@
<target>Неправильне посилання для підключення</target> <target>Неправильне посилання для підключення</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
<source>Invalid name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid server address!" xml:space="preserve"> <trans-unit id="Invalid server address!" xml:space="preserve">
<source>Invalid server address!</source> <source>Invalid server address!</source>
<target>Неправильна адреса сервера!</target> <target>Неправильна адреса сервера!</target>
@@ -2798,16 +2996,33 @@
<target>Приєднуйтесь до групи</target> <target>Приєднуйтесь до групи</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Join group?" xml:space="preserve">
<source>Join group?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join incognito" xml:space="preserve"> <trans-unit id="Join incognito" xml:space="preserve">
<source>Join incognito</source> <source>Join incognito</source>
<target>Приєднуйтесь інкогніто</target> <target>Приєднуйтесь інкогніто</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Join with current profile" xml:space="preserve">
<source>Join with current profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join your group?&#10;This is your link for group %@!" xml:space="preserve">
<source>Join your group?
This is your link for group %@!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Joining group" xml:space="preserve"> <trans-unit id="Joining group" xml:space="preserve">
<source>Joining group</source> <source>Joining group</source>
<target>Приєднання до групи</target> <target>Приєднання до групи</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Keep the app open to use it from desktop" xml:space="preserve">
<source>Keep the app open to use it from desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep your connections" xml:space="preserve"> <trans-unit id="Keep your connections" xml:space="preserve">
<source>Keep your connections</source> <source>Keep your connections</source>
<target>Зберігайте свої зв'язки</target> <target>Зберігайте свої зв'язки</target>
@@ -2868,6 +3083,18 @@
<target>Обмеження</target> <target>Обмеження</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Link mobile and desktop apps! 🔗" xml:space="preserve">
<source>Link mobile and desktop apps! 🔗</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Linked desktop options" xml:space="preserve">
<source>Linked desktop options</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Linked desktops" xml:space="preserve">
<source>Linked desktops</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Live message!" xml:space="preserve"> <trans-unit id="Live message!" xml:space="preserve">
<source>Live message!</source> <source>Live message!</source>
<target>Живе повідомлення!</target> <target>Живе повідомлення!</target>
@@ -3018,6 +3245,10 @@
<target>Повідомлення та файли</target> <target>Повідомлення та файли</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Messages from %@ will be shown!" xml:space="preserve">
<source>Messages from %@ will be shown!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Migrating database archive…" xml:space="preserve"> <trans-unit id="Migrating database archive…" xml:space="preserve">
<source>Migrating database archive…</source> <source>Migrating database archive…</source>
<target>Перенесення архіву бази даних…</target> <target>Перенесення архіву бази даних…</target>
@@ -3212,6 +3443,10 @@
<target>Немає отриманих або відправлених файлів</target> <target>Немає отриманих або відправлених файлів</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Not compatible!" xml:space="preserve">
<source>Not compatible!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Notifications" xml:space="preserve"> <trans-unit id="Notifications" xml:space="preserve">
<source>Notifications</source> <source>Notifications</source>
<target>Сповіщення</target> <target>Сповіщення</target>
@@ -3365,6 +3600,10 @@
<target>Відкрийте консоль чату</target> <target>Відкрийте консоль чату</target>
<note>authentication reason</note> <note>authentication reason</note>
</trans-unit> </trans-unit>
<trans-unit id="Open group" xml:space="preserve">
<source>Open group</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Open user profiles" xml:space="preserve"> <trans-unit id="Open user profiles" xml:space="preserve">
<source>Open user profiles</source> <source>Open user profiles</source>
<target>Відкрити профілі користувачів</target> <target>Відкрити профілі користувачів</target>
@@ -3380,11 +3619,6 @@
<target>Відкриття бази даних…</target> <target>Відкриття бази даних…</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." xml:space="preserve">
<source>Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red.</source>
<target>Відкриття посилання в браузері може знизити конфіденційність і безпеку з'єднання. Ненадійні посилання SimpleX будуть червоного кольору.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="PING count" xml:space="preserve"> <trans-unit id="PING count" xml:space="preserve">
<source>PING count</source> <source>PING count</source>
<target>Кількість PING</target> <target>Кількість PING</target>
@@ -3430,6 +3664,10 @@
<target>Вставити</target> <target>Вставити</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Paste desktop address" xml:space="preserve">
<source>Paste desktop address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Paste image" xml:space="preserve"> <trans-unit id="Paste image" xml:space="preserve">
<source>Paste image</source> <source>Paste image</source>
<target>Вставити зображення</target> <target>Вставити зображення</target>
@@ -3575,6 +3813,14 @@
<target>Зображення профілю</target> <target>Зображення профілю</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Profile name" xml:space="preserve">
<source>Profile name</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile name:" xml:space="preserve">
<source>Profile name:</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile password" xml:space="preserve"> <trans-unit id="Profile password" xml:space="preserve">
<source>Profile password</source> <source>Profile password</source>
<target>Пароль до профілю</target> <target>Пароль до профілю</target>
@@ -3820,6 +4066,14 @@
<target>Переузгодьте шифрування?</target> <target>Переузгодьте шифрування?</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Repeat connection request?" xml:space="preserve">
<source>Repeat connection request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Repeat join request?" xml:space="preserve">
<source>Repeat join request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reply" xml:space="preserve"> <trans-unit id="Reply" xml:space="preserve">
<source>Reply</source> <source>Reply</source>
<target>Відповісти</target> <target>Відповісти</target>
@@ -4005,6 +4259,10 @@
<target>Відскануйте QR-код</target> <target>Відскануйте QR-код</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Scan QR code from desktop" xml:space="preserve">
<source>Scan QR code from desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Scan code" xml:space="preserve"> <trans-unit id="Scan code" xml:space="preserve">
<source>Scan code</source> <source>Scan code</source>
<target>Сканувати код</target> <target>Сканувати код</target>
@@ -4224,6 +4482,10 @@
<target>Сервери</target> <target>Сервери</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Session code" xml:space="preserve">
<source>Session code</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set 1 day" xml:space="preserve"> <trans-unit id="Set 1 day" xml:space="preserve">
<source>Set 1 day</source> <source>Set 1 day</source>
<target>Встановити 1 день</target> <target>Встановити 1 день</target>
@@ -4533,6 +4795,10 @@
<target>Натисніть кнопку </target> <target>Натисніть кнопку </target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Tap to Connect" xml:space="preserve">
<source>Tap to Connect</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to activate profile." xml:space="preserve"> <trans-unit id="Tap to activate profile." xml:space="preserve">
<source>Tap to activate profile.</source> <source>Tap to activate profile.</source>
<target>Натисніть, щоб активувати профіль.</target> <target>Натисніть, щоб активувати профіль.</target>
@@ -4630,11 +4896,6 @@ It can happen because of some bug or when the connection is compromised.</source
<target>Шифрування працює і нова угода про шифрування не потрібна. Це може призвести до помилок з'єднання!</target> <target>Шифрування працює і нова угода про шифрування не потрібна. Це може призвести до помилок з'єднання!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="The group is fully decentralized it is visible only to the members." xml:space="preserve">
<source>The group is fully decentralized it is visible only to the members.</source>
<target>Група повністю децентралізована - її бачать лише учасники.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The hash of the previous message is different." xml:space="preserve"> <trans-unit id="The hash of the previous message is different." xml:space="preserve">
<source>The hash of the previous message is different.</source> <source>The hash of the previous message is different.</source>
<target>Хеш попереднього повідомлення відрізняється.</target> <target>Хеш попереднього повідомлення відрізняється.</target>
@@ -4720,6 +4981,10 @@ It can happen because of some bug or when the connection is compromised.</source
<target>Цю дію неможливо скасувати - ваш профіль, контакти, повідомлення та файли будуть безповоротно втрачені.</target> <target>Цю дію неможливо скасувати - ваш профіль, контакти, повідомлення та файли будуть безповоротно втрачені.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve"> <trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source> <source>This group has over %lld members, delivery receipts are not sent.</source>
<target>У цій групі більше %lld учасників, підтвердження доставки не надсилаються.</target> <target>У цій групі більше %lld учасників, підтвердження доставки не надсилаються.</target>
@@ -4730,6 +4995,14 @@ It can happen because of some bug or when the connection is compromised.</source
<target>Цієї групи більше не існує.</target> <target>Цієї групи більше не існує.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="This is your own SimpleX address!" xml:space="preserve">
<source>This is your own SimpleX address!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This is your own one-time link!" xml:space="preserve">
<source>This is your own one-time link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This setting applies to messages in your current chat profile **%@**." xml:space="preserve"> <trans-unit id="This setting applies to messages in your current chat profile **%@**." xml:space="preserve">
<source>This setting applies to messages in your current chat profile **%@**.</source> <source>This setting applies to messages in your current chat profile **%@**.</source>
<target>Це налаштування застосовується до повідомлень у вашому поточному профілі чату **%@**.</target> <target>Це налаштування застосовується до повідомлень у вашому поточному профілі чату **%@**.</target>
@@ -4745,6 +5018,10 @@ It can happen because of some bug or when the connection is compromised.</source
<target>Щоб підключитися, ваш контакт може відсканувати QR-код або скористатися посиланням у додатку.</target> <target>Щоб підключитися, ваш контакт може відсканувати QR-код або скористатися посиланням у додатку.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="To hide unwanted messages." xml:space="preserve">
<source>To hide unwanted messages.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To make a new connection" xml:space="preserve"> <trans-unit id="To make a new connection" xml:space="preserve">
<source>To make a new connection</source> <source>To make a new connection</source>
<target>Щоб створити нове з'єднання</target> <target>Щоб створити нове з'єднання</target>
@@ -4826,6 +5103,18 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Не вдається записати голосове повідомлення</target> <target>Не вдається записати голосове повідомлення</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Unblock" xml:space="preserve">
<source>Unblock</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unblock member" xml:space="preserve">
<source>Unblock member</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unblock member?" xml:space="preserve">
<source>Unblock member?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unexpected error: %@" xml:space="preserve"> <trans-unit id="Unexpected error: %@" xml:space="preserve">
<source>Unexpected error: %@</source> <source>Unexpected error: %@</source>
<target>Неочікувана помилка: %@</target> <target>Неочікувана помилка: %@</target>
@@ -4888,6 +5177,14 @@ To connect, please ask your contact to create another connection link and check
Щоб підключитися, попросіть вашого контакта створити інше посилання і перевірте, чи маєте ви стабільне з'єднання з мережею.</target> Щоб підключитися, попросіть вашого контакта створити інше посилання і перевірте, чи маєте ви стабільне з'єднання з мережею.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Unlink" xml:space="preserve">
<source>Unlink</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlink desktop?" xml:space="preserve">
<source>Unlink desktop?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unlock" xml:space="preserve"> <trans-unit id="Unlock" xml:space="preserve">
<source>Unlock</source> <source>Unlock</source>
<target>Розблокувати</target> <target>Розблокувати</target>
@@ -4978,6 +5275,10 @@ To connect, please ask your contact to create another connection link and check
<target>Використовуйте для нових з'єднань</target> <target>Використовуйте для нових з'єднань</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Use from desktop" xml:space="preserve">
<source>Use from desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use iOS call interface" xml:space="preserve"> <trans-unit id="Use iOS call interface" xml:space="preserve">
<source>Use iOS call interface</source> <source>Use iOS call interface</source>
<target>Використовуйте інтерфейс виклику iOS</target> <target>Використовуйте інтерфейс виклику iOS</target>
@@ -5008,11 +5309,23 @@ To connect, please ask your contact to create another connection link and check
<target>Використання серверів SimpleX Chat.</target> <target>Використання серверів SimpleX Chat.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Verify code with desktop" xml:space="preserve">
<source>Verify code with desktop</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify connection" xml:space="preserve">
<source>Verify connection</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify connection security" xml:space="preserve"> <trans-unit id="Verify connection security" xml:space="preserve">
<source>Verify connection security</source> <source>Verify connection security</source>
<target>Перевірте безпеку з'єднання</target> <target>Перевірте безпеку з'єднання</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Verify connections" xml:space="preserve">
<source>Verify connections</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Verify security code" xml:space="preserve"> <trans-unit id="Verify security code" xml:space="preserve">
<source>Verify security code</source> <source>Verify security code</source>
<target>Підтвердіть код безпеки</target> <target>Підтвердіть код безпеки</target>
@@ -5023,6 +5336,10 @@ To connect, please ask your contact to create another connection link and check
<target>Через браузер</target> <target>Через браузер</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Via secure quantum resistant protocol." xml:space="preserve">
<source>Via secure quantum resistant protocol.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Video call" xml:space="preserve"> <trans-unit id="Video call" xml:space="preserve">
<source>Video call</source> <source>Video call</source>
<target>Відеодзвінок</target> <target>Відеодзвінок</target>
@@ -5073,6 +5390,10 @@ To connect, please ask your contact to create another connection link and check
<target>Голосове повідомлення…</target> <target>Голосове повідомлення…</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Waiting for desktop..." xml:space="preserve">
<source>Waiting for desktop...</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Waiting for file" xml:space="preserve"> <trans-unit id="Waiting for file" xml:space="preserve">
<source>Waiting for file</source> <source>Waiting for file</source>
<target>Очікування файлу</target> <target>Очікування файлу</target>
@@ -5173,6 +5494,35 @@ To connect, please ask your contact to create another connection link and check
<target>Ви вже підключені до %@.</target> <target>Ви вже підключені до %@.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You are already connecting to %@." xml:space="preserve">
<source>You are already connecting to %@.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already connecting via this one-time link!" xml:space="preserve">
<source>You are already connecting via this one-time link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already in group %@." xml:space="preserve">
<source>You are already in group %@.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group %@." xml:space="preserve">
<source>You are already joining the group %@.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group via this link!" xml:space="preserve">
<source>You are already joining the group via this link!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group via this link." xml:space="preserve">
<source>You are already joining the group via this link.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already joining the group!&#10;Repeat join request?" xml:space="preserve">
<source>You are already joining the group!
Repeat join request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are connected to the server used to receive messages from this contact." xml:space="preserve"> <trans-unit id="You are connected to the server used to receive messages from this contact." xml:space="preserve">
<source>You are connected to the server used to receive messages from this contact.</source> <source>You are connected to the server used to receive messages from this contact.</source>
<target>Ви підключені до сервера, який використовується для отримання повідомлень від цього контакту.</target> <target>Ви підключені до сервера, який використовується для отримання повідомлень від цього контакту.</target>
@@ -5268,6 +5618,15 @@ To connect, please ask your contact to create another connection link and check
<target>Вас не вдалося верифікувати, спробуйте ще раз.</target> <target>Вас не вдалося верифікувати, спробуйте ще раз.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You have already requested connection via this address!" xml:space="preserve">
<source>You have already requested connection via this address!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You have already requested connection!&#10;Repeat connection request?" xml:space="preserve">
<source>You have already requested connection!
Repeat connection request?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You have no chats" xml:space="preserve"> <trans-unit id="You have no chats" xml:space="preserve">
<source>You have no chats</source> <source>You have no chats</source>
<target>У вас немає чатів</target> <target>У вас немає чатів</target>
@@ -5318,6 +5677,10 @@ To connect, please ask your contact to create another connection link and check
<target>Ви будете підключені до групи, коли пристрій господаря групи буде в мережі, будь ласка, зачекайте або перевірте пізніше!</target> <target>Ви будете підключені до групи, коли пристрій господаря групи буде в мережі, будь ласка, зачекайте або перевірте пізніше!</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You will be connected when group link host's device is online, please wait or check later!" xml:space="preserve">
<source>You will be connected when group link host's device is online, please wait or check later!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will be connected when your connection request is accepted, please wait or check later!" xml:space="preserve"> <trans-unit id="You will be connected when your connection request is accepted, please wait or check later!" xml:space="preserve">
<source>You will be connected when your connection request is accepted, please wait or check later!</source> <source>You will be connected when your connection request is accepted, please wait or check later!</source>
<target>Ви будете підключені, коли ваш запит на підключення буде прийнято, будь ласка, зачекайте або перевірте пізніше!</target> <target>Ви будете підключені, коли ваш запит на підключення буде прийнято, будь ласка, зачекайте або перевірте пізніше!</target>
@@ -5333,9 +5696,8 @@ To connect, please ask your contact to create another connection link and check
<target>Вам потрібно буде пройти автентифікацію при запуску або відновленні програми після 30 секунд роботи у фоновому режимі.</target> <target>Вам потрібно буде пройти автентифікацію при запуску або відновленні програми після 30 секунд роботи у фоновому режимі.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You will join a group this link refers to and connect to its group members." xml:space="preserve"> <trans-unit id="You will connect to all group members." xml:space="preserve">
<source>You will join a group this link refers to and connect to its group members.</source> <source>You will connect to all group members.</source>
<target>Ви приєднаєтеся до групи, на яку посилається це посилання, і з'єднаєтеся з її учасниками.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve"> <trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve">
@@ -5403,11 +5765,6 @@ To connect, please ask your contact to create another connection link and check
<target>Ваша база даних чату не зашифрована - встановіть ключову фразу, щоб зашифрувати її.</target> <target>Ваша база даних чату не зашифрована - встановіть ключову фразу, щоб зашифрувати її.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Your chat profile will be sent to group members" xml:space="preserve">
<source>Your chat profile will be sent to group members</source>
<target>Ваш профіль у чаті буде надіслано учасникам групи</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profiles" xml:space="preserve"> <trans-unit id="Your chat profiles" xml:space="preserve">
<source>Your chat profiles</source> <source>Your chat profiles</source>
<target>Ваші профілі чату</target> <target>Ваші профілі чату</target>
@@ -5462,6 +5819,10 @@ You can change it in Settings.</source>
<target>Ваша конфіденційність</target> <target>Ваша конфіденційність</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Your profile" xml:space="preserve">
<source>Your profile</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your profile **%@** will be shared." xml:space="preserve"> <trans-unit id="Your profile **%@** will be shared." xml:space="preserve">
<source>Your profile **%@** will be shared.</source> <source>Your profile **%@** will be shared.</source>
<target>Ваш профіль **%@** буде опублікований.</target> <target>Ваш профіль **%@** буде опублікований.</target>
@@ -5554,11 +5915,19 @@ SimpleX servers cannot see your profile.</source>
<target>завжди</target> <target>завжди</target>
<note>pref value</note> <note>pref value</note>
</trans-unit> </trans-unit>
<trans-unit id="and %lld other events" xml:space="preserve">
<source>and %lld other events</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="audio call (not e2e encrypted)" xml:space="preserve"> <trans-unit id="audio call (not e2e encrypted)" xml:space="preserve">
<source>audio call (not e2e encrypted)</source> <source>audio call (not e2e encrypted)</source>
<target>аудіовиклик (без шифрування e2e)</target> <target>аудіовиклик (без шифрування e2e)</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="author" xml:space="preserve">
<source>author</source>
<note>member role</note>
</trans-unit>
<trans-unit id="bad message ID" xml:space="preserve"> <trans-unit id="bad message ID" xml:space="preserve">
<source>bad message ID</source> <source>bad message ID</source>
<target>невірний ідентифікатор повідомлення</target> <target>невірний ідентифікатор повідомлення</target>
@@ -5569,6 +5938,10 @@ SimpleX servers cannot see your profile.</source>
<target>невірний хеш повідомлення</target> <target>невірний хеш повідомлення</target>
<note>integrity error chat item</note> <note>integrity error chat item</note>
</trans-unit> </trans-unit>
<trans-unit id="blocked" xml:space="preserve">
<source>blocked</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="bold" xml:space="preserve"> <trans-unit id="bold" xml:space="preserve">
<source>bold</source> <source>bold</source>
<target>жирний</target> <target>жирний</target>
@@ -5738,6 +6111,10 @@ SimpleX servers cannot see your profile.</source>
<target>видалено</target> <target>видалено</target>
<note>deleted chat item</note> <note>deleted chat item</note>
</trans-unit> </trans-unit>
<trans-unit id="deleted contact" xml:space="preserve">
<source>deleted contact</source>
<note>rcv direct event chat item</note>
</trans-unit>
<trans-unit id="deleted group" xml:space="preserve"> <trans-unit id="deleted group" xml:space="preserve">
<source>deleted group</source> <source>deleted group</source>
<target>видалено групу</target> <target>видалено групу</target>
@@ -6022,7 +6399,8 @@ SimpleX servers cannot see your profile.</source>
<source>off</source> <source>off</source>
<target>вимкнено</target> <target>вимкнено</target>
<note>enabled status <note>enabled status
group pref value</note> group pref value
time to disappear</note>
</trans-unit> </trans-unit>
<trans-unit id="offered %@" xml:space="preserve"> <trans-unit id="offered %@" xml:space="preserve">
<source>offered %@</source> <source>offered %@</source>
@@ -6039,11 +6417,6 @@ SimpleX servers cannot see your profile.</source>
<target>увімкнено</target> <target>увімкнено</target>
<note>group pref value</note> <note>group pref value</note>
</trans-unit> </trans-unit>
<trans-unit id="or chat with the developers" xml:space="preserve">
<source>or chat with the developers</source>
<target>або поспілкуйтеся з розробниками</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="owner" xml:space="preserve"> <trans-unit id="owner" xml:space="preserve">
<source>owner</source> <source>owner</source>
<target>власник</target> <target>власник</target>
@@ -6133,6 +6506,10 @@ SimpleX servers cannot see your profile.</source>
<target>оновлений профіль групи</target> <target>оновлений профіль групи</target>
<note>rcv group event chat item</note> <note>rcv group event chat item</note>
</trans-unit> </trans-unit>
<trans-unit id="v%@" xml:space="preserve">
<source>v%@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="v%@ (%@)" xml:space="preserve"> <trans-unit id="v%@ (%@)" xml:space="preserve">
<source>v%@ (%@)</source> <source>v%@ (%@)</source>
<target>v%@ (%@)</target> <target>v%@ (%@)</target>
@@ -6270,6 +6647,10 @@ SimpleX servers cannot see your profile.</source>
<target>SimpleX використовує Face ID для локальної автентифікації</target> <target>SimpleX використовує Face ID для локальної автентифікації</target>
<note>Privacy - Face ID Usage Description</note> <note>Privacy - Face ID Usage Description</note>
</trans-unit> </trans-unit>
<trans-unit id="NSLocalNetworkUsageDescription" xml:space="preserve">
<source>SimpleX uses local network access to allow using user chat profile via desktop app on the same network.</source>
<note>Privacy - Local Network Usage Description</note>
</trans-unit>
<trans-unit id="NSMicrophoneUsageDescription" xml:space="preserve"> <trans-unit id="NSMicrophoneUsageDescription" xml:space="preserve">
<source>SimpleX needs microphone access for audio and video calls, and to record voice messages.</source> <source>SimpleX needs microphone access for audio and video calls, and to record voice messages.</source>
<target>SimpleX потребує доступу до мікрофона для аудіо та відео дзвінків, а також для запису голосових повідомлень.</target> <target>SimpleX потребує доступу до мікрофона для аудіо та відео дзвінків, а також для запису голосових повідомлень.</target>
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
File diff suppressed because it is too large Load Diff
@@ -4,6 +4,8 @@
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; "NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; "NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; "NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */ /* Privacy - Photo Library Additions Usage Description */
+48 -26
View File
@@ -39,6 +39,7 @@
5C36027327F47AD5009F19D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C36027227F47AD5009F19D9 /* AppDelegate.swift */; }; 5C36027327F47AD5009F19D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C36027227F47AD5009F19D9 /* AppDelegate.swift */; };
5C3A88CE27DF50170060F1C2 /* DetermineWidth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3A88CD27DF50170060F1C2 /* DetermineWidth.swift */; }; 5C3A88CE27DF50170060F1C2 /* DetermineWidth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3A88CD27DF50170060F1C2 /* DetermineWidth.swift */; };
5C3A88D127DF57800060F1C2 /* FramedItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3A88D027DF57800060F1C2 /* FramedItemView.swift */; }; 5C3A88D127DF57800060F1C2 /* FramedItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3A88D027DF57800060F1C2 /* FramedItemView.swift */; };
5C3CCFCC2AE6BD3100C3F0C3 /* ConnectDesktopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3CCFCB2AE6BD3100C3F0C3 /* ConnectDesktopView.swift */; };
5C3F1D562842B68D00EC8A82 /* IntegrityErrorItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3F1D552842B68D00EC8A82 /* IntegrityErrorItemView.swift */; }; 5C3F1D562842B68D00EC8A82 /* IntegrityErrorItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3F1D552842B68D00EC8A82 /* IntegrityErrorItemView.swift */; };
5C3F1D58284363C400EC8A82 /* PrivacySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3F1D57284363C400EC8A82 /* PrivacySettings.swift */; }; 5C3F1D58284363C400EC8A82 /* PrivacySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3F1D57284363C400EC8A82 /* PrivacySettings.swift */; };
5C4B3B0A285FB130003915F2 /* DatabaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C4B3B09285FB130003915F2 /* DatabaseView.swift */; }; 5C4B3B0A285FB130003915F2 /* DatabaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C4B3B09285FB130003915F2 /* DatabaseView.swift */; };
@@ -117,11 +118,13 @@
5CCB939C297EFCB100399E78 /* NavStackCompat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CCB939B297EFCB100399E78 /* NavStackCompat.swift */; }; 5CCB939C297EFCB100399E78 /* NavStackCompat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CCB939B297EFCB100399E78 /* NavStackCompat.swift */; };
5CCD403427A5F6DF00368C90 /* AddContactView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CCD403327A5F6DF00368C90 /* AddContactView.swift */; }; 5CCD403427A5F6DF00368C90 /* AddContactView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CCD403327A5F6DF00368C90 /* AddContactView.swift */; };
5CCD403727A5F9A200368C90 /* ScanToConnectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CCD403627A5F9A200368C90 /* ScanToConnectView.swift */; }; 5CCD403727A5F9A200368C90 /* ScanToConnectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CCD403627A5F9A200368C90 /* ScanToConnectView.swift */; };
5CD089312AE59CB300669208 /* libHSsimplex-chat-5.4.0.2-d5Ky77yoZRFE1pplaEhZO-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CD0892C2AE59CB300669208 /* libHSsimplex-chat-5.4.0.2-d5Ky77yoZRFE1pplaEhZO-ghc8.10.7.a */; }; 5CD67B8F2B0E858A00C510B1 /* hs_init.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CD67B8D2B0E858A00C510B1 /* hs_init.h */; settings = {ATTRIBUTES = (Public, ); }; };
5CD089322AE59CB300669208 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CD0892D2AE59CB300669208 /* libffi.a */; }; 5CD67B902B0E858A00C510B1 /* hs_init.c in Sources */ = {isa = PBXBuildFile; fileRef = 5CD67B8E2B0E858A00C510B1 /* hs_init.c */; };
5CD089332AE59CB300669208 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CD0892E2AE59CB300669208 /* libgmpxx.a */; }; 5CD67BA02B120ADF00C510B1 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CD67B9B2B120ADF00C510B1 /* libgmp.a */; };
5CD089342AE59CB300669208 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CD0892F2AE59CB300669208 /* libgmp.a */; }; 5CD67BA12B120ADF00C510B1 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CD67B9C2B120ADF00C510B1 /* libgmpxx.a */; };
5CD089352AE59CB300669208 /* libHSsimplex-chat-5.4.0.2-d5Ky77yoZRFE1pplaEhZO.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CD089302AE59CB300669208 /* libHSsimplex-chat-5.4.0.2-d5Ky77yoZRFE1pplaEhZO.a */; }; 5CD67BA22B120ADF00C510B1 /* libHSsimplex-chat-5.4.0.6-9DfazyElTA72omjHp0C93u.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CD67B9D2B120ADF00C510B1 /* libHSsimplex-chat-5.4.0.6-9DfazyElTA72omjHp0C93u.a */; };
5CD67BA32B120ADF00C510B1 /* libHSsimplex-chat-5.4.0.6-9DfazyElTA72omjHp0C93u-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CD67B9E2B120ADF00C510B1 /* libHSsimplex-chat-5.4.0.6-9DfazyElTA72omjHp0C93u-ghc8.10.7.a */; };
5CD67BA42B120ADF00C510B1 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CD67B9F2B120ADF00C510B1 /* libffi.a */; };
5CDCAD482818589900503DA2 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CDCAD472818589900503DA2 /* NotificationService.swift */; }; 5CDCAD482818589900503DA2 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CDCAD472818589900503DA2 /* NotificationService.swift */; };
5CE2BA702845308900EC33A6 /* SimpleXChat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE2BA682845308900EC33A6 /* SimpleXChat.framework */; }; 5CE2BA702845308900EC33A6 /* SimpleXChat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE2BA682845308900EC33A6 /* SimpleXChat.framework */; };
5CE2BA712845308900EC33A6 /* SimpleXChat.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE2BA682845308900EC33A6 /* SimpleXChat.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 5CE2BA712845308900EC33A6 /* SimpleXChat.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE2BA682845308900EC33A6 /* SimpleXChat.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
@@ -282,6 +285,7 @@
5C36027227F47AD5009F19D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 5C36027227F47AD5009F19D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
5C3A88CD27DF50170060F1C2 /* DetermineWidth.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetermineWidth.swift; sourceTree = "<group>"; }; 5C3A88CD27DF50170060F1C2 /* DetermineWidth.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetermineWidth.swift; sourceTree = "<group>"; };
5C3A88D027DF57800060F1C2 /* FramedItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FramedItemView.swift; sourceTree = "<group>"; }; 5C3A88D027DF57800060F1C2 /* FramedItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FramedItemView.swift; sourceTree = "<group>"; };
5C3CCFCB2AE6BD3100C3F0C3 /* ConnectDesktopView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectDesktopView.swift; sourceTree = "<group>"; };
5C3F1D552842B68D00EC8A82 /* IntegrityErrorItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntegrityErrorItemView.swift; sourceTree = "<group>"; }; 5C3F1D552842B68D00EC8A82 /* IntegrityErrorItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntegrityErrorItemView.swift; sourceTree = "<group>"; };
5C3F1D57284363C400EC8A82 /* PrivacySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacySettings.swift; sourceTree = "<group>"; }; 5C3F1D57284363C400EC8A82 /* PrivacySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacySettings.swift; sourceTree = "<group>"; };
5C422A7C27A9A6FA0097A1E1 /* SimpleX (iOS).entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "SimpleX (iOS).entitlements"; sourceTree = "<group>"; }; 5C422A7C27A9A6FA0097A1E1 /* SimpleX (iOS).entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "SimpleX (iOS).entitlements"; sourceTree = "<group>"; };
@@ -397,11 +401,13 @@
5CCB939B297EFCB100399E78 /* NavStackCompat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavStackCompat.swift; sourceTree = "<group>"; }; 5CCB939B297EFCB100399E78 /* NavStackCompat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavStackCompat.swift; sourceTree = "<group>"; };
5CCD403327A5F6DF00368C90 /* AddContactView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddContactView.swift; sourceTree = "<group>"; }; 5CCD403327A5F6DF00368C90 /* AddContactView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddContactView.swift; sourceTree = "<group>"; };
5CCD403627A5F9A200368C90 /* ScanToConnectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanToConnectView.swift; sourceTree = "<group>"; }; 5CCD403627A5F9A200368C90 /* ScanToConnectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanToConnectView.swift; sourceTree = "<group>"; };
5CD0892C2AE59CB300669208 /* libHSsimplex-chat-5.4.0.2-d5Ky77yoZRFE1pplaEhZO-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.4.0.2-d5Ky77yoZRFE1pplaEhZO-ghc8.10.7.a"; sourceTree = "<group>"; }; 5CD67B8D2B0E858A00C510B1 /* hs_init.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hs_init.h; sourceTree = "<group>"; };
5CD0892D2AE59CB300669208 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; }; 5CD67B8E2B0E858A00C510B1 /* hs_init.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = hs_init.c; sourceTree = "<group>"; };
5CD0892E2AE59CB300669208 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; }; 5CD67B9B2B120ADF00C510B1 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
5CD0892F2AE59CB300669208 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; }; 5CD67B9C2B120ADF00C510B1 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
5CD089302AE59CB300669208 /* libHSsimplex-chat-5.4.0.2-d5Ky77yoZRFE1pplaEhZO.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.4.0.2-d5Ky77yoZRFE1pplaEhZO.a"; sourceTree = "<group>"; }; 5CD67B9D2B120ADF00C510B1 /* libHSsimplex-chat-5.4.0.6-9DfazyElTA72omjHp0C93u.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.4.0.6-9DfazyElTA72omjHp0C93u.a"; sourceTree = "<group>"; };
5CD67B9E2B120ADF00C510B1 /* libHSsimplex-chat-5.4.0.6-9DfazyElTA72omjHp0C93u-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.4.0.6-9DfazyElTA72omjHp0C93u-ghc8.10.7.a"; sourceTree = "<group>"; };
5CD67B9F2B120ADF00C510B1 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
5CDCAD452818589900503DA2 /* SimpleX NSE.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "SimpleX NSE.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; 5CDCAD452818589900503DA2 /* SimpleX NSE.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "SimpleX NSE.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
5CDCAD472818589900503DA2 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = "<group>"; }; 5CDCAD472818589900503DA2 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = "<group>"; };
5CDCAD492818589900503DA2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 5CDCAD492818589900503DA2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@@ -505,13 +511,13 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
5CD089352AE59CB300669208 /* libHSsimplex-chat-5.4.0.2-d5Ky77yoZRFE1pplaEhZO.a in Frameworks */, 5CD67BA12B120ADF00C510B1 /* libgmpxx.a in Frameworks */,
5CD67BA22B120ADF00C510B1 /* libHSsimplex-chat-5.4.0.6-9DfazyElTA72omjHp0C93u.a in Frameworks */,
5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */, 5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */,
5CD089332AE59CB300669208 /* libgmpxx.a in Frameworks */, 5CD67BA02B120ADF00C510B1 /* libgmp.a in Frameworks */,
5CD67BA42B120ADF00C510B1 /* libffi.a in Frameworks */,
5CD67BA32B120ADF00C510B1 /* libHSsimplex-chat-5.4.0.6-9DfazyElTA72omjHp0C93u-ghc8.10.7.a in Frameworks */,
5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */, 5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */,
5CD089312AE59CB300669208 /* libHSsimplex-chat-5.4.0.2-d5Ky77yoZRFE1pplaEhZO-ghc8.10.7.a in Frameworks */,
5CD089342AE59CB300669208 /* libgmp.a in Frameworks */,
5CD089322AE59CB300669208 /* libffi.a in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -544,6 +550,7 @@
5CB924DD27A8622200ACCCDD /* NewChat */, 5CB924DD27A8622200ACCCDD /* NewChat */,
5CFA59C22860B04D00863A68 /* Database */, 5CFA59C22860B04D00863A68 /* Database */,
5CB634AB29E46CDB0066AD6B /* LocalAuth */, 5CB634AB29E46CDB0066AD6B /* LocalAuth */,
5CA8D01B2AD9B076001FD661 /* RemoteAccess */,
5CB924DF27A8678B00ACCCDD /* UserSettings */, 5CB924DF27A8678B00ACCCDD /* UserSettings */,
5C2E261127A30FEA00F70299 /* TerminalView.swift */, 5C2E261127A30FEA00F70299 /* TerminalView.swift */,
); );
@@ -572,11 +579,11 @@
5C764E5C279C70B7000C6508 /* Libraries */ = { 5C764E5C279C70B7000C6508 /* Libraries */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
5CD0892D2AE59CB300669208 /* libffi.a */, 5CD67B9F2B120ADF00C510B1 /* libffi.a */,
5CD0892F2AE59CB300669208 /* libgmp.a */, 5CD67B9B2B120ADF00C510B1 /* libgmp.a */,
5CD0892E2AE59CB300669208 /* libgmpxx.a */, 5CD67B9C2B120ADF00C510B1 /* libgmpxx.a */,
5CD0892C2AE59CB300669208 /* libHSsimplex-chat-5.4.0.2-d5Ky77yoZRFE1pplaEhZO-ghc8.10.7.a */, 5CD67B9E2B120ADF00C510B1 /* libHSsimplex-chat-5.4.0.6-9DfazyElTA72omjHp0C93u-ghc8.10.7.a */,
5CD089302AE59CB300669208 /* libHSsimplex-chat-5.4.0.2-d5Ky77yoZRFE1pplaEhZO.a */, 5CD67B9D2B120ADF00C510B1 /* libHSsimplex-chat-5.4.0.6-9DfazyElTA72omjHp0C93u.a */,
); );
path = Libraries; path = Libraries;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -684,6 +691,14 @@
path = "Tests iOS"; path = "Tests iOS";
sourceTree = "<group>"; sourceTree = "<group>";
}; };
5CA8D01B2AD9B076001FD661 /* RemoteAccess */ = {
isa = PBXGroup;
children = (
5C3CCFCB2AE6BD3100C3F0C3 /* ConnectDesktopView.swift */,
);
path = RemoteAccess;
sourceTree = "<group>";
};
5CB0BA8C282711BC00B3292C /* Onboarding */ = { 5CB0BA8C282711BC00B3292C /* Onboarding */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@@ -797,6 +812,8 @@
5CE2BA8A2845332200EC33A6 /* SimpleX.h */, 5CE2BA8A2845332200EC33A6 /* SimpleX.h */,
5CE2BA78284530CC00EC33A6 /* SimpleXChat.docc */, 5CE2BA78284530CC00EC33A6 /* SimpleXChat.docc */,
5CE2BA96284537A800EC33A6 /* dummy.m */, 5CE2BA96284537A800EC33A6 /* dummy.m */,
5CD67B8D2B0E858A00C510B1 /* hs_init.h */,
5CD67B8E2B0E858A00C510B1 /* hs_init.c */,
); );
path = SimpleXChat; path = SimpleXChat;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -881,6 +898,7 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
5CE2BA77284530BF00EC33A6 /* SimpleXChat.h in Headers */, 5CE2BA77284530BF00EC33A6 /* SimpleXChat.h in Headers */,
5CD67B8F2B0E858A00C510B1 /* hs_init.h in Headers */,
5CE2BA952845354B00EC33A6 /* SimpleX.h in Headers */, 5CE2BA952845354B00EC33A6 /* SimpleX.h in Headers */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@@ -1170,6 +1188,7 @@
6454036F2822A9750090DDFF /* ComposeFileView.swift in Sources */, 6454036F2822A9750090DDFF /* ComposeFileView.swift in Sources */,
5C5DB70E289ABDD200730FFF /* AppearanceSettings.swift in Sources */, 5C5DB70E289ABDD200730FFF /* AppearanceSettings.swift in Sources */,
5C5F2B6D27EBC3FE006A9D5F /* ImagePicker.swift in Sources */, 5C5F2B6D27EBC3FE006A9D5F /* ImagePicker.swift in Sources */,
5C3CCFCC2AE6BD3100C3F0C3 /* ConnectDesktopView.swift in Sources */,
5C9C2DA92899DA6F00CC63B1 /* NetworkAndServers.swift in Sources */, 5C9C2DA92899DA6F00CC63B1 /* NetworkAndServers.swift in Sources */,
5C6BA667289BD954009B8ECC /* DismissSheets.swift in Sources */, 5C6BA667289BD954009B8ECC /* DismissSheets.swift in Sources */,
5C577F7D27C83AA10006112D /* MarkdownHelp.swift in Sources */, 5C577F7D27C83AA10006112D /* MarkdownHelp.swift in Sources */,
@@ -1250,6 +1269,7 @@
5C00168128C4FE760094D739 /* KeyChain.swift in Sources */, 5C00168128C4FE760094D739 /* KeyChain.swift in Sources */,
5CE2BA97284537A800EC33A6 /* dummy.m in Sources */, 5CE2BA97284537A800EC33A6 /* dummy.m in Sources */,
5CE2BA922845340900EC33A6 /* FileUtils.swift in Sources */, 5CE2BA922845340900EC33A6 /* FileUtils.swift in Sources */,
5CD67B902B0E858A00C510B1 /* hs_init.c in Sources */,
5CE2BA91284533A300EC33A6 /* Notifications.swift in Sources */, 5CE2BA91284533A300EC33A6 /* Notifications.swift in Sources */,
5CE2BA79284530CC00EC33A6 /* SimpleXChat.docc in Sources */, 5CE2BA79284530CC00EC33A6 /* SimpleXChat.docc in Sources */,
5CE2BA90284533A300EC33A6 /* JSON.swift in Sources */, 5CE2BA90284533A300EC33A6 /* JSON.swift in Sources */,
@@ -1482,7 +1502,7 @@
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 180; CURRENT_PROJECT_VERSION = 184;
DEVELOPMENT_TEAM = 5NN7GUYB6T; DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -1490,6 +1510,7 @@
INFOPLIST_FILE = "SimpleX--iOS--Info.plist"; INFOPLIST_FILE = "SimpleX--iOS--Info.plist";
INFOPLIST_KEY_NSCameraUsageDescription = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; INFOPLIST_KEY_NSCameraUsageDescription = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
INFOPLIST_KEY_NSFaceIDUsageDescription = "SimpleX uses Face ID for local authentication"; INFOPLIST_KEY_NSFaceIDUsageDescription = "SimpleX uses Face ID for local authentication";
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
INFOPLIST_KEY_NSMicrophoneUsageDescription = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; INFOPLIST_KEY_NSMicrophoneUsageDescription = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "SimpleX needs access to Photo Library for saving captured and received media"; INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "SimpleX needs access to Photo Library for saving captured and received media";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
@@ -1524,7 +1545,7 @@
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 180; CURRENT_PROJECT_VERSION = 184;
DEVELOPMENT_TEAM = 5NN7GUYB6T; DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -1532,6 +1553,7 @@
INFOPLIST_FILE = "SimpleX--iOS--Info.plist"; INFOPLIST_FILE = "SimpleX--iOS--Info.plist";
INFOPLIST_KEY_NSCameraUsageDescription = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; INFOPLIST_KEY_NSCameraUsageDescription = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
INFOPLIST_KEY_NSFaceIDUsageDescription = "SimpleX uses Face ID for local authentication"; INFOPLIST_KEY_NSFaceIDUsageDescription = "SimpleX uses Face ID for local authentication";
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
INFOPLIST_KEY_NSMicrophoneUsageDescription = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; INFOPLIST_KEY_NSMicrophoneUsageDescription = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "SimpleX needs access to Photo Library for saving captured and received media"; INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "SimpleX needs access to Photo Library for saving captured and received media";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
@@ -1604,7 +1626,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 180; CURRENT_PROJECT_VERSION = 184;
DEVELOPMENT_TEAM = 5NN7GUYB6T; DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -1636,7 +1658,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 180; CURRENT_PROJECT_VERSION = 184;
DEVELOPMENT_TEAM = 5NN7GUYB6T; DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -1668,7 +1690,7 @@
APPLICATION_EXTENSION_API_ONLY = YES; APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 180; CURRENT_PROJECT_VERSION = 184;
DEFINES_MODULE = YES; DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T; DEVELOPMENT_TEAM = 5NN7GUYB6T;
DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_COMPATIBILITY_VERSION = 1;
@@ -1714,7 +1736,7 @@
APPLICATION_EXTENSION_API_ONLY = YES; APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 180; CURRENT_PROJECT_VERSION = 184;
DEFINES_MODULE = YES; DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T; DEVELOPMENT_TEAM = 5NN7GUYB6T;
DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_COMPATIBILITY_VERSION = 1;
+112 -2
View File
@@ -90,6 +90,7 @@ public enum ChatCommand {
case apiSetConnectionIncognito(connId: Int64, incognito: Bool) case apiSetConnectionIncognito(connId: Int64, incognito: Bool)
case apiConnectPlan(userId: Int64, connReq: String) case apiConnectPlan(userId: Int64, connReq: String)
case apiConnect(userId: Int64, incognito: Bool, connReq: String) case apiConnect(userId: Int64, incognito: Bool, connReq: String)
case apiConnectContactViaAddress(userId: Int64, incognito: Bool, contactId: Int64)
case apiDeleteChat(type: ChatType, id: Int64, notify: Bool?) case apiDeleteChat(type: ChatType, id: Int64, notify: Bool?)
case apiClearChat(type: ChatType, id: Int64) case apiClearChat(type: ChatType, id: Int64)
case apiListContacts(userId: Int64) case apiListContacts(userId: Int64)
@@ -119,6 +120,16 @@ public enum ChatCommand {
case receiveFile(fileId: Int64, encrypted: Bool?, inline: Bool?) case receiveFile(fileId: Int64, encrypted: Bool?, inline: Bool?)
case setFileToReceive(fileId: Int64, encrypted: Bool?) case setFileToReceive(fileId: Int64, encrypted: Bool?)
case cancelFile(fileId: Int64) case cancelFile(fileId: Int64)
// remote desktop commands
case setLocalDeviceName(displayName: String)
case connectRemoteCtrl(xrcpInvitation: String)
case findKnownRemoteCtrl
case confirmRemoteCtrl(remoteCtrlId: Int64)
case verifyRemoteCtrlSession(sessionCode: String)
case listRemoteCtrls
case stopRemoteCtrl
case deleteRemoteCtrl(remoteCtrlId: Int64)
// misc
case showVersion case showVersion
case string(String) case string(String)
@@ -226,6 +237,7 @@ public enum ChatCommand {
case let .apiSetConnectionIncognito(connId, incognito): return "/_set incognito :\(connId) \(onOff(incognito))" case let .apiSetConnectionIncognito(connId, incognito): return "/_set incognito :\(connId) \(onOff(incognito))"
case let .apiConnectPlan(userId, connReq): return "/_connect plan \(userId) \(connReq)" case let .apiConnectPlan(userId, connReq): return "/_connect plan \(userId) \(connReq)"
case let .apiConnect(userId, incognito, connReq): return "/_connect \(userId) incognito=\(onOff(incognito)) \(connReq)" case let .apiConnect(userId, incognito, connReq): return "/_connect \(userId) incognito=\(onOff(incognito)) \(connReq)"
case let .apiConnectContactViaAddress(userId, incognito, contactId): return "/_connect contact \(userId) incognito=\(onOff(incognito)) \(contactId)"
case let .apiDeleteChat(type, id, notify): if let notify = notify { case let .apiDeleteChat(type, id, notify): if let notify = notify {
return "/_delete \(ref(type, id)) notify=\(onOff(notify))" return "/_delete \(ref(type, id)) notify=\(onOff(notify))"
} else { } else {
@@ -258,6 +270,14 @@ public enum ChatCommand {
case let .receiveFile(fileId, encrypt, inline): return "/freceive \(fileId)\(onOffParam("encrypt", encrypt))\(onOffParam("inline", inline))" case let .receiveFile(fileId, encrypt, inline): return "/freceive \(fileId)\(onOffParam("encrypt", encrypt))\(onOffParam("inline", inline))"
case let .setFileToReceive(fileId, encrypt): return "/_set_file_to_receive \(fileId)\(onOffParam("encrypt", encrypt))" case let .setFileToReceive(fileId, encrypt): return "/_set_file_to_receive \(fileId)\(onOffParam("encrypt", encrypt))"
case let .cancelFile(fileId): return "/fcancel \(fileId)" case let .cancelFile(fileId): return "/fcancel \(fileId)"
case let .setLocalDeviceName(displayName): return "/set device name \(displayName)"
case let .connectRemoteCtrl(xrcpInv): return "/connect remote ctrl \(xrcpInv)"
case .findKnownRemoteCtrl: return "/find remote ctrl"
case let .confirmRemoteCtrl(rcId): return "/confirm remote ctrl \(rcId)"
case let .verifyRemoteCtrlSession(sessCode): return "/verify remote ctrl \(sessCode)"
case .listRemoteCtrls: return "/list remote ctrls"
case .stopRemoteCtrl: return "/stop remote ctrl"
case let .deleteRemoteCtrl(rcId): return "/delete remote ctrl \(rcId)"
case .showVersion: return "/version" case .showVersion: return "/version"
case let .string(str): return str case let .string(str): return str
} }
@@ -297,6 +317,7 @@ public enum ChatCommand {
case .apiSendMessage: return "apiSendMessage" case .apiSendMessage: return "apiSendMessage"
case .apiUpdateChatItem: return "apiUpdateChatItem" case .apiUpdateChatItem: return "apiUpdateChatItem"
case .apiDeleteChatItem: return "apiDeleteChatItem" case .apiDeleteChatItem: return "apiDeleteChatItem"
case .apiConnectContactViaAddress: return "apiConnectContactViaAddress"
case .apiDeleteMemberChatItem: return "apiDeleteMemberChatItem" case .apiDeleteMemberChatItem: return "apiDeleteMemberChatItem"
case .apiChatItemReaction: return "apiChatItemReaction" case .apiChatItemReaction: return "apiChatItemReaction"
case .apiGetNtfToken: return "apiGetNtfToken" case .apiGetNtfToken: return "apiGetNtfToken"
@@ -372,6 +393,14 @@ public enum ChatCommand {
case .receiveFile: return "receiveFile" case .receiveFile: return "receiveFile"
case .setFileToReceive: return "setFileToReceive" case .setFileToReceive: return "setFileToReceive"
case .cancelFile: return "cancelFile" case .cancelFile: return "cancelFile"
case .setLocalDeviceName: return "setLocalDeviceName"
case .connectRemoteCtrl: return "connectRemoteCtrl"
case .findKnownRemoteCtrl: return "findKnownRemoteCtrl"
case .confirmRemoteCtrl: return "confirmRemoteCtrl"
case .verifyRemoteCtrlSession: return "verifyRemoteCtrlSession"
case .listRemoteCtrls: return "listRemoteCtrls"
case .stopRemoteCtrl: return "stopRemoteCtrl"
case .deleteRemoteCtrl: return "deleteRemoteCtrl"
case .showVersion: return "showVersion" case .showVersion: return "showVersion"
case .string: return "console command" case .string: return "console command"
} }
@@ -456,7 +485,7 @@ public enum ChatResponse: Decodable, Error {
case serverTestResult(user: UserRef, testServer: String, testFailure: ProtocolTestFailure?) case serverTestResult(user: UserRef, testServer: String, testFailure: ProtocolTestFailure?)
case chatItemTTL(user: UserRef, chatItemTTL: Int64?) case chatItemTTL(user: UserRef, chatItemTTL: Int64?)
case networkConfig(networkConfig: NetCfg) case networkConfig(networkConfig: NetCfg)
case contactInfo(user: UserRef, contact: Contact, connectionStats: ConnectionStats, customUserProfile: Profile?) case contactInfo(user: UserRef, contact: Contact, connectionStats_: ConnectionStats?, customUserProfile: Profile?)
case groupMemberInfo(user: UserRef, groupInfo: GroupInfo, member: GroupMember, connectionStats_: ConnectionStats?) case groupMemberInfo(user: UserRef, groupInfo: GroupInfo, member: GroupMember, connectionStats_: ConnectionStats?)
case contactSwitchStarted(user: UserRef, contact: Contact, connectionStats: ConnectionStats) case contactSwitchStarted(user: UserRef, contact: Contact, connectionStats: ConnectionStats)
case groupMemberSwitchStarted(user: UserRef, groupInfo: GroupInfo, member: GroupMember, connectionStats: ConnectionStats) case groupMemberSwitchStarted(user: UserRef, groupInfo: GroupInfo, member: GroupMember, connectionStats: ConnectionStats)
@@ -478,6 +507,7 @@ public enum ChatResponse: Decodable, Error {
case connectionPlan(user: UserRef, connectionPlan: ConnectionPlan) case connectionPlan(user: UserRef, connectionPlan: ConnectionPlan)
case sentConfirmation(user: UserRef) case sentConfirmation(user: UserRef)
case sentInvitation(user: UserRef) case sentInvitation(user: UserRef)
case sentInvitationToContact(user: UserRef, contact: Contact, customUserProfile: Profile?)
case contactAlreadyExists(user: UserRef, contact: Contact) case contactAlreadyExists(user: UserRef, contact: Contact)
case contactRequestAlreadyAccepted(user: UserRef, contact: Contact) case contactRequestAlreadyAccepted(user: UserRef, contact: Contact)
case contactDeleted(user: UserRef, contact: Contact) case contactDeleted(user: UserRef, contact: Contact)
@@ -577,6 +607,14 @@ public enum ChatResponse: Decodable, Error {
case ntfMessages(user_: User?, connEntity: ConnectionEntity?, msgTs: Date?, ntfMessages: [NtfMsgInfo]) case ntfMessages(user_: User?, connEntity: ConnectionEntity?, msgTs: Date?, ntfMessages: [NtfMsgInfo])
case newContactConnection(user: UserRef, connection: PendingContactConnection) case newContactConnection(user: UserRef, connection: PendingContactConnection)
case contactConnectionDeleted(user: UserRef, connection: PendingContactConnection) case contactConnectionDeleted(user: UserRef, connection: PendingContactConnection)
// remote desktop responses/events
case remoteCtrlList(remoteCtrls: [RemoteCtrlInfo])
case remoteCtrlFound(remoteCtrl: RemoteCtrlInfo, ctrlAppInfo_: CtrlAppInfo?, appVersion: String, compatible: Bool)
case remoteCtrlConnecting(remoteCtrl_: RemoteCtrlInfo?, ctrlAppInfo: CtrlAppInfo, appVersion: String)
case remoteCtrlSessionCode(remoteCtrl_: RemoteCtrlInfo?, sessionCode: String)
case remoteCtrlConnected(remoteCtrl: RemoteCtrlInfo)
case remoteCtrlStopped
// misc
case versionInfo(versionInfo: CoreVersionInfo, chatMigrations: [UpMigration], agentMigrations: [UpMigration]) case versionInfo(versionInfo: CoreVersionInfo, chatMigrations: [UpMigration], agentMigrations: [UpMigration])
case cmdOk(user: UserRef?) case cmdOk(user: UserRef?)
case chatCmdError(user_: UserRef?, chatError: ChatError) case chatCmdError(user_: UserRef?, chatError: ChatError)
@@ -622,6 +660,7 @@ public enum ChatResponse: Decodable, Error {
case .connectionPlan: return "connectionPlan" case .connectionPlan: return "connectionPlan"
case .sentConfirmation: return "sentConfirmation" case .sentConfirmation: return "sentConfirmation"
case .sentInvitation: return "sentInvitation" case .sentInvitation: return "sentInvitation"
case .sentInvitationToContact: return "sentInvitationToContact"
case .contactAlreadyExists: return "contactAlreadyExists" case .contactAlreadyExists: return "contactAlreadyExists"
case .contactRequestAlreadyAccepted: return "contactRequestAlreadyAccepted" case .contactRequestAlreadyAccepted: return "contactRequestAlreadyAccepted"
case .contactDeleted: return "contactDeleted" case .contactDeleted: return "contactDeleted"
@@ -715,6 +754,12 @@ public enum ChatResponse: Decodable, Error {
case .ntfMessages: return "ntfMessages" case .ntfMessages: return "ntfMessages"
case .newContactConnection: return "newContactConnection" case .newContactConnection: return "newContactConnection"
case .contactConnectionDeleted: return "contactConnectionDeleted" case .contactConnectionDeleted: return "contactConnectionDeleted"
case .remoteCtrlList: return "remoteCtrlList"
case .remoteCtrlFound: return "remoteCtrlFound"
case .remoteCtrlConnecting: return "remoteCtrlConnecting"
case .remoteCtrlSessionCode: return "remoteCtrlSessionCode"
case .remoteCtrlConnected: return "remoteCtrlConnected"
case .remoteCtrlStopped: return "remoteCtrlStopped"
case .versionInfo: return "versionInfo" case .versionInfo: return "versionInfo"
case .cmdOk: return "cmdOk" case .cmdOk: return "cmdOk"
case .chatCmdError: return "chatCmdError" case .chatCmdError: return "chatCmdError"
@@ -741,7 +786,7 @@ public enum ChatResponse: Decodable, Error {
case let .serverTestResult(u, server, testFailure): return withUser(u, "server: \(server)\nresult: \(String(describing: testFailure))") case let .serverTestResult(u, server, testFailure): return withUser(u, "server: \(server)\nresult: \(String(describing: testFailure))")
case let .chatItemTTL(u, chatItemTTL): return withUser(u, String(describing: chatItemTTL)) case let .chatItemTTL(u, chatItemTTL): return withUser(u, String(describing: chatItemTTL))
case let .networkConfig(networkConfig): return String(describing: networkConfig) case let .networkConfig(networkConfig): return String(describing: networkConfig)
case let .contactInfo(u, contact, connectionStats, customUserProfile): return withUser(u, "contact: \(String(describing: contact))\nconnectionStats: \(String(describing: connectionStats))\ncustomUserProfile: \(String(describing: customUserProfile))") case let .contactInfo(u, contact, connectionStats_, customUserProfile): return withUser(u, "contact: \(String(describing: contact))\nconnectionStats_: \(String(describing: connectionStats_))\ncustomUserProfile: \(String(describing: customUserProfile))")
case let .groupMemberInfo(u, groupInfo, member, connectionStats_): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionStats_: \(String(describing: connectionStats_))") case let .groupMemberInfo(u, groupInfo, member, connectionStats_): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionStats_: \(String(describing: connectionStats_))")
case let .contactSwitchStarted(u, contact, connectionStats): return withUser(u, "contact: \(String(describing: contact))\nconnectionStats: \(String(describing: connectionStats))") case let .contactSwitchStarted(u, contact, connectionStats): return withUser(u, "contact: \(String(describing: contact))\nconnectionStats: \(String(describing: connectionStats))")
case let .groupMemberSwitchStarted(u, groupInfo, member, connectionStats): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionStats: \(String(describing: connectionStats))") case let .groupMemberSwitchStarted(u, groupInfo, member, connectionStats): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionStats: \(String(describing: connectionStats))")
@@ -763,6 +808,7 @@ public enum ChatResponse: Decodable, Error {
case let .connectionPlan(u, connectionPlan): return withUser(u, String(describing: connectionPlan)) case let .connectionPlan(u, connectionPlan): return withUser(u, String(describing: connectionPlan))
case .sentConfirmation: return noDetails case .sentConfirmation: return noDetails
case .sentInvitation: return noDetails case .sentInvitation: return noDetails
case let .sentInvitationToContact(u, contact, _): return withUser(u, String(describing: contact))
case let .contactAlreadyExists(u, contact): return withUser(u, String(describing: contact)) case let .contactAlreadyExists(u, contact): return withUser(u, String(describing: contact))
case let .contactRequestAlreadyAccepted(u, contact): return withUser(u, String(describing: contact)) case let .contactRequestAlreadyAccepted(u, contact): return withUser(u, String(describing: contact))
case let .contactDeleted(u, contact): return withUser(u, String(describing: contact)) case let .contactDeleted(u, contact): return withUser(u, String(describing: contact))
@@ -856,6 +902,12 @@ public enum ChatResponse: Decodable, Error {
case let .ntfMessages(u, connEntity, msgTs, ntfMessages): return withUser(u, "connEntity: \(String(describing: connEntity))\nmsgTs: \(String(describing: msgTs))\nntfMessages: \(String(describing: ntfMessages))") case let .ntfMessages(u, connEntity, msgTs, ntfMessages): return withUser(u, "connEntity: \(String(describing: connEntity))\nmsgTs: \(String(describing: msgTs))\nntfMessages: \(String(describing: ntfMessages))")
case let .newContactConnection(u, connection): return withUser(u, String(describing: connection)) case let .newContactConnection(u, connection): return withUser(u, String(describing: connection))
case let .contactConnectionDeleted(u, connection): return withUser(u, String(describing: connection)) case let .contactConnectionDeleted(u, connection): return withUser(u, String(describing: connection))
case let .remoteCtrlList(remoteCtrls): return String(describing: remoteCtrls)
case let .remoteCtrlFound(remoteCtrl, ctrlAppInfo_, appVersion, compatible): return "remoteCtrl:\n\(String(describing: remoteCtrl))\nctrlAppInfo_:\n\(String(describing: ctrlAppInfo_))\nappVersion: \(appVersion)\ncompatible: \(compatible)"
case let .remoteCtrlConnecting(remoteCtrl_, ctrlAppInfo, appVersion): return "remoteCtrl_:\n\(String(describing: remoteCtrl_))\nctrlAppInfo:\n\(String(describing: ctrlAppInfo))\nappVersion: \(appVersion)"
case let .remoteCtrlSessionCode(remoteCtrl_, sessionCode): return "remoteCtrl_:\n\(String(describing: remoteCtrl_))\nsessionCode: \(sessionCode)"
case let .remoteCtrlConnected(remoteCtrl): return String(describing: remoteCtrl)
case .remoteCtrlStopped: return noDetails
case let .versionInfo(versionInfo, chatMigrations, agentMigrations): return "\(String(describing: versionInfo))\n\nchat migrations: \(chatMigrations.map(\.upName))\n\nagent migrations: \(agentMigrations.map(\.upName))" case let .versionInfo(versionInfo, chatMigrations, agentMigrations): return "\(String(describing: versionInfo))\n\nchat migrations: \(chatMigrations.map(\.upName))\n\nagent migrations: \(agentMigrations.map(\.upName))"
case .cmdOk: return noDetails case .cmdOk: return noDetails
case let .chatCmdError(u, chatError): return withUser(u, String(describing: chatError)) case let .chatCmdError(u, chatError): return withUser(u, String(describing: chatError))
@@ -902,6 +954,7 @@ public enum ContactAddressPlan: Decodable {
case connectingConfirmReconnect case connectingConfirmReconnect
case connectingProhibit(contact: Contact) case connectingProhibit(contact: Contact)
case known(contact: Contact) case known(contact: Contact)
case contactViaAddress(contact: Contact)
} }
public enum GroupLinkPlan: Decodable { public enum GroupLinkPlan: Decodable {
@@ -1481,6 +1534,34 @@ public enum NotificationPreviewMode: String, SelectableItem {
public static var values: [NotificationPreviewMode] = [.message, .contact, .hidden] public static var values: [NotificationPreviewMode] = [.message, .contact, .hidden]
} }
public struct RemoteCtrlInfo: Decodable {
public var remoteCtrlId: Int64
public var ctrlDeviceName: String
public var sessionState: RemoteCtrlSessionState?
public var deviceViewName: String {
ctrlDeviceName == "" ? "\(remoteCtrlId)" : ctrlDeviceName
}
}
public enum RemoteCtrlSessionState: Decodable {
case starting
case searching
case connecting
case pendingConfirmation(sessionCode: String)
case connected(sessionCode: String)
}
public struct CtrlAppInfo: Decodable {
public var appVersionRange: AppVersionRange
public var deviceName: String
}
public struct AppVersionRange: Decodable {
public var minVersion: String
public var maxVersion: String
}
public struct CoreVersionInfo: Decodable { public struct CoreVersionInfo: Decodable {
public var version: String public var version: String
public var simplexmqVersion: String public var simplexmqVersion: String
@@ -1508,6 +1589,7 @@ public enum ChatError: Decodable {
case errorAgent(agentError: AgentErrorType) case errorAgent(agentError: AgentErrorType)
case errorStore(storeError: StoreError) case errorStore(storeError: StoreError)
case errorDatabase(databaseError: DatabaseError) case errorDatabase(databaseError: DatabaseError)
case errorRemoteCtrl(remoteCtrlError: RemoteCtrlError)
case invalidJSON(json: String) case invalidJSON(json: String)
} }
@@ -1667,6 +1749,7 @@ public enum AgentErrorType: Decodable {
case SMP(smpErr: ProtocolErrorType) case SMP(smpErr: ProtocolErrorType)
case NTF(ntfErr: ProtocolErrorType) case NTF(ntfErr: ProtocolErrorType)
case XFTP(xftpErr: XFTPErrorType) case XFTP(xftpErr: XFTPErrorType)
case RCP(rcpErr: RCErrorType)
case BROKER(brokerAddress: String, brokerErr: BrokerErrorType) case BROKER(brokerAddress: String, brokerErr: BrokerErrorType)
case AGENT(agentErr: SMPAgentError) case AGENT(agentErr: SMPAgentError)
case INTERNAL(internalErr: String) case INTERNAL(internalErr: String)
@@ -1724,6 +1807,22 @@ public enum XFTPErrorType: Decodable {
case INTERNAL case INTERNAL
} }
public enum RCErrorType: Decodable {
case `internal`(internalErr: String)
case identity
case noLocalAddress
case tlsStartFailed
case exception(exception: String)
case ctrlAuth
case ctrlNotFound
case ctrlError(ctrlErr: String)
case version
case encrypt
case decrypt
case blockSize
case syntax(syntaxErr: String)
}
public enum ProtocolCommandError: Decodable { public enum ProtocolCommandError: Decodable {
case UNKNOWN case UNKNOWN
case SYNTAX case SYNTAX
@@ -1759,3 +1858,14 @@ public enum ArchiveError: Decodable {
case `import`(chatError: ChatError) case `import`(chatError: ChatError)
case importFile(file: String, chatError: ChatError) case importFile(file: String, chatError: ChatError)
} }
public enum RemoteCtrlError: Decodable {
case inactive
case badState
case busy
case timeout
case disconnected(remoteCtrlId: Int64, reason: String)
case badInvitation
case badVersion(appVersion: String)
// case protocolError(protocolError: RemoteProtocolError)
}
+19 -10
View File
@@ -1370,7 +1370,7 @@ public struct Contact: Identifiable, Decodable, NamedChat {
public var contactId: Int64 public var contactId: Int64
var localDisplayName: ContactName var localDisplayName: ContactName
public var profile: LocalProfile public var profile: LocalProfile
public var activeConn: Connection public var activeConn: Connection?
public var viaGroup: Int64? public var viaGroup: Int64?
public var contactUsed: Bool public var contactUsed: Bool
public var contactStatus: ContactStatus public var contactStatus: ContactStatus
@@ -1384,10 +1384,10 @@ public struct Contact: Identifiable, Decodable, NamedChat {
public var id: ChatId { get { "@\(contactId)" } } public var id: ChatId { get { "@\(contactId)" } }
public var apiId: Int64 { get { contactId } } public var apiId: Int64 { get { contactId } }
public var ready: Bool { get { activeConn.connStatus == .ready } } public var ready: Bool { get { activeConn?.connStatus == .ready } }
public var active: Bool { get { contactStatus == .active } } public var active: Bool { get { contactStatus == .active } }
public var sendMsgEnabled: Bool { get { public var sendMsgEnabled: Bool { get {
(ready && active && !(activeConn.connectionStats?.ratchetSyncSendProhibited ?? false)) (ready && active && !(activeConn?.connectionStats?.ratchetSyncSendProhibited ?? false))
|| nextSendGrpInv || nextSendGrpInv
} } } }
public var nextSendGrpInv: Bool { get { contactGroupMemberId != nil && !contactGrpInvSent } } public var nextSendGrpInv: Bool { get { contactGroupMemberId != nil && !contactGrpInvSent } }
@@ -1396,14 +1396,18 @@ public struct Contact: Identifiable, Decodable, NamedChat {
public var image: String? { get { profile.image } } public var image: String? { get { profile.image } }
public var contactLink: String? { get { profile.contactLink } } public var contactLink: String? { get { profile.contactLink } }
public var localAlias: String { profile.localAlias } public var localAlias: String { profile.localAlias }
public var verified: Bool { activeConn.connectionCode != nil } public var verified: Bool { activeConn?.connectionCode != nil }
public var directOrUsed: Bool { public var directOrUsed: Bool {
(activeConn.connLevel == 0 && !activeConn.viaGroupLink) || contactUsed if let activeConn = activeConn {
(activeConn.connLevel == 0 && !activeConn.viaGroupLink) || contactUsed
} else {
true
}
} }
public var contactConnIncognito: Bool { public var contactConnIncognito: Bool {
activeConn.customUserProfileId != nil activeConn?.customUserProfileId != nil
} }
public func allowsFeature(_ feature: ChatFeature) -> Bool { public func allowsFeature(_ feature: ChatFeature) -> Bool {
@@ -1843,7 +1847,7 @@ public struct GroupMember: Identifiable, Decodable {
public func canChangeRoleTo(groupInfo: GroupInfo) -> [GroupMemberRole]? { public func canChangeRoleTo(groupInfo: GroupInfo) -> [GroupMemberRole]? {
if !canBeRemoved(groupInfo: groupInfo) { return nil } if !canBeRemoved(groupInfo: groupInfo) { return nil }
let userRole = groupInfo.membership.memberRole let userRole = groupInfo.membership.memberRole
return GroupMemberRole.allCases.filter { $0 <= userRole } return GroupMemberRole.allCases.filter { $0 <= userRole && $0 != .author }
} }
public var memberIncognito: Bool { public var memberIncognito: Bool {
@@ -1883,6 +1887,7 @@ public struct GroupMemberIds: Decodable {
public enum GroupMemberRole: String, Identifiable, CaseIterable, Comparable, Decodable { public enum GroupMemberRole: String, Identifiable, CaseIterable, Comparable, Decodable {
case observer = "observer" case observer = "observer"
case author = "author"
case member = "member" case member = "member"
case admin = "admin" case admin = "admin"
case owner = "owner" case owner = "owner"
@@ -1892,6 +1897,7 @@ public enum GroupMemberRole: String, Identifiable, CaseIterable, Comparable, Dec
public var text: String { public var text: String {
switch self { switch self {
case .observer: return NSLocalizedString("observer", comment: "member role") case .observer: return NSLocalizedString("observer", comment: "member role")
case .author: return NSLocalizedString("author", comment: "member role")
case .member: return NSLocalizedString("member", comment: "member role") case .member: return NSLocalizedString("member", comment: "member role")
case .admin: return NSLocalizedString("admin", comment: "member role") case .admin: return NSLocalizedString("admin", comment: "member role")
case .owner: return NSLocalizedString("owner", comment: "member role") case .owner: return NSLocalizedString("owner", comment: "member role")
@@ -1901,9 +1907,10 @@ public enum GroupMemberRole: String, Identifiable, CaseIterable, Comparable, Dec
private var comparisonValue: Int { private var comparisonValue: Int {
switch self { switch self {
case .observer: return 0 case .observer: return 0
case .member: return 1 case .author: return 1
case .admin: return 2 case .member: return 2
case .owner: return 3 case .admin: return 3
case .owner: return 4
} }
} }
@@ -2672,6 +2679,7 @@ public enum MsgDecryptError: String, Decodable {
case tooManySkipped case tooManySkipped
case ratchetEarlier case ratchetEarlier
case other case other
case ratchetSync
var text: String { var text: String {
switch self { switch self {
@@ -2679,6 +2687,7 @@ public enum MsgDecryptError: String, Decodable {
case .tooManySkipped: return NSLocalizedString("Permanent decryption error", comment: "message decrypt error item") case .tooManySkipped: return NSLocalizedString("Permanent decryption error", comment: "message decrypt error item")
case .ratchetEarlier: return NSLocalizedString("Decryption error", comment: "message decrypt error item") case .ratchetEarlier: return NSLocalizedString("Decryption error", comment: "message decrypt error item")
case .other: return NSLocalizedString("Decryption error", comment: "message decrypt error item") case .other: return NSLocalizedString("Decryption error", comment: "message decrypt error item")
case .ratchetSync: return NSLocalizedString("Encryption re-negotiation error", comment: "message decrypt error item")
} }
} }
} }
+3 -1
View File
@@ -9,7 +9,7 @@
#ifndef SimpleX_h #ifndef SimpleX_h
#define SimpleX_h #define SimpleX_h
#endif /* SimpleX_h */ #include "hs_init.h"
extern void hs_init(int argc, char **argv[]); extern void hs_init(int argc, char **argv[]);
@@ -42,3 +42,5 @@ extern char *chat_encrypt_file(char *fromPath, char *toPath);
// chat_decrypt_file returns null-terminated string with the error message // chat_decrypt_file returns null-terminated string with the error message
extern char *chat_decrypt_file(char *fromPath, char *key, char *nonce, char *toPath); extern char *chat_decrypt_file(char *fromPath, char *key, char *nonce, char *toPath);
#endif /* SimpleX_h */
+25
View File
@@ -0,0 +1,25 @@
//
// hs_init.c
// SimpleXChat
//
// Created by Evgeny on 22/11/2023.
// Copyright © 2023 SimpleX Chat. All rights reserved.
//
#include "hs_init.h"
extern void hs_init_with_rtsopts(int * argc, char **argv[]);
void haskell_init(void) {
int argc = 5;
char *argv[] = {
"simplex",
"+RTS", // requires `hs_init_with_rtsopts`
"-A16m", // chunk size for new allocations
"-H64m", // initial heap size
"-xn", // non-moving GC
0
};
char **pargv = argv;
hs_init_with_rtsopts(&argc, &pargv);
}
+14
View File
@@ -0,0 +1,14 @@
//
// hs_init.h
// SimpleXChat
//
// Created by Evgeny on 22/11/2023.
// Copyright © 2023 SimpleX Chat. All rights reserved.
//
#ifndef hs_init_h
#define hs_init_h
void haskell_init(void);
#endif /* hs_init_h */
+20 -37
View File
@@ -720,21 +720,12 @@
/* server test step */ /* server test step */
"Connect" = "Свързване"; "Connect" = "Свързване";
/* No comment provided by engineer. */
"Connect directly" = "Свързване директно";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect incognito" = "Свързване инкогнито"; "Connect incognito" = "Свързване инкогнито";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "свържете се с разработчиците на SimpleX Chat."; "connect to SimpleX Chat developers." = "свържете се с разработчиците на SimpleX Chat.";
/* No comment provided by engineer. */
"Connect via contact link" = "Свързване чрез линк на контакта";
/* No comment provided by engineer. */
"Connect via group link?" = "Свързване чрез групов линк?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via link" = "Свърване чрез линк"; "Connect via link" = "Свърване чрез линк";
@@ -747,6 +738,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connected" = "свързан"; "connected" = "свързан";
/* rcv group event chat item */
"connected directly" = "свързан директно";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connecting" = "свързване"; "connecting" = "свързване";
@@ -801,9 +795,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Contact already exists" = "Контактът вече съществува"; "Contact already exists" = "Контактът вече съществува";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "Контактът и всички съобщения ще бъдат изтрити - това не може да бъде отменено!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"contact has e2e encryption" = "контактът има e2e криптиране"; "contact has e2e encryption" = "контактът има e2e криптиране";
@@ -1008,9 +999,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete Contact" = "Изтрий контакт"; "Delete Contact" = "Изтрий контакт";
/* No comment provided by engineer. */
"Delete contact?" = "Изтрий контакт?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete database" = "Изтрий базата данни"; "Delete database" = "Изтрий базата данни";
@@ -1167,12 +1155,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Discover and join groups" = "Открийте и се присъединете към групи"; "Discover and join groups" = "Открийте и се присъединете към групи";
/* No comment provided by engineer. */
"Display name" = "Показвано Име";
/* No comment provided by engineer. */
"Display name:" = "Показвано име:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Do it later" = "Отложи"; "Do it later" = "Отложи";
@@ -1377,6 +1359,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating group link" = "Грешка при създаване на групов линк"; "Error creating group link" = "Грешка при създаване на групов линк";
/* No comment provided by engineer. */
"Error creating member contact" = "Грешка при създаване на контакт с член";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating profile!" = "Грешка при създаване на профил!"; "Error creating profile!" = "Грешка при създаване на профил!";
@@ -1455,6 +1440,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending email" = "Грешка при изпращане на имейл"; "Error sending email" = "Грешка при изпращане на имейл";
/* No comment provided by engineer. */
"Error sending member contact invitation" = "Грешка при изпращане на съобщение за покана за контакт";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending message" = "Грешка при изпращане на съобщение"; "Error sending message" = "Грешка при изпращане на съобщение";
@@ -2227,7 +2215,8 @@
"observer" = "наблюдател"; "observer" = "наблюдател";
/* enabled status /* enabled status
group pref value */ group pref value
time to disappear */
"off" = "изключено"; "off" = "изключено";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@@ -2308,6 +2297,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Only your contact can send voice messages." = "Само вашият контакт може да изпраща гласови съобщения."; "Only your contact can send voice messages." = "Само вашият контакт може да изпраща гласови съобщения.";
/* No comment provided by engineer. */
"Open" = "Отвори";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open chat" = "Отвори чат"; "Open chat" = "Отвори чат";
@@ -2326,12 +2318,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Opening database…" = "Отваряне на база данни…"; "Opening database…" = "Отваряне на база данни…";
/* No comment provided by engineer. */
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Отварянето на линка в браузъра може да намали поверителността и сигурността на връзката. Несигурните SimpleX линкове ще бъдат червени.";
/* No comment provided by engineer. */
"or chat with the developers" = "или пишете на разработчиците";
/* member role */ /* member role */
"owner" = "собственик"; "owner" = "собственик";
@@ -2782,9 +2768,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send delivery receipts to" = "Изпращайте потвърждениe за доставка на"; "Send delivery receipts to" = "Изпращайте потвърждениe за доставка на";
/* No comment provided by engineer. */
"send direct message" = "изпрати лично съобщение";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send direct message" = "Изпрати лично съобщение"; "Send direct message" = "Изпрати лично съобщение";
/* No comment provided by engineer. */
"Send direct message to connect" = "Изпрати лично съобщение за свързване";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send disappearing message" = "Изпрати изчезващо съобщение"; "Send disappearing message" = "Изпрати изчезващо съобщение";
@@ -3115,9 +3107,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Криптирането работи и новото споразумение за криптиране не е необходимо. Това може да доведе до грешки при свързване!"; "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Криптирането работи и новото споразумение за криптиране не е необходимо. Това може да доведе до грешки при свързване!";
/* No comment provided by engineer. */
"The group is fully decentralized it is visible only to the members." = "Групата е напълно децентрализирана – видима е само за членовете.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The hash of the previous message is different." = "Хешът на предишното съобщение е различен."; "The hash of the previous message is different." = "Хешът на предишното съобщение е различен.";
@@ -3610,9 +3599,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Ще трябва да се идентифицирате, когато стартирате или възобновите приложението след 30 секунди във фонов режим."; "You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Ще трябва да се идентифицирате, когато стартирате или възобновите приложението след 30 секунди във фонов режим.";
/* No comment provided by engineer. */
"You will join a group this link refers to and connect to its group members." = "Ще се присъедините към групата, към която този линк препраща, и ще се свържете с нейните членове.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "Все още ще получавате обаждания и известия от заглушени профили, когато са активни."; "You will still receive calls and notifications from muted profiles when they are active." = "Все още ще получавате обаждания и известия от заглушени профили, когато са активни.";
@@ -3643,9 +3629,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat database is not encrypted - set passphrase to encrypt it." = "Вашата чат база данни не е криптирана - задайте парола, за да я криптирате."; "Your chat database is not encrypted - set passphrase to encrypt it." = "Вашата чат база данни не е криптирана - задайте парола, за да я криптирате.";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "Вашият чат профил ще бъде изпратен на членовете на групата";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat profiles" = "Вашите чат профили"; "Your chat profiles" = "Вашите чат профили";
+87 -35
View File
@@ -19,6 +19,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"_italic_" = "\\_kurzíva_"; "_italic_" = "\\_kurzíva_";
/* No comment provided by engineer. */
"- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- delivery receipts (up to 20 members).\n- faster and more stable." = "- připojit k [adresářová služba](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.cibule) (BETA)!\n- doručenky (až 20 členů).\n- Rychlejší a stabilnější.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- more stable message delivery.\n- a bit better groups.\n- and more!" = "- více stabilní doručování zpráv.\n- o trochu lepší skupiny.\n- a více!"; "- more stable message delivery.\n- a bit better groups.\n- and more!" = "- více stabilní doručování zpráv.\n- o trochu lepší skupiny.\n- a více!";
@@ -181,6 +184,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld minutes" = "%lld minut"; "%lld minutes" = "%lld minut";
/* No comment provided by engineer. */
"%lld new interface languages" = "%d nové jazyky rozhraní";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld second(s)" = "%lld vteřin"; "%lld second(s)" = "%lld vteřin";
@@ -443,6 +449,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"App build: %@" = "Sestavení aplikace: %@"; "App build: %@" = "Sestavení aplikace: %@";
/* No comment provided by engineer. */
"App encrypts new local files (except videos)." = "Aplikace šifruje nové místní soubory (s výjimkou videí).";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"App icon" = "Ikona aplikace"; "App icon" = "Ikona aplikace";
@@ -536,6 +545,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Both you and your contact can send voice messages." = "Hlasové zprávy můžete posílat vy i váš kontakt."; "Both you and your contact can send voice messages." = "Hlasové zprávy můžete posílat vy i váš kontakt.";
/* No comment provided by engineer. */
"Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" = "Bulharský, finský, thajský a ukrajinský - díky uživatelům a [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Podle chat profilu (výchozí) nebo [podle připojení](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Podle chat profilu (výchozí) nebo [podle připojení](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).";
@@ -708,21 +720,12 @@
/* server test step */ /* server test step */
"Connect" = "Připojit"; "Connect" = "Připojit";
/* No comment provided by engineer. */
"Connect directly" = "Připojit přímo";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect incognito" = "Spojit se inkognito"; "Connect incognito" = "Spojit se inkognito";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "připojit se k vývojářům SimpleX Chat."; "connect to SimpleX Chat developers." = "připojit se k vývojářům SimpleX Chat.";
/* No comment provided by engineer. */
"Connect via contact link" = "Připojit se přes odkaz";
/* No comment provided by engineer. */
"Connect via group link?" = "Připojit se přes odkaz skupiny?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via link" = "Připojte se prostřednictvím odkazu"; "Connect via link" = "Připojte se prostřednictvím odkazu";
@@ -735,6 +738,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connected" = "připojeno"; "connected" = "připojeno";
/* rcv group event chat item */
"connected directly" = "připojeno přímo";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connecting" = "připojování"; "connecting" = "připojování";
@@ -789,9 +795,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Contact already exists" = "Kontakt již existuje"; "Contact already exists" = "Kontakt již existuje";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "Kontakt a všechny zprávy budou smazány - nelze to vzít zpět!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"contact has e2e encryption" = "kontakt má šifrování e2e"; "contact has e2e encryption" = "kontakt má šifrování e2e";
@@ -843,6 +846,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create link" = "Vytvořit odkaz"; "Create link" = "Vytvořit odkaz";
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Vytvořit nový profil v [desktop app](https://simplex.chat/downloads/). 💻";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create one-time invitation link" = "Vytvořit jednorázovou pozvánku"; "Create one-time invitation link" = "Vytvořit jednorázovou pozvánku";
@@ -993,9 +999,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete Contact" = "Smazat kontakt"; "Delete Contact" = "Smazat kontakt";
/* No comment provided by engineer. */
"Delete contact?" = "Smazat kontakt?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete database" = "Odstranění databáze"; "Delete database" = "Odstranění databáze";
@@ -1125,6 +1128,9 @@
/* authentication reason */ /* authentication reason */
"Disable SimpleX Lock" = "Vypnutí zámku SimpleX"; "Disable SimpleX Lock" = "Vypnutí zámku SimpleX";
/* No comment provided by engineer. */
"disabled" = "vypnut";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Disappearing message" = "Mizící zpráva"; "Disappearing message" = "Mizící zpráva";
@@ -1147,10 +1153,7 @@
"Disconnect" = "Odpojit"; "Disconnect" = "Odpojit";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Display name" = "Zobrazované jméno"; "Discover and join groups" = "Objevte a připojte skupiny";
/* No comment provided by engineer. */
"Display name:" = "Zobrazované jméno:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Do it later" = "Udělat později"; "Do it later" = "Udělat později";
@@ -1242,6 +1245,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Encrypt database?" = "Šifrovat databázi?"; "Encrypt database?" = "Šifrovat databázi?";
/* No comment provided by engineer. */
"Encrypt local files" = "Šifrovat místní soubory";
/* No comment provided by engineer. */
"Encrypt stored files & media" = "Šifrovat uložené soubory a média";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Encrypted database" = "Zašifrovaná databáze"; "Encrypted database" = "Zašifrovaná databáze";
@@ -1350,9 +1359,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating group link" = "Chyba při vytváření odkazu skupiny"; "Error creating group link" = "Chyba při vytváření odkazu skupiny";
/* No comment provided by engineer. */
"Error creating member contact" = "Chyba vytvoření kontaktu člena";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating profile!" = "Chyba při vytváření profilu!"; "Error creating profile!" = "Chyba při vytváření profilu!";
/* No comment provided by engineer. */
"Error decrypting file" = "Chyba dešifrování souboru";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error deleting chat database" = "Chyba při mazání databáze chatu"; "Error deleting chat database" = "Chyba při mazání databáze chatu";
@@ -1425,6 +1440,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending email" = "Chyba odesílání e-mailu"; "Error sending email" = "Chyba odesílání e-mailu";
/* No comment provided by engineer. */
"Error sending member contact invitation" = "Chyba odeslání pozvánky kontaktu";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending message" = "Chyba při odesílání zprávy"; "Error sending message" = "Chyba při odesílání zprávy";
@@ -2115,6 +2133,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"New database archive" = "Archiv nové databáze"; "New database archive" = "Archiv nové databáze";
/* No comment provided by engineer. */
"New desktop app!" = "Nová desktopová aplikace!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"New display name" = "Nově zobrazované jméno"; "New display name" = "Nově zobrazované jméno";
@@ -2151,6 +2172,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"No contacts to add" = "Žádné kontakty k přidání"; "No contacts to add" = "Žádné kontakty k přidání";
/* No comment provided by engineer. */
"No delivery information" = "Žádné informace o dodání";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"No device token!" = "Žádný token zařízení!"; "No device token!" = "Žádný token zařízení!";
@@ -2188,7 +2212,8 @@
"observer" = "pozorovatel"; "observer" = "pozorovatel";
/* enabled status /* enabled status
group pref value */ group pref value
time to disappear */
"off" = "vypnuto"; "off" = "vypnuto";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@@ -2269,6 +2294,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Only your contact can send voice messages." = "Hlasové zprávy může odesílat pouze váš kontakt."; "Only your contact can send voice messages." = "Hlasové zprávy může odesílat pouze váš kontakt.";
/* No comment provided by engineer. */
"Open" = "Otevřít";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open chat" = "Otevřete chat"; "Open chat" = "Otevřete chat";
@@ -2287,12 +2315,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Opening database…" = "Otvírání databáze…"; "Opening database…" = "Otvírání databáze…";
/* No comment provided by engineer. */
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Otevření odkazu v prohlížeči může snížit soukromí a bezpečnost připojení. Nedůvěryhodné odkazy SimpleX budou červené.";
/* No comment provided by engineer. */
"or chat with the developers" = "nebo chat s vývojáři";
/* member role */ /* member role */
"owner" = "vlastník"; "owner" = "vlastník";
@@ -2482,6 +2504,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Read more in our GitHub repository." = "Další informace najdete v našem repozitáři GitHub."; "Read more in our GitHub repository." = "Další informace najdete v našem repozitáři GitHub.";
/* No comment provided by engineer. */
"Receipts are disabled" = "Informace o dodání jsou zakázány";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"received answer…" = "obdržel odpověď…"; "received answer…" = "obdržel odpověď…";
@@ -2740,9 +2765,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send delivery receipts to" = "Potvrzení o doručení zasílat na"; "Send delivery receipts to" = "Potvrzení o doručení zasílat na";
/* No comment provided by engineer. */
"send direct message" = "odeslat přímou zprávu";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send direct message" = "Odeslat přímou zprávu"; "Send direct message" = "Odeslat přímou zprávu";
/* No comment provided by engineer. */
"Send direct message to connect" = "Odeslat přímou zprávu pro připojení";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send disappearing message" = "Poslat mizící zprávu"; "Send disappearing message" = "Poslat mizící zprávu";
@@ -2785,9 +2816,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Sending receipts is disabled for %lld contacts" = "Odesílání potvrzení o doručení je vypnuto pro %lld kontakty"; "Sending receipts is disabled for %lld contacts" = "Odesílání potvrzení o doručení je vypnuto pro %lld kontakty";
/* No comment provided by engineer. */
"Sending receipts is disabled for %lld groups" = "Odesílání potvrzení o doručení vypnuto pro %lld skupiny";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Sending receipts is enabled for %lld contacts" = "Odesílání potvrzení o doručení je povoleno pro %lld kontakty"; "Sending receipts is enabled for %lld contacts" = "Odesílání potvrzení o doručení je povoleno pro %lld kontakty";
/* No comment provided by engineer. */
"Sending receipts is enabled for %lld groups" = "Odesílání potvrzení o doručení povoleno pro %lld skupiny";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Sending via" = "Odesílání přes"; "Sending via" = "Odesílání přes";
@@ -2872,6 +2909,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Show developer options" = "Zobrazit možnosti vývojáře"; "Show developer options" = "Zobrazit možnosti vývojáře";
/* No comment provided by engineer. */
"Show last messages" = "Zobrazit poslední zprávy";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Show preview" = "Zobrazení náhledu"; "Show preview" = "Zobrazení náhledu";
@@ -2914,12 +2954,18 @@
/* simplex link type */ /* simplex link type */
"SimpleX one-time invitation" = "Jednorázová pozvánka SimpleX"; "SimpleX one-time invitation" = "Jednorázová pozvánka SimpleX";
/* No comment provided by engineer. */
"Simplified incognito mode" = "Zjednodušený inkognito režim";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Skip" = "Přeskočit"; "Skip" = "Přeskočit";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Skipped messages" = "Přeskočené zprávy"; "Skipped messages" = "Přeskočené zprávy";
/* No comment provided by engineer. */
"Small groups (max 20)" = "Malé skupiny (max. 20)";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"SMP servers" = "SMP servery"; "SMP servers" = "SMP servery";
@@ -3058,9 +3104,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Šifrování funguje a nové povolení šifrování není vyžadováno. To může vyvolat chybu v připojení!"; "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Šifrování funguje a nové povolení šifrování není vyžadováno. To může vyvolat chybu v připojení!";
/* No comment provided by engineer. */
"The group is fully decentralized it is visible only to the members." = "Skupina je plně decentralizovaná - je viditelná pouze pro členy.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The hash of the previous message is different." = "Hash předchozí zprávy se liší."; "The hash of the previous message is different." = "Hash předchozí zprávy se liší.";
@@ -3118,6 +3161,9 @@
/* notification title */ /* notification title */
"this contact" = "tento kontakt"; "this contact" = "tento kontakt";
/* No comment provided by engineer. */
"This group has over %lld members, delivery receipts are not sent." = "Tato skupina má více než %lld členů, potvrzení o doručení nejsou odesílány.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This group no longer exists." = "Tato skupina již neexistuje."; "This group no longer exists." = "Tato skupina již neexistuje.";
@@ -3154,6 +3200,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Chcete-li ověřit koncové šifrování u svého kontaktu, porovnejte (nebo naskenujte) kód na svých zařízeních."; "To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Chcete-li ověřit koncové šifrování u svého kontaktu, porovnejte (nebo naskenujte) kód na svých zařízeních.";
/* No comment provided by engineer. */
"Toggle incognito when connecting." = "Změnit inkognito režim při připojení.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Transport isolation" = "Izolace transportu"; "Transport isolation" = "Izolace transportu";
@@ -3262,12 +3311,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use chat" = "Použijte chat"; "Use chat" = "Použijte chat";
/* No comment provided by engineer. */
"Use current profile" = "Použít aktuální profil";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use for new connections" = "Použít pro nová připojení"; "Use for new connections" = "Použít pro nová připojení";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use iOS call interface" = "Použít rozhraní volání iOS"; "Use iOS call interface" = "Použít rozhraní volání iOS";
/* No comment provided by engineer. */
"Use new incognito profile" = "Použít nový inkognito profil";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use server" = "Použít server"; "Use server" = "Použít server";
@@ -3541,9 +3596,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Při spuštění nebo obnovení aplikace po 30 sekundách na pozadí budete požádáni o ověření."; "You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Při spuštění nebo obnovení aplikace po 30 sekundách na pozadí budete požádáni o ověření.";
/* No comment provided by engineer. */
"You will join a group this link refers to and connect to its group members." = "Připojíte se ke skupině, na kterou tento odkaz odkazuje, a spojíte se s jejími členy.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "Stále budete přijímat volání a upozornění od umlčených profilů pokud budou aktivní."; "You will still receive calls and notifications from muted profiles when they are active." = "Stále budete přijímat volání a upozornění od umlčených profilů pokud budou aktivní.";
@@ -3574,9 +3626,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat database is not encrypted - set passphrase to encrypt it." = "Vaše chat databáze není šifrována nastavte přístupovou frázi pro její šifrování."; "Your chat database is not encrypted - set passphrase to encrypt it." = "Vaše chat databáze není šifrována nastavte přístupovou frázi pro její šifrování.";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "Váš chat profil bude zaslán členům skupiny";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat profiles" = "Vaše chat profily"; "Your chat profiles" = "Vaše chat profily";
@@ -3610,6 +3659,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your privacy" = "Vaše soukromí"; "Your privacy" = "Vaše soukromí";
/* No comment provided by engineer. */
"Your profile **%@** will be shared." = "Váš profil **%@** bude sdílen.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Váš profil je uložen ve vašem zařízení a sdílen pouze s vašimi kontakty.\nServery SimpleX nevidí váš profil."; "Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Váš profil je uložen ve vašem zařízení a sdílen pouze s vašimi kontakty.\nServery SimpleX nevidí váš profil.";
+367 -33
View File
@@ -19,9 +19,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"_italic_" = "\\_kursiv_"; "_italic_" = "\\_kursiv_";
/* No comment provided by engineer. */
"- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- delivery receipts (up to 20 members).\n- faster and more stable." = "- Verbinden mit dem [Directory-Service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- Empfangsbestätigungen (für bis zu 20 Mitglieder).\n- Schneller und stabiler.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- more stable message delivery.\n- a bit better groups.\n- and more!" = "- stabilere Zustellung von Nachrichten.\n- ein bisschen verbesserte Gruppen.\n- und mehr!"; "- more stable message delivery.\n- a bit better groups.\n- and more!" = "- stabilere Zustellung von Nachrichten.\n- ein bisschen verbesserte Gruppen.\n- und mehr!";
/* No comment provided by engineer. */
"- optionally notify deleted contacts.\n- profile names with spaces.\n- and more!" = "- Optionale Benachrichtigung von gelöschten Kontakten.\n- Profilnamen mit Leerzeichen.\n- Und mehr!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- Bis zu 5 Minuten lange Sprachnachrichten.\n- Zeitdauer für verschwindende Nachrichten anpassen.\n- Nachrichten-Historie bearbeiten."; "- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- Bis zu 5 Minuten lange Sprachnachrichten.\n- Zeitdauer für verschwindende Nachrichten anpassen.\n- Nachrichten-Historie bearbeiten.";
@@ -40,6 +46,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"(" = "("; "(" = "(";
/* No comment provided by engineer. */
"(new)" = "(Neu)";
/* No comment provided by engineer. */
"(this device v%@)" = "(Dieses Gerät hat v%@)";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
")" = ")"; ")" = ")";
@@ -116,11 +128,17 @@
"%@ %@" = "%@ %@"; "%@ %@" = "%@ %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@ and %@ connected" = "%@ und %@ wurden verbunden"; "%@ and %@" = "%@ und %@";
/* No comment provided by engineer. */
"%@ and %@ connected" = "%@ und %@ wurden mit Ihnen verbunden";
/* copied message info, <sender> at <time> */ /* copied message info, <sender> at <time> */
"%@ at %@:" = "%1$@ an %2$@:"; "%@ at %@:" = "%1$@ an %2$@:";
/* No comment provided by engineer. */
"%@ connected" = "%@ wurde mit Ihnen verbunden";
/* notification title */ /* notification title */
"%@ is connected!" = "%@ ist mit Ihnen verbunden!"; "%@ is connected!" = "%@ ist mit Ihnen verbunden!";
@@ -137,7 +155,10 @@
"%@ wants to connect!" = "%@ will sich mit Ihnen verbinden!"; "%@ wants to connect!" = "%@ will sich mit Ihnen verbinden!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@, %@ and %lld other members connected" = "%@, %@ und %lld weitere Mitglieder wurden verbunden"; "%@, %@ and %lld members" = "%@, %@ und %lld Mitglieder";
/* No comment provided by engineer. */
"%@, %@ and %lld other members connected" = "%@, %@ und %lld weitere Mitglieder wurden mit Ihnen verbunden";
/* copied message info */ /* copied message info */
"%@:" = "%@:"; "%@:" = "%@:";
@@ -175,12 +196,27 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld file(s) with total size of %@" = "%lld Datei(en) mit einem Gesamtspeicherverbrauch von %@"; "%lld file(s) with total size of %@" = "%lld Datei(en) mit einem Gesamtspeicherverbrauch von %@";
/* No comment provided by engineer. */
"%lld group events" = "%lld Gruppenereignisse";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld members" = "%lld Mitglieder"; "%lld members" = "%lld Mitglieder";
/* No comment provided by engineer. */
"%lld messages blocked" = "%lld Nachrichten blockiert";
/* No comment provided by engineer. */
"%lld messages marked deleted" = "%lld Nachrichten als gelöscht markiert";
/* No comment provided by engineer. */
"%lld messages moderated by %@" = "%lld Nachrichten von %@ moderiert";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld minutes" = "%lld Minuten"; "%lld minutes" = "%lld Minuten";
/* No comment provided by engineer. */
"%lld new interface languages" = "%lld neue Sprachen für die Bedienoberfläche";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld second(s)" = "%lld Sekunde(n)"; "%lld second(s)" = "%lld Sekunde(n)";
@@ -223,6 +259,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"~strike~" = "\\~durchstreichen~"; "~strike~" = "\\~durchstreichen~";
/* time to disappear */
"0 sec" = "0 sek";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"0s" = "0s"; "0s" = "0s";
@@ -365,6 +404,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Alle Nachrichten werden gelöscht - dies kann nicht rückgängig gemacht werden! Die Nachrichten werden NUR bei Ihnen gelöscht."; "All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Alle Nachrichten werden gelöscht - dies kann nicht rückgängig gemacht werden! Die Nachrichten werden NUR bei Ihnen gelöscht.";
/* No comment provided by engineer. */
"All new messages from %@ will be hidden!" = "Alle neuen Nachrichten von %@ werden verborgen!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"All your contacts will remain connected." = "Alle Ihre Kontakte bleiben verbunden."; "All your contacts will remain connected." = "Alle Ihre Kontakte bleiben verbunden.";
@@ -428,6 +470,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Already connected?" = "Sind Sie bereits verbunden?"; "Already connected?" = "Sind Sie bereits verbunden?";
/* No comment provided by engineer. */
"Already connecting!" = "Bereits verbunden!";
/* No comment provided by engineer. */
"Already joining the group!" = "Sie sind bereits Mitglied der Gruppe!";
/* pref value */ /* pref value */
"always" = "Immer"; "always" = "Immer";
@@ -437,12 +485,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"An empty chat profile with the provided name is created, and the app opens as usual." = "Es wurde ein leeres Chat-Profil mit dem eingegebenen Namen erstellt und die App öffnet wie gewohnt."; "An empty chat profile with the provided name is created, and the app opens as usual." = "Es wurde ein leeres Chat-Profil mit dem eingegebenen Namen erstellt und die App öffnet wie gewohnt.";
/* No comment provided by engineer. */
"and %lld other events" = "und %lld weitere Ereignisse";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Answer call" = "Anruf annehmen"; "Answer call" = "Anruf annehmen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"App build: %@" = "App Build: %@"; "App build: %@" = "App Build: %@";
/* No comment provided by engineer. */
"App encrypts new local files (except videos)." = "Neue lokale Dateien (außer Video-Dateien) werden von der App verschlüsselt.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"App icon" = "App-Icon"; "App icon" = "App-Icon";
@@ -491,6 +545,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Authentication unavailable" = "Authentifizierung nicht verfügbar"; "Authentication unavailable" = "Authentifizierung nicht verfügbar";
/* member role */
"author" = "Autor";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Auto-accept" = "Automatisch akzeptieren"; "Auto-accept" = "Automatisch akzeptieren";
@@ -503,6 +560,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Back" = "Zurück"; "Back" = "Zurück";
/* No comment provided by engineer. */
"Bad desktop address" = "Falsche Desktop-Adresse";
/* integrity error chat item */ /* integrity error chat item */
"bad message hash" = "Ungültiger Nachrichten-Hash"; "bad message hash" = "Ungültiger Nachrichten-Hash";
@@ -515,9 +575,27 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Bad message ID" = "Falsche Nachrichten-ID"; "Bad message ID" = "Falsche Nachrichten-ID";
/* No comment provided by engineer. */
"Better groups" = "Bessere Gruppen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Better messages" = "Verbesserungen bei Nachrichten"; "Better messages" = "Verbesserungen bei Nachrichten";
/* No comment provided by engineer. */
"Block" = "Blockieren";
/* No comment provided by engineer. */
"Block group members" = "Gruppenmitglieder blockieren";
/* No comment provided by engineer. */
"Block member" = "Mitglied blockieren";
/* No comment provided by engineer. */
"Block member?" = "Mitglied blockieren?";
/* No comment provided by engineer. */
"blocked" = "blockiert";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"bold" = "fett"; "bold" = "fett";
@@ -536,6 +614,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Both you and your contact can send voice messages." = "Sowohl Ihr Kontakt, als auch Sie können Sprachnachrichten senden."; "Both you and your contact can send voice messages." = "Sowohl Ihr Kontakt, als auch Sie können Sprachnachrichten senden.";
/* No comment provided by engineer. */
"Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" = "Bulgarisch, Finnisch, Thailändisch und Ukrainisch - Dank der Nutzer und [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Per Chat-Profil (Voreinstellung) oder [per Verbindung](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Per Chat-Profil (Voreinstellung) oder [per Verbindung](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).";
@@ -709,19 +790,28 @@
"Connect" = "Verbinden"; "Connect" = "Verbinden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect directly" = "Direkt verbinden"; "Connect automatically" = "Automatisch verbinden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect incognito" = "Inkognito verbinden"; "Connect incognito" = "Inkognito verbinden";
/* No comment provided by engineer. */
"Connect to desktop" = "Mit dem Desktop verbinden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "Mit den SimpleX Chat-Entwicklern verbinden."; "connect to SimpleX Chat developers." = "Mit den SimpleX Chat-Entwicklern verbinden.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via contact link" = "Über den Kontakt-Link verbinden"; "Connect to yourself?" = "Mit Ihnen selbst verbinden?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via group link?" = "Über den Gruppen-Link verbinden?"; "Connect to yourself?\nThis is your own one-time link!" = "Mit Ihnen selbst verbinden?\nDas ist Ihr eigener Einmal-Link!";
/* No comment provided by engineer. */
"Connect to yourself?\nThis is your own SimpleX address!" = "Mit Ihnen selbst verbinden?\nDas ist Ihre eigene SimpleX-Adresse!";
/* No comment provided by engineer. */
"Connect via contact address" = "Über die Kontakt-Adresse verbinden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via link" = "Über einen Link verbinden"; "Connect via link" = "Über einen Link verbinden";
@@ -732,9 +822,21 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via one-time link" = "Über einen Einmal-Link verbinden"; "Connect via one-time link" = "Über einen Einmal-Link verbinden";
/* No comment provided by engineer. */
"Connect with %@" = "Mit %@ verbinden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connected" = "Verbunden"; "connected" = "Verbunden";
/* No comment provided by engineer. */
"Connected desktop" = "Verbundener Desktop";
/* rcv group event chat item */
"connected directly" = "Direkt miteinander verbunden";
/* No comment provided by engineer. */
"Connected to desktop" = "Mit dem Desktop verbunden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connecting" = "verbinde"; "connecting" = "verbinde";
@@ -759,6 +861,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connecting server… (error: %@)" = "Mit dem Server verbinden… (Fehler: %@)"; "Connecting server… (error: %@)" = "Mit dem Server verbinden… (Fehler: %@)";
/* No comment provided by engineer. */
"Connecting to desktop" = "Mit dem Desktop verbinden";
/* chat list item title */ /* chat list item title */
"connecting…" = "Verbinde…"; "connecting…" = "Verbinde…";
@@ -777,6 +882,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connection request sent!" = "Verbindungsanfrage wurde gesendet!"; "Connection request sent!" = "Verbindungsanfrage wurde gesendet!";
/* No comment provided by engineer. */
"Connection terminated" = "Verbindung beendet";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connection timeout" = "Verbindungszeitüberschreitung"; "Connection timeout" = "Verbindungszeitüberschreitung";
@@ -789,9 +897,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Contact already exists" = "Der Kontakt ist bereits vorhanden"; "Contact already exists" = "Der Kontakt ist bereits vorhanden";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "Der Kontakt und alle Nachrichten werden gelöscht - dies kann nicht rückgängig gemacht werden!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"contact has e2e encryption" = "Kontakt nutzt E2E-Verschlüsselung"; "contact has e2e encryption" = "Kontakt nutzt E2E-Verschlüsselung";
@@ -828,24 +933,39 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Core version: v%@" = "Core Version: v%@"; "Core version: v%@" = "Core Version: v%@";
/* No comment provided by engineer. */
"Correct name to %@?" = "Richtiger Name für %@?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create" = "Erstellen"; "Create" = "Erstellen";
/* No comment provided by engineer. */
"Create a group using a random profile." = "Erstellen Sie eine Gruppe mit einem zufälligen Profil.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create an address to let people connect with you." = "Erstellen Sie eine Adresse, damit sich Personen mit Ihnen verbinden können."; "Create an address to let people connect with you." = "Erstellen Sie eine Adresse, damit sich Personen mit Ihnen verbinden können.";
/* server test step */ /* server test step */
"Create file" = "Datei erstellen"; "Create file" = "Datei erstellen";
/* No comment provided by engineer. */
"Create group" = "Gruppe erstellen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create group link" = "Gruppenlink erstellen"; "Create group link" = "Gruppenlink erstellen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create link" = "Link erzeugen"; "Create link" = "Link erzeugen";
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Neues Profil in der [Desktop-App] erstellen (https://simplex.chat/downloads/). 💻";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create one-time invitation link" = "Einmal-Einladungslink erstellen"; "Create one-time invitation link" = "Einmal-Einladungslink erstellen";
/* No comment provided by engineer. */
"Create profile" = "Profil erstellen";
/* server test step */ /* server test step */
"Create queue" = "Erzeuge Warteschlange"; "Create queue" = "Erzeuge Warteschlange";
@@ -960,6 +1080,9 @@
/* chat item action */ /* chat item action */
"Delete" = "Löschen"; "Delete" = "Löschen";
/* No comment provided by engineer. */
"Delete %lld messages?" = "%lld Nachrichten löschen?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete address" = "Adresse löschen"; "Delete address" = "Adresse löschen";
@@ -972,6 +1095,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete all files" = "Alle Dateien löschen"; "Delete all files" = "Alle Dateien löschen";
/* No comment provided by engineer. */
"Delete and notify contact" = "Kontakt löschen und benachrichtigen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete archive" = "Archiv löschen"; "Delete archive" = "Archiv löschen";
@@ -994,7 +1120,7 @@
"Delete Contact" = "Kontakt löschen"; "Delete Contact" = "Kontakt löschen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete contact?" = "Kontakt löschen?"; "Delete contact?\nThis cannot be undone!" = "Kontakt löschen?\nDas kann nicht rückgängig gemacht werden!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete database" = "Datenbank löschen"; "Delete database" = "Datenbank löschen";
@@ -1071,6 +1197,9 @@
/* copied message info */ /* copied message info */
"Deleted at: %@" = "Gelöscht um: %@"; "Deleted at: %@" = "Gelöscht um: %@";
/* rcv direct event chat item */
"deleted contact" = "Gelöschter Kontakt";
/* rcv group event chat item */ /* rcv group event chat item */
"deleted group" = "Gruppe gelöscht"; "deleted group" = "Gruppe gelöscht";
@@ -1086,6 +1215,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Description" = "Beschreibung"; "Description" = "Beschreibung";
/* No comment provided by engineer. */
"Desktop address" = "Desktop-Adresse";
/* No comment provided by engineer. */
"Desktop app version %@ is not compatible with this app." = "Desktop App-Version %@ ist mit dieser App nicht kompatibel.";
/* No comment provided by engineer. */
"Desktop devices" = "Desktop-Geräte";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Develop" = "Entwicklung"; "Develop" = "Entwicklung";
@@ -1150,10 +1288,13 @@
"Disconnect" = "Trennen"; "Disconnect" = "Trennen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Display name" = "Angezeigter Name"; "Disconnect desktop?" = "Desktop-Verbindung trennen?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Display name:" = "Angezeigter Name:"; "Discover and join groups" = "Gruppen entdecken und ihnen beitreten";
/* No comment provided by engineer. */
"Discover via local network" = "Lokales Netzwerk durchsuchen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Do it later" = "Später wiederholen"; "Do it later" = "Später wiederholen";
@@ -1248,6 +1389,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Encrypt local files" = "Lokale Dateien verschlüsseln"; "Encrypt local files" = "Lokale Dateien verschlüsseln";
/* No comment provided by engineer. */
"Encrypt stored files & media" = "Gespeicherte Dateien & Medien verschlüsseln";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Encrypted database" = "Verschlüsselte Datenbank"; "Encrypted database" = "Verschlüsselte Datenbank";
@@ -1287,6 +1431,12 @@
/* chat item text */ /* chat item text */
"encryption re-negotiation allowed for %@" = "Neuaushandlung der Verschlüsselung von %@ erlaubt"; "encryption re-negotiation allowed for %@" = "Neuaushandlung der Verschlüsselung von %@ erlaubt";
/* message decrypt error item */
"Encryption re-negotiation error" = "Fehler bei der Neuverhandlung der Verschlüsselung";
/* No comment provided by engineer. */
"Encryption re-negotiation failed." = "Neuverhandlung der Verschlüsselung fehlgeschlagen.";
/* chat item text */ /* chat item text */
"encryption re-negotiation required" = "Neuaushandlung der Verschlüsselung notwendig"; "encryption re-negotiation required" = "Neuaushandlung der Verschlüsselung notwendig";
@@ -1302,6 +1452,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter correct passphrase." = "Geben Sie das korrekte Passwort ein."; "Enter correct passphrase." = "Geben Sie das korrekte Passwort ein.";
/* No comment provided by engineer. */
"Enter group name…" = "Geben Sie den Gruppennamen ein…";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter Passcode" = "Zugangscode eingeben"; "Enter Passcode" = "Zugangscode eingeben";
@@ -1314,12 +1467,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter server manually" = "Geben Sie den Server manuell ein"; "Enter server manually" = "Geben Sie den Server manuell ein";
/* No comment provided by engineer. */
"Enter this device name…" = "Geben Sie diesen Gerätenamen ein…";
/* placeholder */ /* placeholder */
"Enter welcome message…" = "Geben Sie eine Begrüßungsmeldung ein …"; "Enter welcome message…" = "Geben Sie eine Begrüßungsmeldung ein …";
/* placeholder */ /* placeholder */
"Enter welcome message… (optional)" = "Geben Sie eine Begrüßungsmeldung ein … (optional)"; "Enter welcome message… (optional)" = "Geben Sie eine Begrüßungsmeldung ein … (optional)";
/* No comment provided by engineer. */
"Enter your name…" = "Geben Sie Ihren Namen ein…";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"error" = "Fehler"; "error" = "Fehler";
@@ -1356,6 +1515,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating group link" = "Fehler beim Erzeugen des Gruppen-Links"; "Error creating group link" = "Fehler beim Erzeugen des Gruppen-Links";
/* No comment provided by engineer. */
"Error creating member contact" = "Fehler beim Anlegen eines Mitglied-Kontaktes";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating profile!" = "Fehler beim Erstellen des Profils!"; "Error creating profile!" = "Fehler beim Erstellen des Profils!";
@@ -1434,6 +1596,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending email" = "Fehler beim Senden der eMail"; "Error sending email" = "Fehler beim Senden der eMail";
/* No comment provided by engineer. */
"Error sending member contact invitation" = "Fehler beim Senden einer Mitglied-Kontakt-Einladung";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending message" = "Fehler beim Senden der Nachricht"; "Error sending message" = "Fehler beim Senden der Nachricht";
@@ -1485,6 +1650,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Exit without saving" = "Beenden ohne Speichern"; "Exit without saving" = "Beenden ohne Speichern";
/* chat item action */
"Expand" = "Erweitern";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Export database" = "Datenbank exportieren"; "Export database" = "Datenbank exportieren";
@@ -1503,6 +1671,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Fast and no wait until the sender is online!" = "Schnell und ohne warten auf den Absender, bis er online ist!"; "Fast and no wait until the sender is online!" = "Schnell und ohne warten auf den Absender, bis er online ist!";
/* No comment provided by engineer. */
"Faster joining and more reliable messages." = "Schnellerer Gruppenbeitritt und zuverlässigere Nachrichtenzustellung.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Favorite" = "Favorit"; "Favorite" = "Favorit";
@@ -1560,6 +1731,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"For console" = "Für Konsole"; "For console" = "Für Konsole";
/* No comment provided by engineer. */
"Found desktop" = "Gefundener Desktop";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"French interface" = "Französische Bedienoberfläche"; "French interface" = "Französische Bedienoberfläche";
@@ -1572,6 +1746,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Full name:" = "Vollständiger Name:"; "Full name:" = "Vollständiger Name:";
/* No comment provided by engineer. */
"Fully decentralized visible only to members." = "Vollständig dezentralisiert nur für Mitglieder sichtbar.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Fully re-implemented - work in background!" = "Komplett neu umgesetzt - arbeitet nun im Hintergrund!"; "Fully re-implemented - work in background!" = "Komplett neu umgesetzt - arbeitet nun im Hintergrund!";
@@ -1584,6 +1761,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Group" = "Gruppe"; "Group" = "Gruppe";
/* No comment provided by engineer. */
"Group already exists" = "Die Gruppe besteht bereits";
/* No comment provided by engineer. */
"Group already exists!" = "Die Gruppe besteht bereits!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"group deleted" = "Gruppe gelöscht"; "group deleted" = "Gruppe gelöscht";
@@ -1755,6 +1938,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incognito" = "Inkognito"; "Incognito" = "Inkognito";
/* No comment provided by engineer. */
"Incognito groups" = "Inkognito-Gruppen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incognito mode" = "Inkognito-Modus"; "Incognito mode" = "Inkognito-Modus";
@@ -1782,6 +1968,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incompatible database version" = "Inkompatible Datenbank-Version"; "Incompatible database version" = "Inkompatible Datenbank-Version";
/* No comment provided by engineer. */
"Incompatible version" = "Inkompatible Version";
/* PIN entry */ /* PIN entry */
"Incorrect passcode" = "Zugangscode ist falsch"; "Incorrect passcode" = "Zugangscode ist falsch";
@@ -1821,6 +2010,9 @@
/* invalid chat item */ /* invalid chat item */
"invalid data" = "Ungültige Daten"; "invalid data" = "Ungültige Daten";
/* No comment provided by engineer. */
"Invalid name!" = "Ungültiger Name!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Invalid server address!" = "Ungültige Serveradresse!"; "Invalid server address!" = "Ungültige Serveradresse!";
@@ -1879,7 +2071,7 @@
"It can happen when:\n1. The messages expired in the sending client after 2 days or on the server after 30 days.\n2. Message decryption failed, because you or your contact used old database backup.\n3. The connection was compromised." = "Dies kann unter folgenden Umständen passieren:\n1. Die Nachrichten verfallen auf dem sendenden Client-System nach 2 Tagen oder auf dem Server nach 30 Tagen.\n2. Die Nachrichten-Entschlüsselung ist fehlgeschlagen, da von Ihnen oder Ihrem Kontakt ein altes Datenbank-Backup genutzt wurde.\n3. Die Verbindung wurde kompromittiert."; "It can happen when:\n1. The messages expired in the sending client after 2 days or on the server after 30 days.\n2. Message decryption failed, because you or your contact used old database backup.\n3. The connection was compromised." = "Dies kann unter folgenden Umständen passieren:\n1. Die Nachrichten verfallen auf dem sendenden Client-System nach 2 Tagen oder auf dem Server nach 30 Tagen.\n2. Die Nachrichten-Entschlüsselung ist fehlgeschlagen, da von Ihnen oder Ihrem Kontakt ein altes Datenbank-Backup genutzt wurde.\n3. Die Verbindung wurde kompromittiert.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"It seems like you are already connected via this link. If it is not the case, there was an error (%@)." = "Es sieht so aus, dass Sie bereits über diesen Link verbunden sind. Wenn das nicht der Fall, gab es einen Fehler (%@)."; "It seems like you are already connected via this link. If it is not the case, there was an error (%@)." = "Es sieht so aus, als ob Sie bereits über diesen Link verbunden sind. Wenn das nicht der Fall ist, gab es einen Fehler (%@).";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Italian interface" = "Italienische Bedienoberfläche"; "Italian interface" = "Italienische Bedienoberfläche";
@@ -1899,12 +2091,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Join group" = "Treten Sie der Gruppe bei"; "Join group" = "Treten Sie der Gruppe bei";
/* No comment provided by engineer. */
"Join group?" = "Der Gruppe beitreten?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Join incognito" = "Inkognito beitreten"; "Join incognito" = "Inkognito beitreten";
/* No comment provided by engineer. */
"Join with current profile" = "Mit dem aktuellen Profil beitreten";
/* No comment provided by engineer. */
"Join your group?\nThis is your link for group %@!" = "Ihrer Gruppe beitreten?\nDas ist Ihr Link für die Gruppe %@!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Joining group" = "Der Gruppe beitreten"; "Joining group" = "Der Gruppe beitreten";
/* No comment provided by engineer. */
"Keep the app open to use it from desktop" = "Die App muss geöffnet bleiben, um sie vom Desktop aus nutzen zu können";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Keep your connections" = "Ihre Verbindungen beibehalten"; "Keep your connections" = "Ihre Verbindungen beibehalten";
@@ -1941,6 +2145,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Limitations" = "Einschränkungen"; "Limitations" = "Einschränkungen";
/* No comment provided by engineer. */
"Link mobile and desktop apps! 🔗" = "Verknüpfe Mobiltelefon- und Desktop-Apps! 🔗";
/* No comment provided by engineer. */
"Linked desktop options" = "Verknüpfte Desktop-Optionen";
/* No comment provided by engineer. */
"Linked desktops" = "Verknüpfte Desktops";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"LIVE" = "LIVE"; "LIVE" = "LIVE";
@@ -2046,6 +2259,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Messages & files" = "Nachrichten"; "Messages & files" = "Nachrichten";
/* No comment provided by engineer. */
"Messages from %@ will be shown!" = "Die Nachrichten von %@ werden angezeigt!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Migrating database archive…" = "Datenbank-Archiv wird migriert…"; "Migrating database archive…" = "Datenbank-Archiv wird migriert…";
@@ -2127,6 +2343,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"New database archive" = "Neues Datenbankarchiv"; "New database archive" = "Neues Datenbankarchiv";
/* No comment provided by engineer. */
"New desktop app!" = "Neue Desktop-App!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"New display name" = "Neuer Anzeigename"; "New display name" = "Neuer Anzeigename";
@@ -2190,6 +2409,9 @@
/* copied message info in history */ /* copied message info in history */
"no text" = "Kein Text"; "no text" = "Kein Text";
/* No comment provided by engineer. */
"Not compatible!" = "Nicht kompatibel!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Notifications" = "Benachrichtigungen"; "Notifications" = "Benachrichtigungen";
@@ -2203,7 +2425,8 @@
"observer" = "Beobachter"; "observer" = "Beobachter";
/* enabled status /* enabled status
group pref value */ group pref value
time to disappear */
"off" = "Aus"; "off" = "Aus";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@@ -2284,12 +2507,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Only your contact can send voice messages." = "Nur Ihr Kontakt kann Sprachnachrichten versenden."; "Only your contact can send voice messages." = "Nur Ihr Kontakt kann Sprachnachrichten versenden.";
/* No comment provided by engineer. */
"Open" = "Öffnen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open chat" = "Chat öffnen"; "Open chat" = "Chat öffnen";
/* authentication reason */ /* authentication reason */
"Open chat console" = "Chat-Konsole öffnen"; "Open chat console" = "Chat-Konsole öffnen";
/* No comment provided by engineer. */
"Open group" = "Gruppe öffnen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open Settings" = "Geräte-Einstellungen öffnen"; "Open Settings" = "Geräte-Einstellungen öffnen";
@@ -2302,12 +2531,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Opening database…" = "Öffne Datenbank …"; "Opening database…" = "Öffne Datenbank …";
/* No comment provided by engineer. */
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Das Öffnen des Links über den Browser kann die Privatsphäre und Sicherheit der Verbindung reduzieren. SimpleX-Links, denen nicht vertraut wird, werden Rot sein.";
/* No comment provided by engineer. */
"or chat with the developers" = "oder chatten Sie mit den Entwicklern";
/* member role */ /* member role */
"owner" = "Eigentümer"; "owner" = "Eigentümer";
@@ -2332,6 +2555,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Paste" = "Einfügen"; "Paste" = "Einfügen";
/* No comment provided by engineer. */
"Paste desktop address" = "Desktop-Adresse einfügen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Paste image" = "Bild einfügen"; "Paste image" = "Bild einfügen";
@@ -2428,6 +2654,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Profile image" = "Profilbild"; "Profile image" = "Profilbild";
/* No comment provided by engineer. */
"Profile name" = "Profilname";
/* No comment provided by engineer. */
"Profile name:" = "Profilname:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Profile password" = "Passwort für Profil"; "Profile password" = "Passwort für Profil";
@@ -2593,6 +2825,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Renegotiate encryption?" = "Verschlüsselung neu aushandeln?"; "Renegotiate encryption?" = "Verschlüsselung neu aushandeln?";
/* No comment provided by engineer. */
"Repeat connection request?" = "Verbindungsanfrage wiederholen?";
/* No comment provided by engineer. */
"Repeat join request?" = "Verbindungsanfrage wiederholen?";
/* chat item action */ /* chat item action */
"Reply" = "Antwort"; "Reply" = "Antwort";
@@ -2704,6 +2942,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Scan QR code" = "QR-Code scannen"; "Scan QR code" = "QR-Code scannen";
/* No comment provided by engineer. */
"Scan QR code from desktop" = "Den QR-Code vom Desktop scannen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Scan security code from your contact's app." = "Scannen Sie den Sicherheitscode von der App Ihres Kontakts."; "Scan security code from your contact's app." = "Scannen Sie den Sicherheitscode von der App Ihres Kontakts.";
@@ -2758,9 +2999,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send delivery receipts to" = "Empfangsbestätigungen senden an"; "Send delivery receipts to" = "Empfangsbestätigungen senden an";
/* No comment provided by engineer. */
"send direct message" = "Direktnachricht senden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send direct message" = "Direktnachricht senden"; "Send direct message" = "Direktnachricht senden";
/* No comment provided by engineer. */
"Send direct message to connect" = "Eine Direktnachricht zum Verbinden senden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send disappearing message" = "Verschwindende Nachricht senden"; "Send disappearing message" = "Verschwindende Nachricht senden";
@@ -2842,6 +3089,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Servers" = "Server"; "Servers" = "Server";
/* No comment provided by engineer. */
"Session code" = "Sitzungscode";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Set 1 day" = "Einen Tag festlegen"; "Set 1 day" = "Einen Tag festlegen";
@@ -2941,6 +3191,9 @@
/* simplex link type */ /* simplex link type */
"SimpleX one-time invitation" = "SimpleX-Einmal-Einladung"; "SimpleX one-time invitation" = "SimpleX-Einmal-Einladung";
/* No comment provided by engineer. */
"Simplified incognito mode" = "Vereinfachter Inkognito-Modus";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Skip" = "Überspringen"; "Skip" = "Überspringen";
@@ -3025,6 +3278,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Tap to activate profile." = "Tippen Sie auf das Profil um es zu aktivieren."; "Tap to activate profile." = "Tippen Sie auf das Profil um es zu aktivieren.";
/* No comment provided by engineer. */
"Tap to Connect" = "Zum Verbinden antippen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Tap to join" = "Zum Beitreten tippen"; "Tap to join" = "Zum Beitreten tippen";
@@ -3088,9 +3344,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Die Verschlüsselung funktioniert und ein neues Verschlüsselungsabkommen ist nicht erforderlich. Es kann zu Verbindungsfehlern kommen!"; "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Die Verschlüsselung funktioniert und ein neues Verschlüsselungsabkommen ist nicht erforderlich. Es kann zu Verbindungsfehlern kommen!";
/* No comment provided by engineer. */
"The group is fully decentralized it is visible only to the members." = "Die Gruppe ist vollständig dezentralisiert sie ist nur für Mitglieder sichtbar.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The hash of the previous message is different." = "Der Hash der vorherigen Nachricht unterscheidet sich."; "The hash of the previous message is different." = "Der Hash der vorherigen Nachricht unterscheidet sich.";
@@ -3148,12 +3401,21 @@
/* notification title */ /* notification title */
"this contact" = "Dieser Kontakt"; "this contact" = "Dieser Kontakt";
/* No comment provided by engineer. */
"This device name" = "Dieser Gerätename";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This group has over %lld members, delivery receipts are not sent." = "Es werden keine Empfangsbestätigungen gesendet, da diese Gruppe über %lld Mitglieder hat."; "This group has over %lld members, delivery receipts are not sent." = "Es werden keine Empfangsbestätigungen gesendet, da diese Gruppe über %lld Mitglieder hat.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This group no longer exists." = "Diese Gruppe existiert nicht mehr."; "This group no longer exists." = "Diese Gruppe existiert nicht mehr.";
/* No comment provided by engineer. */
"This is your own one-time link!" = "Das ist Ihr eigener Einmal-Link!";
/* No comment provided by engineer. */
"This is your own SimpleX address!" = "Das ist Ihre eigene SimpleX-Adresse!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This setting applies to messages in your current chat profile **%@**." = "Diese Einstellung gilt für Nachrichten in Ihrem aktuellen Chat-Profil **%@**."; "This setting applies to messages in your current chat profile **%@**." = "Diese Einstellung gilt für Nachrichten in Ihrem aktuellen Chat-Profil **%@**.";
@@ -3163,6 +3425,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To connect, your contact can scan QR code or use the link in the app." = "Um eine Verbindung herzustellen, kann Ihr Kontakt den QR-Code scannen oder den Link in der App verwenden."; "To connect, your contact can scan QR code or use the link in the app." = "Um eine Verbindung herzustellen, kann Ihr Kontakt den QR-Code scannen oder den Link in der App verwenden.";
/* No comment provided by engineer. */
"To hide unwanted messages." = "Um unerwünschte Nachrichten zu verbergen.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To make a new connection" = "Um eine Verbindung mit einem neuen Kontakt zu erstellen"; "To make a new connection" = "Um eine Verbindung mit einem neuen Kontakt zu erstellen";
@@ -3179,7 +3444,7 @@
"To record voice message please grant permission to use Microphone." = "Bitte erlauben Sie die Nutzung des Mikrofons, um Sprachnachrichten aufnehmen zu können."; "To record voice message please grant permission to use Microphone." = "Bitte erlauben Sie die Nutzung des Mikrofons, um Sprachnachrichten aufnehmen zu können.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Geben Sie ein vollständiges Passwort in das Suchfeld auf der Seite **Meine Chat-Profile** ein, um Ihr verborgenes Profil zu sehen."; "To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Geben Sie ein vollständiges Passwort in das Suchfeld auf der Seite **Ihre Chat-Profile** ein, um Ihr verborgenes Profil zu sehen.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To support instant push notifications the chat database has to be migrated." = "Um sofortige Push-Benachrichtigungen zu unterstützen, muss die Chat-Datenbank migriert werden."; "To support instant push notifications the chat database has to be migrated." = "Um sofortige Push-Benachrichtigungen zu unterstützen, muss die Chat-Datenbank migriert werden.";
@@ -3187,6 +3452,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Um die Ende-zu-Ende-Verschlüsselung mit Ihrem Kontakt zu überprüfen, müssen Sie den Sicherheitscode in Ihren Apps vergleichen oder scannen."; "To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Um die Ende-zu-Ende-Verschlüsselung mit Ihrem Kontakt zu überprüfen, müssen Sie den Sicherheitscode in Ihren Apps vergleichen oder scannen.";
/* No comment provided by engineer. */
"Toggle incognito when connecting." = "Inkognito beim Verbinden einschalten.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Transport isolation" = "Transport-Isolation"; "Transport isolation" = "Transport-Isolation";
@@ -3208,6 +3476,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unable to record voice message" = "Die Aufnahme einer Sprachnachricht ist nicht möglich"; "Unable to record voice message" = "Die Aufnahme einer Sprachnachricht ist nicht möglich";
/* No comment provided by engineer. */
"Unblock" = "Freigeben";
/* No comment provided by engineer. */
"Unblock member" = "Mitglied freigeben";
/* No comment provided by engineer. */
"Unblock member?" = "Mitglied freigeben?";
/* item status description */ /* item status description */
"Unexpected error: %@" = "Unerwarteter Fehler: %@"; "Unexpected error: %@" = "Unerwarteter Fehler: %@";
@@ -3247,6 +3524,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Entweder hat Ihr Kontakt die Verbindung gelöscht, oder dieser Link wurde bereits verwendet, es könnte sich um einen Fehler handeln - Bitte melden Sie es uns.\nBitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um sich neu verbinden zu können und stellen Sie sicher, dass Sie eine stabile Netzwerk-Verbindung haben."; "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Entweder hat Ihr Kontakt die Verbindung gelöscht, oder dieser Link wurde bereits verwendet, es könnte sich um einen Fehler handeln - Bitte melden Sie es uns.\nBitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um sich neu verbinden zu können und stellen Sie sicher, dass Sie eine stabile Netzwerk-Verbindung haben.";
/* No comment provided by engineer. */
"Unlink" = "Entkoppeln";
/* No comment provided by engineer. */
"Unlink desktop?" = "Desktop entkoppeln?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unlock" = "Entsperren"; "Unlock" = "Entsperren";
@@ -3301,6 +3584,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use for new connections" = "Für neue Verbindungen nutzen"; "Use for new connections" = "Für neue Verbindungen nutzen";
/* No comment provided by engineer. */
"Use from desktop" = "Vom Desktop aus nutzen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use iOS call interface" = "iOS Anrufschnittstelle nutzen"; "Use iOS call interface" = "iOS Anrufschnittstelle nutzen";
@@ -3322,12 +3608,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Using SimpleX Chat servers." = "Verwendung von SimpleX-Chat-Servern."; "Using SimpleX Chat servers." = "Verwendung von SimpleX-Chat-Servern.";
/* No comment provided by engineer. */
"v%@" = "v%@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"v%@ (%@)" = "v%@ (%@)"; "v%@ (%@)" = "v%@ (%@)";
/* No comment provided by engineer. */
"Verify code with desktop" = "Code mit dem Desktop überprüfen";
/* No comment provided by engineer. */
"Verify connection" = "Verbindung überprüfen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Verify connection security" = "Sicherheit der Verbindung überprüfen"; "Verify connection security" = "Sicherheit der Verbindung überprüfen";
/* No comment provided by engineer. */
"Verify connections" = "Verbindungen überprüfen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Verify security code" = "Sicherheitscode überprüfen"; "Verify security code" = "Sicherheitscode überprüfen";
@@ -3346,6 +3644,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"via relay" = "über Relais"; "via relay" = "über Relais";
/* No comment provided by engineer. */
"Via secure quantum resistant protocol." = "Über ein sicheres quantenbeständiges Protokoll.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Video call" = "Videoanruf"; "Video call" = "Videoanruf";
@@ -3385,6 +3686,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"waiting for confirmation…" = "Warten auf Bestätigung…"; "waiting for confirmation…" = "Warten auf Bestätigung…";
/* No comment provided by engineer. */
"Waiting for desktop..." = "Es wird auf den Desktop gewartet...";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Waiting for file" = "Warte auf Datei"; "Waiting for file" = "Warte auf Datei";
@@ -3440,7 +3744,7 @@
"yes" = "Ja"; "yes" = "Ja";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You" = "Meine Daten"; "You" = "Ihre Daten";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You accepted connection" = "Sie haben die Verbindung akzeptiert"; "You accepted connection" = "Sie haben die Verbindung akzeptiert";
@@ -3454,6 +3758,27 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You are already connected to %@." = "Sie sind bereits mit %@ verbunden."; "You are already connected to %@." = "Sie sind bereits mit %@ verbunden.";
/* No comment provided by engineer. */
"You are already connecting to %@." = "Sie sind bereits mit %@ verbunden.";
/* No comment provided by engineer. */
"You are already connecting via this one-time link!" = "Sie sind bereits über diesen Einmal-Link verbunden!";
/* No comment provided by engineer. */
"You are already in group %@." = "Sie sind bereits Mitglied der Gruppe %@.";
/* No comment provided by engineer. */
"You are already joining the group %@." = "Sie sind bereits Mitglied der Gruppe %@.";
/* No comment provided by engineer. */
"You are already joining the group via this link!" = "Sie sind über diesen Link bereits Mitglied der Gruppe!";
/* No comment provided by engineer. */
"You are already joining the group via this link." = "Sie sind über diesen Link bereits Mitglied der Gruppe.";
/* No comment provided by engineer. */
"You are already joining the group!\nRepeat join request?" = "Sie sind bereits Mitglied dieser Gruppe!\nVerbindungsanfrage wiederholen?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You are connected to the server used to receive messages from this contact." = "Sie sind mit dem Server verbunden, der für den Empfang von Nachrichten mit diesem Kontakt genutzt wird."; "You are connected to the server used to receive messages from this contact." = "Sie sind mit dem Server verbunden, der für den Empfang von Nachrichten mit diesem Kontakt genutzt wird.";
@@ -3529,6 +3854,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You could not be verified; please try again." = "Sie konnten nicht überprüft werden; bitte versuchen Sie es erneut."; "You could not be verified; please try again." = "Sie konnten nicht überprüft werden; bitte versuchen Sie es erneut.";
/* No comment provided by engineer. */
"You have already requested connection via this address!" = "Sie haben über diese Adresse bereits eine Verbindung beantragt!";
/* No comment provided by engineer. */
"You have already requested connection!\nRepeat connection request?" = "Sie haben bereits ein Verbindungsanfrage beantragt!\nVerbindungsanfrage wiederholen?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You have no chats" = "Sie haben keine Chats"; "You have no chats" = "Sie haben keine Chats";
@@ -3571,6 +3902,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be connected to group when the group host's device is online, please wait or check later!" = "Sie werden mit der Gruppe verbunden, sobald das Endgerät des Gruppen-Hosts online ist. Bitte warten oder schauen Sie später nochmal nach!"; "You will be connected to group when the group host's device is online, please wait or check later!" = "Sie werden mit der Gruppe verbunden, sobald das Endgerät des Gruppen-Hosts online ist. Bitte warten oder schauen Sie später nochmal nach!";
/* No comment provided by engineer. */
"You will be connected when group link host's device is online, please wait or check later!" = "Sie werden verbunden, sobald das Endgerät des Gruppenlink-Hosts online ist. Bitte warten oder schauen Sie später nochmal nach!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be connected when your connection request is accepted, please wait or check later!" = "Sie werden verbunden, sobald Ihre Verbindungsanfrage akzeptiert wird. Bitte warten oder schauen Sie später nochmal nach!"; "You will be connected when your connection request is accepted, please wait or check later!" = "Sie werden verbunden, sobald Ihre Verbindungsanfrage akzeptiert wird. Bitte warten oder schauen Sie später nochmal nach!";
@@ -3581,7 +3915,7 @@
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Sie müssen sich authentifizieren, wenn Sie die im Hintergrund befindliche App nach 30 Sekunden starten oder fortsetzen."; "You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Sie müssen sich authentifizieren, wenn Sie die im Hintergrund befindliche App nach 30 Sekunden starten oder fortsetzen.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will join a group this link refers to and connect to its group members." = "Sie werden der Gruppe beitreten, auf die sich dieser Link bezieht und sich mit deren Gruppenmitgliedern verbinden."; "You will connect to all group members." = "Sie werden mit allen Gruppenmitgliedern verbunden.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "Sie können Anrufe und Benachrichtigungen auch von stummgeschalteten Profilen empfangen, solange diese aktiv sind."; "You will still receive calls and notifications from muted profiles when they are active." = "Sie können Anrufe und Benachrichtigungen auch von stummgeschalteten Profilen empfangen, solange diese aktiv sind.";
@@ -3614,10 +3948,7 @@
"Your chat database is not encrypted - set passphrase to encrypt it." = "Ihre Chat-Datenbank ist nicht verschlüsselt. Bitte legen Sie ein Passwort fest, um sie zu schützen."; "Your chat database is not encrypted - set passphrase to encrypt it." = "Ihre Chat-Datenbank ist nicht verschlüsselt. Bitte legen Sie ein Passwort fest, um sie zu schützen.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "Ihr Chat-Profil wird an Gruppenmitglieder gesendet"; "Your chat profiles" = "Ihre Chat-Profile";
/* No comment provided by engineer. */
"Your chat profiles" = "Meine Chat-Profile";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Damit die Verbindung hergestellt werden kann, muss Ihr Kontakt online sein.\nSie können diese Verbindung abbrechen und den Kontakt entfernen (und es später nochmals mit einem neuen Link versuchen)."; "Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Damit die Verbindung hergestellt werden kann, muss Ihr Kontakt online sein.\nSie können diese Verbindung abbrechen und den Kontakt entfernen (und es später nochmals mit einem neuen Link versuchen).";
@@ -3644,10 +3975,13 @@
"Your ICE servers" = "Ihre ICE-Server"; "Your ICE servers" = "Ihre ICE-Server";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your preferences" = "Meine Präferenzen"; "Your preferences" = "Ihre Präferenzen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your privacy" = "Meine Privatsphäre"; "Your privacy" = "Ihre Privatsphäre";
/* No comment provided by engineer. */
"Your profile" = "Mein Profil";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your profile **%@** will be shared." = "Ihr Profil **%@** wird geteilt."; "Your profile **%@** will be shared." = "Ihr Profil **%@** wird geteilt.";
@@ -3668,10 +4002,10 @@
"Your server address" = "Ihre Serveradresse"; "Your server address" = "Ihre Serveradresse";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your settings" = "Meine Einstellungen"; "Your settings" = "Ihre Einstellungen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your SimpleX address" = "Meine SimpleX-Adresse"; "Your SimpleX address" = "Ihre SimpleX-Adresse";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your SMP servers" = "Ihre SMP-Server"; "Your SMP servers" = "Ihre SMP-Server";
@@ -7,6 +7,9 @@
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "Face ID wird von SimpleX für die lokale Authentifizierung genutzt"; "NSFaceIDUsageDescription" = "Face ID wird von SimpleX für die lokale Authentifizierung genutzt";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX nutzt den lokalen Netzwerkzugriff, um die Nutzung von Benutzer-Chatprofilen über eine Desktop-App im gleichen Netzwerk zu erlauben.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX benötigt Zugriff auf das Mikrofon, um Audio- und Videoanrufe und die Aufnahme von Sprachnachrichten zu ermöglichen."; "NSMicrophoneUsageDescription" = "SimpleX benötigt Zugriff auf das Mikrofon, um Audio- und Videoanrufe und die Aufnahme von Sprachnachrichten zu ermöglichen.";
+58 -39
View File
@@ -19,6 +19,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"_italic_" = "\\_italic_"; "_italic_" = "\\_italic_";
/* No comment provided by engineer. */
"- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- delivery receipts (up to 20 members).\n- faster and more stable." = "- conexión al [servicio de directorio](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- confirmaciones de entrega (hasta 20 miembros).\n- mayor rapidez y estabilidad.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- more stable message delivery.\n- a bit better groups.\n- and more!" = "- entrega de mensajes más estable.\n- grupos un poco mejores.\n- ¡y más!"; "- more stable message delivery.\n- a bit better groups.\n- and more!" = "- entrega de mensajes más estable.\n- grupos un poco mejores.\n- ¡y más!";
@@ -181,6 +184,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld minutes" = "%lld minutos"; "%lld minutes" = "%lld minutos";
/* No comment provided by engineer. */
"%lld new interface languages" = "%lld idiomas de interfaz nuevos";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld second(s)" = "%lld segundo(s)"; "%lld second(s)" = "%lld segundo(s)";
@@ -209,10 +215,10 @@
"%lldw" = "%lldw"; "%lldw" = "%lldw";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%u messages failed to decrypt." = "%u mensajes no pudieron ser descifrados."; "%u messages failed to decrypt." = "%u mensaje(s) no ha(n) podido ser descifrado(s).";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%u messages skipped." = "%u mensajes omitidos."; "%u messages skipped." = "%u mensaje(s) omitido(s).";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"`a + b`" = "\\`a + b`"; "`a + b`" = "\\`a + b`";
@@ -443,6 +449,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"App build: %@" = "Compilación app: %@"; "App build: %@" = "Compilación app: %@";
/* No comment provided by engineer. */
"App encrypts new local files (except videos)." = "Cifrado de los nuevos archivos locales (excepto vídeos).";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"App icon" = "Icono aplicación"; "App icon" = "Icono aplicación";
@@ -536,6 +545,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Both you and your contact can send voice messages." = "Tanto tú como tu contacto podéis enviar mensajes de voz."; "Both you and your contact can send voice messages." = "Tanto tú como tu contacto podéis enviar mensajes de voz.";
/* No comment provided by engineer. */
"Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" = "Búlgaro, Finlandés, Tailandés y Ucraniano - gracias a los usuarios y [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Mediante perfil (por defecto) o [por conexión](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Mediante perfil (por defecto) o [por conexión](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).";
@@ -708,21 +720,12 @@
/* server test step */ /* server test step */
"Connect" = "Conectar"; "Connect" = "Conectar";
/* No comment provided by engineer. */
"Connect directly" = "Conectar directamente";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect incognito" = "Conectar incognito"; "Connect incognito" = "Conectar incognito";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "contacta con los desarrolladores de SimpleX Chat."; "connect to SimpleX Chat developers." = "contacta con los desarrolladores de SimpleX Chat.";
/* No comment provided by engineer. */
"Connect via contact link" = "Conectar mediante enlace de contacto";
/* No comment provided by engineer. */
"Connect via group link?" = "¿Conectar mediante enlace de grupo?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via link" = "Conectar mediante enlace"; "Connect via link" = "Conectar mediante enlace";
@@ -735,6 +738,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connected" = "conectado"; "connected" = "conectado";
/* rcv group event chat item */
"connected directly" = "conectado directamente";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connecting" = "conectando"; "connecting" = "conectando";
@@ -789,9 +795,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Contact already exists" = "El contácto ya existe"; "Contact already exists" = "El contácto ya existe";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "El contacto y todos los mensajes serán eliminados. ¡No podrá deshacerse!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"contact has e2e encryption" = "el contacto dispone de cifrado de extremo a extremo"; "contact has e2e encryption" = "el contacto dispone de cifrado de extremo a extremo";
@@ -843,6 +846,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create link" = "Crear enlace"; "Create link" = "Crear enlace";
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Crea perfil nuevo en la [aplicación para PC](https://simplex.Descargas/de chat/). 💻";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create one-time invitation link" = "Crea enlace de invitación de un uso"; "Create one-time invitation link" = "Crea enlace de invitación de un uso";
@@ -993,9 +999,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete Contact" = "Eliminar contacto"; "Delete Contact" = "Eliminar contacto";
/* No comment provided by engineer. */
"Delete contact?" = "Eliminar contacto?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete database" = "Eliminar base de datos"; "Delete database" = "Eliminar base de datos";
@@ -1150,10 +1153,7 @@
"Disconnect" = "Desconectar"; "Disconnect" = "Desconectar";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Display name" = "Nombre mostrado"; "Discover and join groups" = "Descubre y únete a grupos";
/* No comment provided by engineer. */
"Display name:" = "Nombre mostrado:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Do it later" = "Hacer más tarde"; "Do it later" = "Hacer más tarde";
@@ -1245,6 +1245,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Encrypt database?" = "¿Cifrar base de datos?"; "Encrypt database?" = "¿Cifrar base de datos?";
/* No comment provided by engineer. */
"Encrypt local files" = "Cifra archivos locales";
/* No comment provided by engineer. */
"Encrypt stored files & media" = "Cifra archivos almacenados y multimedia";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Encrypted database" = "Base de datos cifrada"; "Encrypted database" = "Base de datos cifrada";
@@ -1353,9 +1359,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating group link" = "Error al crear enlace de grupo"; "Error creating group link" = "Error al crear enlace de grupo";
/* No comment provided by engineer. */
"Error creating member contact" = "Error al establecer contacto con el miembro";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating profile!" = "¡Error al crear perfil!"; "Error creating profile!" = "¡Error al crear perfil!";
/* No comment provided by engineer. */
"Error decrypting file" = "Error al descifrar el archivo";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error deleting chat database" = "Error al eliminar base de datos"; "Error deleting chat database" = "Error al eliminar base de datos";
@@ -1428,6 +1440,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending email" = "Error al enviar email"; "Error sending email" = "Error al enviar email";
/* No comment provided by engineer. */
"Error sending member contact invitation" = "Error al enviar mensaje de invitación al contacto";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending message" = "Error al enviar mensaje"; "Error sending message" = "Error al enviar mensaje";
@@ -1645,10 +1660,10 @@
"Group welcome message" = "Mensaje de bienvenida en grupos"; "Group welcome message" = "Mensaje de bienvenida en grupos";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Group will be deleted for all members - this cannot be undone!" = "El grupo se elimina para todos los miembros. ¡No podrá deshacerse!"; "Group will be deleted for all members - this cannot be undone!" = "El grupo se eliminado para todos los miembros. ¡No podrá deshacerse!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Group will be deleted for you - this cannot be undone!" = "El grupo se elimina para tí. ¡No podrá deshacerse!"; "Group will be deleted for you - this cannot be undone!" = "El grupo se eliminado para tí. ¡No podrá deshacerse!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Help" = "Ayuda"; "Help" = "Ayuda";
@@ -2121,6 +2136,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"New database archive" = "Nuevo archivo de bases de datos"; "New database archive" = "Nuevo archivo de bases de datos";
/* No comment provided by engineer. */
"New desktop app!" = "Nueva aplicación para PC!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"New display name" = "Nuevo nombre mostrado"; "New display name" = "Nuevo nombre mostrado";
@@ -2197,7 +2215,8 @@
"observer" = "observador"; "observer" = "observador";
/* enabled status /* enabled status
group pref value */ group pref value
time to disappear */
"off" = "desactivado"; "off" = "desactivado";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@@ -2278,6 +2297,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Only your contact can send voice messages." = "Sólo tu contacto puede enviar mensajes de voz."; "Only your contact can send voice messages." = "Sólo tu contacto puede enviar mensajes de voz.";
/* No comment provided by engineer. */
"Open" = "Abrir";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open chat" = "Abrir chat"; "Open chat" = "Abrir chat";
@@ -2296,12 +2318,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Opening database…" = "Abriendo base de datos…"; "Opening database…" = "Abriendo base de datos…";
/* No comment provided by engineer. */
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Abrir el enlace en el navegador puede reducir la privacidad y seguridad de la conexión. Los enlaces SimpleX que no son de confianza aparecerán en rojo.";
/* No comment provided by engineer. */
"or chat with the developers" = "o contacta mediante Chat con los desarrolladores";
/* member role */ /* member role */
"owner" = "propietario"; "owner" = "propietario";
@@ -2752,9 +2768,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send delivery receipts to" = "Enviar confirmaciones de entrega a"; "Send delivery receipts to" = "Enviar confirmaciones de entrega a";
/* No comment provided by engineer. */
"send direct message" = "Enviar mensaje directo";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send direct message" = "Enviar mensaje directo"; "Send direct message" = "Enviar mensaje directo";
/* No comment provided by engineer. */
"Send direct message to connect" = "Enviar mensaje directo para conectar";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send disappearing message" = "Enviar mensaje temporal"; "Send disappearing message" = "Enviar mensaje temporal";
@@ -2935,6 +2957,9 @@
/* simplex link type */ /* simplex link type */
"SimpleX one-time invitation" = "Invitación SimpleX de un uso"; "SimpleX one-time invitation" = "Invitación SimpleX de un uso";
/* No comment provided by engineer. */
"Simplified incognito mode" = "Modo incógnito simplificado";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Skip" = "Omitir"; "Skip" = "Omitir";
@@ -3082,9 +3107,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "El cifrado funciona y un cifrado nuevo no es necesario. ¡Podría dar lugar a errores de conexión!"; "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "El cifrado funciona y un cifrado nuevo no es necesario. ¡Podría dar lugar a errores de conexión!";
/* No comment provided by engineer. */
"The group is fully decentralized it is visible only to the members." = "El grupo está totalmente descentralizado y sólo es visible para los miembros.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The hash of the previous message is different." = "El hash del mensaje anterior es diferente."; "The hash of the previous message is different." = "El hash del mensaje anterior es diferente.";
@@ -3181,6 +3203,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Para comprobar el cifrado de extremo a extremo con tu contacto compara (o escanea) el código en tus dispositivos."; "To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Para comprobar el cifrado de extremo a extremo con tu contacto compara (o escanea) el código en tus dispositivos.";
/* No comment provided by engineer. */
"Toggle incognito when connecting." = "Activa incógnito al conectar.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Transport isolation" = "Aislamiento de transporte"; "Transport isolation" = "Aislamiento de transporte";
@@ -3574,9 +3599,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Se te pedirá identificarte cuándo inicies o continues usando la aplicación tras 30 segundos en segundo plano."; "You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Se te pedirá identificarte cuándo inicies o continues usando la aplicación tras 30 segundos en segundo plano.";
/* No comment provided by engineer. */
"You will join a group this link refers to and connect to its group members." = "Te unirás al grupo al que hace referencia este enlace y te conectarás con sus miembros.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "Seguirás recibiendo llamadas y notificaciones de los perfiles silenciados cuando estén activos."; "You will still receive calls and notifications from muted profiles when they are active." = "Seguirás recibiendo llamadas y notificaciones de los perfiles silenciados cuando estén activos.";
@@ -3607,9 +3629,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat database is not encrypted - set passphrase to encrypt it." = "La base de datos no está cifrada - establece una contraseña para cifrarla."; "Your chat database is not encrypted - set passphrase to encrypt it." = "La base de datos no está cifrada - establece una contraseña para cifrarla.";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "Tu perfil será enviado a los miembros del grupo";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat profiles" = "Mis perfiles"; "Your chat profiles" = "Mis perfiles";
+9 -35
View File
@@ -181,6 +181,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld minutes" = "%lld minuuttia"; "%lld minutes" = "%lld minuuttia";
/* No comment provided by engineer. */
"%lld new interface languages" = "%lld uutta käyttöliittymän kieltä";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld second(s)" = "%lld sekunti(a)"; "%lld second(s)" = "%lld sekunti(a)";
@@ -708,21 +711,12 @@
/* server test step */ /* server test step */
"Connect" = "Yhdistä"; "Connect" = "Yhdistä";
/* No comment provided by engineer. */
"Connect directly" = "Yhdistä suoraan";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect incognito" = "Yhdistä Incognito"; "Connect incognito" = "Yhdistä Incognito";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "ole yhteydessä SimpleX Chat -kehittäjiin."; "connect to SimpleX Chat developers." = "ole yhteydessä SimpleX Chat -kehittäjiin.";
/* No comment provided by engineer. */
"Connect via contact link" = "Yhdistä kontaktilinkillä";
/* No comment provided by engineer. */
"Connect via group link?" = "Yhdistetäänkö ryhmälinkin kautta?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via link" = "Yhdistä linkin kautta"; "Connect via link" = "Yhdistä linkin kautta";
@@ -789,9 +783,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Contact already exists" = "Kontakti on jo olemassa"; "Contact already exists" = "Kontakti on jo olemassa";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "Kontakti ja kaikki viestit poistetaan - tätä ei voi perua!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"contact has e2e encryption" = "kontaktilla on e2e-salaus"; "contact has e2e encryption" = "kontaktilla on e2e-salaus";
@@ -843,6 +834,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create link" = "Luo linkki"; "Create link" = "Luo linkki";
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Luo uusi profiili [työpöytäsovelluksessa](https://simplex.chat/downloads/). 💻";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create one-time invitation link" = "Luo kertakutsulinkki"; "Create one-time invitation link" = "Luo kertakutsulinkki";
@@ -993,9 +987,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete Contact" = "Poista kontakti"; "Delete Contact" = "Poista kontakti";
/* No comment provided by engineer. */
"Delete contact?" = "Poista kontakti?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete database" = "Poista tietokanta"; "Delete database" = "Poista tietokanta";
@@ -1150,10 +1141,7 @@
"Disconnect" = "Katkaise"; "Disconnect" = "Katkaise";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Display name" = "Näyttönimi"; "Discover and join groups" = "Löydä ryhmiä ja liity niihin";
/* No comment provided by engineer. */
"Display name:" = "Näyttönimi:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Do it later" = "Tee myöhemmin"; "Do it later" = "Tee myöhemmin";
@@ -2203,7 +2191,8 @@
"observer" = "tarkkailija"; "observer" = "tarkkailija";
/* enabled status /* enabled status
group pref value */ group pref value
time to disappear */
"off" = "pois"; "off" = "pois";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@@ -2302,12 +2291,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Opening database…" = "Avataan tietokantaa…"; "Opening database…" = "Avataan tietokantaa…";
/* No comment provided by engineer. */
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Linkin avaaminen selaimessa voi heikentää yhteyden yksityisyyttä ja turvallisuutta. Epäluotetut SimpleX-linkit näkyvät punaisina.";
/* No comment provided by engineer. */
"or chat with the developers" = "tai keskustele kehittäjien kanssa";
/* member role */ /* member role */
"owner" = "omistaja"; "owner" = "omistaja";
@@ -3088,9 +3071,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Salaus toimii ja uutta salaussopimusta ei tarvita. Tämä voi johtaa yhteysvirheisiin!"; "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Salaus toimii ja uutta salaussopimusta ei tarvita. Tämä voi johtaa yhteysvirheisiin!";
/* No comment provided by engineer. */
"The group is fully decentralized it is visible only to the members." = "Ryhmä on täysin hajautettu - se näkyy vain jäsenille.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The hash of the previous message is different." = "Edellisen viestin tarkiste on erilainen."; "The hash of the previous message is different." = "Edellisen viestin tarkiste on erilainen.";
@@ -3580,9 +3560,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Sinun on tunnistauduttava, kun käynnistät sovelluksen tai jatkat sen käyttöä 30 sekunnin tauon jälkeen."; "You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Sinun on tunnistauduttava, kun käynnistät sovelluksen tai jatkat sen käyttöä 30 sekunnin tauon jälkeen.";
/* No comment provided by engineer. */
"You will join a group this link refers to and connect to its group members." = "Liityt ryhmään, johon tämä linkki viittaa, ja muodostat yhteyden sen ryhmän jäseniin.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "Saat edelleen puheluita ja ilmoituksia mykistetyiltä profiileilta, kun ne ovat aktiivisia."; "You will still receive calls and notifications from muted profiles when they are active." = "Saat edelleen puheluita ja ilmoituksia mykistetyiltä profiileilta, kun ne ovat aktiivisia.";
@@ -3613,9 +3590,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat database is not encrypted - set passphrase to encrypt it." = "Keskustelut-tietokantasi ei ole salattu - aseta tunnuslause sen salaamiseksi."; "Your chat database is not encrypted - set passphrase to encrypt it." = "Keskustelut-tietokantasi ei ole salattu - aseta tunnuslause sen salaamiseksi.";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "Keskusteluprofiilisi lähetetään ryhmän jäsenille";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat profiles" = "Keskusteluprofiilisi"; "Your chat profiles" = "Keskusteluprofiilisi";
+330 -26
View File
@@ -25,6 +25,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- more stable message delivery.\n- a bit better groups.\n- and more!" = "- une diffusion plus stable des messages.\n- des groupes un peu plus performants.\n- et bien d'autres choses encore !"; "- more stable message delivery.\n- a bit better groups.\n- and more!" = "- une diffusion plus stable des messages.\n- des groupes un peu plus performants.\n- et bien d'autres choses encore !";
/* No comment provided by engineer. */
"- optionally notify deleted contacts.\n- profile names with spaces.\n- and more!" = "- option pour notifier les contacts supprimés.\n- noms de profil avec espaces.\n- et plus encore !";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- messages vocaux pouvant durer jusqu'à 5 minutes.\n- délai personnalisé de disparition.\n- l'historique de modification."; "- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- messages vocaux pouvant durer jusqu'à 5 minutes.\n- délai personnalisé de disparition.\n- l'historique de modification.";
@@ -43,6 +46,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"(" = "("; "(" = "(";
/* No comment provided by engineer. */
"(new)" = "(nouveau)";
/* No comment provided by engineer. */
"(this device v%@)" = "(cet appareil v%@)";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
")" = ")"; ")" = ")";
@@ -118,12 +127,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@ %@" = "%@ %@"; "%@ %@" = "%@ %@";
/* No comment provided by engineer. */
"%@ and %@" = "%@ et %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@ and %@ connected" = "%@ et %@ sont connecté.es"; "%@ and %@ connected" = "%@ et %@ sont connecté.es";
/* copied message info, <sender> at <time> */ /* copied message info, <sender> at <time> */
"%@ at %@:" = "%1$@ à %2$@:"; "%@ at %@:" = "%1$@ à %2$@:";
/* No comment provided by engineer. */
"%@ connected" = "%@ connecté(e)";
/* notification title */ /* notification title */
"%@ is connected!" = "%@ est connecté·e !"; "%@ is connected!" = "%@ est connecté·e !";
@@ -139,6 +154,9 @@
/* notification title */ /* notification title */
"%@ wants to connect!" = "%@ veut se connecter !"; "%@ wants to connect!" = "%@ veut se connecter !";
/* No comment provided by engineer. */
"%@, %@ and %lld members" = "%@, %@ et %lld membres";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@, %@ and %lld other members connected" = "%@, %@ et %lld autres membres sont connectés"; "%@, %@ and %lld other members connected" = "%@, %@ et %lld autres membres sont connectés";
@@ -178,9 +196,21 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld file(s) with total size of %@" = "%lld fichier·s pour une taille totale de %@"; "%lld file(s) with total size of %@" = "%lld fichier·s pour une taille totale de %@";
/* No comment provided by engineer. */
"%lld group events" = "%lld événements de groupe";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld members" = "%lld membres"; "%lld members" = "%lld membres";
/* No comment provided by engineer. */
"%lld messages blocked" = "%lld messages bloqués";
/* No comment provided by engineer. */
"%lld messages marked deleted" = "%lld messages marqués comme supprimés";
/* No comment provided by engineer. */
"%lld messages moderated by %@" = "%lld messages modérés par %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld minutes" = "%lld minutes"; "%lld minutes" = "%lld minutes";
@@ -229,6 +259,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"~strike~" = "\\~barré~"; "~strike~" = "\\~barré~";
/* time to disappear */
"0 sec" = "0 sec";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"0s" = "0s"; "0s" = "0s";
@@ -371,6 +404,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Tous les messages seront supprimés - impossible de revenir en arrière ! Les messages seront supprimés UNIQUEMENT pour vous."; "All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Tous les messages seront supprimés - impossible de revenir en arrière ! Les messages seront supprimés UNIQUEMENT pour vous.";
/* No comment provided by engineer. */
"All new messages from %@ will be hidden!" = "Tous les nouveaux messages de %@ seront cachés !";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"All your contacts will remain connected." = "Tous vos contacts resteront connectés."; "All your contacts will remain connected." = "Tous vos contacts resteront connectés.";
@@ -434,6 +470,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Already connected?" = "Déjà connecté ?"; "Already connected?" = "Déjà connecté ?";
/* No comment provided by engineer. */
"Already connecting!" = "Déjà en connexion !";
/* No comment provided by engineer. */
"Already joining the group!" = "Groupe déjà rejoint !";
/* pref value */ /* pref value */
"always" = "toujours"; "always" = "toujours";
@@ -443,6 +485,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"An empty chat profile with the provided name is created, and the app opens as usual." = "Un profil de chat vierge portant le nom fourni est créé et l'application s'ouvre normalement."; "An empty chat profile with the provided name is created, and the app opens as usual." = "Un profil de chat vierge portant le nom fourni est créé et l'application s'ouvre normalement.";
/* No comment provided by engineer. */
"and %lld other events" = "et %lld autres événements";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Answer call" = "Répondre à l'appel"; "Answer call" = "Répondre à l'appel";
@@ -500,6 +545,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Authentication unavailable" = "Authentification indisponible"; "Authentication unavailable" = "Authentification indisponible";
/* member role */
"author" = "auteur";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Auto-accept" = "Auto-accepter"; "Auto-accept" = "Auto-accepter";
@@ -512,6 +560,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Back" = "Retour"; "Back" = "Retour";
/* No comment provided by engineer. */
"Bad desktop address" = "Mauvaise adresse de bureau";
/* integrity error chat item */ /* integrity error chat item */
"bad message hash" = "hash de message incorrect"; "bad message hash" = "hash de message incorrect";
@@ -524,9 +575,27 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Bad message ID" = "Mauvais ID de message"; "Bad message ID" = "Mauvais ID de message";
/* No comment provided by engineer. */
"Better groups" = "Des groupes plus performants";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Better messages" = "Meilleurs messages"; "Better messages" = "Meilleurs messages";
/* No comment provided by engineer. */
"Block" = "Bloquer";
/* No comment provided by engineer. */
"Block group members" = "Bloquer des membres d'un groupe";
/* No comment provided by engineer. */
"Block member" = "Bloquer ce membre";
/* No comment provided by engineer. */
"Block member?" = "Bloquer ce membre ?";
/* No comment provided by engineer. */
"blocked" = "blocké";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"bold" = "gras"; "bold" = "gras";
@@ -721,19 +790,28 @@
"Connect" = "Se connecter"; "Connect" = "Se connecter";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect directly" = "Se connecter directement"; "Connect automatically" = "Connexion automatique";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect incognito" = "Se connecter incognito"; "Connect incognito" = "Se connecter incognito";
/* No comment provided by engineer. */
"Connect to desktop" = "Se connecter au bureau";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "se connecter aux developpeurs de SimpleX Chat."; "connect to SimpleX Chat developers." = "se connecter aux developpeurs de SimpleX Chat.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via contact link" = "Se connecter via un lien de contact"; "Connect to yourself?" = "Se connecter à soi-même ?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via group link?" = "Se connecter via le lien du groupe ?"; "Connect to yourself?\nThis is your own one-time link!" = "Se connecter à soi-même ?\nIl s'agit de votre propre lien unique !";
/* No comment provided by engineer. */
"Connect to yourself?\nThis is your own SimpleX address!" = "Se connecter à soi-même ?\nC'est votre propre adresse SimpleX !";
/* No comment provided by engineer. */
"Connect via contact address" = "Se connecter via l'adresse de contact";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via link" = "Se connecter via un lien"; "Connect via link" = "Se connecter via un lien";
@@ -744,9 +822,21 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via one-time link" = "Se connecter via un lien unique"; "Connect via one-time link" = "Se connecter via un lien unique";
/* No comment provided by engineer. */
"Connect with %@" = "Se connecter avec %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connected" = "connecté"; "connected" = "connecté";
/* No comment provided by engineer. */
"Connected desktop" = "Bureau connecté";
/* rcv group event chat item */
"connected directly" = "s'est connecté.e de manière directe";
/* No comment provided by engineer. */
"Connected to desktop" = "Connecté au bureau";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connecting" = "connexion"; "connecting" = "connexion";
@@ -771,6 +861,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connecting server… (error: %@)" = "Connexion au serveur… (erreur : %@)"; "Connecting server… (error: %@)" = "Connexion au serveur… (erreur : %@)";
/* No comment provided by engineer. */
"Connecting to desktop" = "Connexion au bureau";
/* chat list item title */ /* chat list item title */
"connecting…" = "connexion…"; "connecting…" = "connexion…";
@@ -789,6 +882,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connection request sent!" = "Demande de connexion envoyée !"; "Connection request sent!" = "Demande de connexion envoyée !";
/* No comment provided by engineer. */
"Connection terminated" = "Connexion terminée";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connection timeout" = "Délai de connexion"; "Connection timeout" = "Délai de connexion";
@@ -801,9 +897,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Contact already exists" = "Contact déjà existant"; "Contact already exists" = "Contact déjà existant";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "Le contact et tous les messages seront supprimés - impossible de revenir en arrière !";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"contact has e2e encryption" = "Ce contact a le chiffrement de bout en bout"; "contact has e2e encryption" = "Ce contact a le chiffrement de bout en bout";
@@ -840,15 +933,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Core version: v%@" = "Version du cœur : v%@"; "Core version: v%@" = "Version du cœur : v%@";
/* No comment provided by engineer. */
"Correct name to %@?" = "Corriger le nom pour %@ ?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create" = "Créer"; "Create" = "Créer";
/* No comment provided by engineer. */
"Create a group using a random profile." = "Création de groupes via un profil aléatoire.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create an address to let people connect with you." = "Créez une adresse pour permettre aux gens de vous contacter."; "Create an address to let people connect with you." = "Créez une adresse pour permettre aux gens de vous contacter.";
/* server test step */ /* server test step */
"Create file" = "Créer un fichier"; "Create file" = "Créer un fichier";
/* No comment provided by engineer. */
"Create group" = "Créer un groupe";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create group link" = "Créer un lien de groupe"; "Create group link" = "Créer un lien de groupe";
@@ -861,6 +963,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create one-time invitation link" = "Créer un lien d'invitation unique"; "Create one-time invitation link" = "Créer un lien d'invitation unique";
/* No comment provided by engineer. */
"Create profile" = "Créer le profil";
/* server test step */ /* server test step */
"Create queue" = "Créer une file d'attente"; "Create queue" = "Créer une file d'attente";
@@ -975,6 +1080,9 @@
/* chat item action */ /* chat item action */
"Delete" = "Supprimer"; "Delete" = "Supprimer";
/* No comment provided by engineer. */
"Delete %lld messages?" = "Supprimer %lld messages ?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete address" = "Supprimer l'adresse"; "Delete address" = "Supprimer l'adresse";
@@ -987,6 +1095,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete all files" = "Effacer tous les fichiers"; "Delete all files" = "Effacer tous les fichiers";
/* No comment provided by engineer. */
"Delete and notify contact" = "Supprimer et en informer le contact";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete archive" = "Supprimer l'archive"; "Delete archive" = "Supprimer l'archive";
@@ -1009,7 +1120,7 @@
"Delete Contact" = "Supprimer le contact"; "Delete Contact" = "Supprimer le contact";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete contact?" = "Supprimer le contact ?"; "Delete contact?\nThis cannot be undone!" = "Supprimer le contact ?\nCette opération ne peut être annulée !";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete database" = "Supprimer la base de données"; "Delete database" = "Supprimer la base de données";
@@ -1086,6 +1197,9 @@
/* copied message info */ /* copied message info */
"Deleted at: %@" = "Supprimé à : %@"; "Deleted at: %@" = "Supprimé à : %@";
/* rcv direct event chat item */
"deleted contact" = "contact supprimé";
/* rcv group event chat item */ /* rcv group event chat item */
"deleted group" = "groupe supprimé"; "deleted group" = "groupe supprimé";
@@ -1101,6 +1215,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Description" = "Description"; "Description" = "Description";
/* No comment provided by engineer. */
"Desktop address" = "Adresse de bureau";
/* No comment provided by engineer. */
"Desktop app version %@ is not compatible with this app." = "La version de l'application de bureau %@ n'est pas compatible avec cette application.";
/* No comment provided by engineer. */
"Desktop devices" = "Appareils de bureau";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Develop" = "Développer"; "Develop" = "Développer";
@@ -1164,14 +1287,14 @@
/* server test step */ /* server test step */
"Disconnect" = "Se déconnecter"; "Disconnect" = "Se déconnecter";
/* No comment provided by engineer. */
"Disconnect desktop?" = "Déconnecter le bureau ?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Discover and join groups" = "Découvrir et rejoindre des groupes"; "Discover and join groups" = "Découvrir et rejoindre des groupes";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Display name" = "Nom affiché"; "Discover via local network" = "Rechercher sur le réseau";
/* No comment provided by engineer. */
"Display name:" = "Nom affiché :";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Do it later" = "Faites-le plus tard"; "Do it later" = "Faites-le plus tard";
@@ -1308,6 +1431,12 @@
/* chat item text */ /* chat item text */
"encryption re-negotiation allowed for %@" = "renégociation de chiffrement autorisée pour %@"; "encryption re-negotiation allowed for %@" = "renégociation de chiffrement autorisée pour %@";
/* message decrypt error item */
"Encryption re-negotiation error" = "Erreur lors de la renégociation du chiffrement";
/* No comment provided by engineer. */
"Encryption re-negotiation failed." = "La renégociation du chiffrement a échoué.";
/* chat item text */ /* chat item text */
"encryption re-negotiation required" = "renégociation de chiffrement requise"; "encryption re-negotiation required" = "renégociation de chiffrement requise";
@@ -1323,6 +1452,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter correct passphrase." = "Entrez la phrase secrète correcte."; "Enter correct passphrase." = "Entrez la phrase secrète correcte.";
/* No comment provided by engineer. */
"Enter group name…" = "Entrer un nom de groupe…";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter Passcode" = "Entrer le code d'accès"; "Enter Passcode" = "Entrer le code d'accès";
@@ -1335,12 +1467,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter server manually" = "Entrer un serveur manuellement"; "Enter server manually" = "Entrer un serveur manuellement";
/* No comment provided by engineer. */
"Enter this device name…" = "Entrez le nom de l'appareil…";
/* placeholder */ /* placeholder */
"Enter welcome message…" = "Entrez un message de bienvenue…"; "Enter welcome message…" = "Entrez un message de bienvenue…";
/* placeholder */ /* placeholder */
"Enter welcome message… (optional)" = "Entrez un message de bienvenue… (facultatif)"; "Enter welcome message… (optional)" = "Entrez un message de bienvenue… (facultatif)";
/* No comment provided by engineer. */
"Enter your name…" = "Entrez votre nom…";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"error" = "erreur"; "error" = "erreur";
@@ -1377,6 +1515,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating group link" = "Erreur lors de la création du lien du groupe"; "Error creating group link" = "Erreur lors de la création du lien du groupe";
/* No comment provided by engineer. */
"Error creating member contact" = "Erreur lors de la création du contact du membre";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating profile!" = "Erreur lors de la création du profil !"; "Error creating profile!" = "Erreur lors de la création du profil !";
@@ -1455,6 +1596,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending email" = "Erreur lors de l'envoi de l'e-mail"; "Error sending email" = "Erreur lors de l'envoi de l'e-mail";
/* No comment provided by engineer. */
"Error sending member contact invitation" = "Erreur lors de l'envoi de l'invitation de contact d'un membre";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending message" = "Erreur lors de l'envoi du message"; "Error sending message" = "Erreur lors de l'envoi du message";
@@ -1506,6 +1650,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Exit without saving" = "Quitter sans sauvegarder"; "Exit without saving" = "Quitter sans sauvegarder";
/* chat item action */
"Expand" = "Développer";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Export database" = "Exporter la base de données"; "Export database" = "Exporter la base de données";
@@ -1524,6 +1671,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Fast and no wait until the sender is online!" = "Rapide et ne nécessitant pas d'attendre que l'expéditeur soit en ligne !"; "Fast and no wait until the sender is online!" = "Rapide et ne nécessitant pas d'attendre que l'expéditeur soit en ligne !";
/* No comment provided by engineer. */
"Faster joining and more reliable messages." = "Connexion plus rapide et messages plus fiables.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Favorite" = "Favoris"; "Favorite" = "Favoris";
@@ -1581,6 +1731,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"For console" = "Pour la console"; "For console" = "Pour la console";
/* No comment provided by engineer. */
"Found desktop" = "Bureau trouvé";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"French interface" = "Interface en français"; "French interface" = "Interface en français";
@@ -1593,6 +1746,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Full name:" = "Nom complet :"; "Full name:" = "Nom complet :";
/* No comment provided by engineer. */
"Fully decentralized visible only to members." = "Entièrement décentralisé visible que par ses membres.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Fully re-implemented - work in background!" = "Entièrement réimplémenté - fonctionne en arrière-plan !"; "Fully re-implemented - work in background!" = "Entièrement réimplémenté - fonctionne en arrière-plan !";
@@ -1605,6 +1761,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Group" = "Groupe"; "Group" = "Groupe";
/* No comment provided by engineer. */
"Group already exists" = "Le groupe existe déjà";
/* No comment provided by engineer. */
"Group already exists!" = "Ce groupe existe déjà !";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"group deleted" = "groupe supprimé"; "group deleted" = "groupe supprimé";
@@ -1776,6 +1938,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incognito" = "Incognito"; "Incognito" = "Incognito";
/* No comment provided by engineer. */
"Incognito groups" = "Groupes incognito";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incognito mode" = "Mode Incognito"; "Incognito mode" = "Mode Incognito";
@@ -1803,6 +1968,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incompatible database version" = "Version de la base de données incompatible"; "Incompatible database version" = "Version de la base de données incompatible";
/* No comment provided by engineer. */
"Incompatible version" = "Version incompatible";
/* PIN entry */ /* PIN entry */
"Incorrect passcode" = "Code d'accès erroné"; "Incorrect passcode" = "Code d'accès erroné";
@@ -1842,6 +2010,9 @@
/* invalid chat item */ /* invalid chat item */
"invalid data" = "données invalides"; "invalid data" = "données invalides";
/* No comment provided by engineer. */
"Invalid name!" = "Nom invalide !";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Invalid server address!" = "Adresse de serveur invalide !"; "Invalid server address!" = "Adresse de serveur invalide !";
@@ -1920,12 +2091,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Join group" = "Rejoindre le groupe"; "Join group" = "Rejoindre le groupe";
/* No comment provided by engineer. */
"Join group?" = "Rejoindre le groupe ?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Join incognito" = "Rejoindre en incognito"; "Join incognito" = "Rejoindre en incognito";
/* No comment provided by engineer. */
"Join with current profile" = "Rejoindre avec le profil actuel";
/* No comment provided by engineer. */
"Join your group?\nThis is your link for group %@!" = "Rejoindre votre groupe ?\nVoici votre lien pour le groupe %@ !";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Joining group" = "Entrain de rejoindre le groupe"; "Joining group" = "Entrain de rejoindre le groupe";
/* No comment provided by engineer. */
"Keep the app open to use it from desktop" = "Garder l'application ouverte pour l'utiliser depuis le bureau";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Keep your connections" = "Conserver vos connexions"; "Keep your connections" = "Conserver vos connexions";
@@ -1962,6 +2145,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Limitations" = "Limitations"; "Limitations" = "Limitations";
/* No comment provided by engineer. */
"Link mobile and desktop apps! 🔗" = "Liez vos applications mobiles et de bureau ! 🔗";
/* No comment provided by engineer. */
"Linked desktop options" = "Options de bureau lié";
/* No comment provided by engineer. */
"Linked desktops" = "Bureaux liés";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"LIVE" = "LIVE"; "LIVE" = "LIVE";
@@ -2067,6 +2259,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Messages & files" = "Messages"; "Messages & files" = "Messages";
/* No comment provided by engineer. */
"Messages from %@ will be shown!" = "Les messages de %@ seront affichés !";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Migrating database archive…" = "Migration de l'archive de la base de données…"; "Migrating database archive…" = "Migration de l'archive de la base de données…";
@@ -2214,6 +2409,9 @@
/* copied message info in history */ /* copied message info in history */
"no text" = "aucun texte"; "no text" = "aucun texte";
/* No comment provided by engineer. */
"Not compatible!" = "Non compatible !";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Notifications" = "Notifications"; "Notifications" = "Notifications";
@@ -2227,7 +2425,8 @@
"observer" = "observateur"; "observer" = "observateur";
/* enabled status /* enabled status
group pref value */ group pref value
time to disappear */
"off" = "off"; "off" = "off";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@@ -2308,12 +2507,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Only your contact can send voice messages." = "Seul votre contact peut envoyer des messages vocaux."; "Only your contact can send voice messages." = "Seul votre contact peut envoyer des messages vocaux.";
/* No comment provided by engineer. */
"Open" = "Ouvrir";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open chat" = "Ouvrir le chat"; "Open chat" = "Ouvrir le chat";
/* authentication reason */ /* authentication reason */
"Open chat console" = "Ouvrir la console du chat"; "Open chat console" = "Ouvrir la console du chat";
/* No comment provided by engineer. */
"Open group" = "Ouvrir le groupe";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open Settings" = "Ouvrir les Paramètres"; "Open Settings" = "Ouvrir les Paramètres";
@@ -2326,12 +2531,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Opening database…" = "Ouverture de la base de données…"; "Opening database…" = "Ouverture de la base de données…";
/* No comment provided by engineer. */
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Ouvrir le lien dans le navigateur peut réduire la confidentialité et la sécurité de la connexion. Les liens SimpleX non fiables seront en rouge.";
/* No comment provided by engineer. */
"or chat with the developers" = "ou ici pour discuter avec les développeurs";
/* member role */ /* member role */
"owner" = "propriétaire"; "owner" = "propriétaire";
@@ -2356,6 +2555,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Paste" = "Coller"; "Paste" = "Coller";
/* No comment provided by engineer. */
"Paste desktop address" = "Coller l'adresse du bureau";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Paste image" = "Coller l'image"; "Paste image" = "Coller l'image";
@@ -2452,6 +2654,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Profile image" = "Image de profil"; "Profile image" = "Image de profil";
/* No comment provided by engineer. */
"Profile name" = "Nom du profil";
/* No comment provided by engineer. */
"Profile name:" = "Nom du profil :";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Profile password" = "Mot de passe de profil"; "Profile password" = "Mot de passe de profil";
@@ -2617,6 +2825,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Renegotiate encryption?" = "Renégocier le chiffrement?"; "Renegotiate encryption?" = "Renégocier le chiffrement?";
/* No comment provided by engineer. */
"Repeat connection request?" = "Répéter la demande de connexion ?";
/* No comment provided by engineer. */
"Repeat join request?" = "Répéter la requête d'adhésion ?";
/* chat item action */ /* chat item action */
"Reply" = "Répondre"; "Reply" = "Répondre";
@@ -2728,6 +2942,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Scan QR code" = "Scanner un code QR"; "Scan QR code" = "Scanner un code QR";
/* No comment provided by engineer. */
"Scan QR code from desktop" = "Scanner le code QR du bureau";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Scan security code from your contact's app." = "Scannez le code de sécurité depuis l'application de votre contact."; "Scan security code from your contact's app." = "Scannez le code de sécurité depuis l'application de votre contact.";
@@ -2783,7 +3000,13 @@
"Send delivery receipts to" = "Envoyer les accusés de réception à"; "Send delivery receipts to" = "Envoyer les accusés de réception à";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send direct message" = "Envoi de message direct"; "send direct message" = "envoyer un message direct";
/* No comment provided by engineer. */
"Send direct message" = "Envoyer un message direct";
/* No comment provided by engineer. */
"Send direct message to connect" = "Envoyer un message direct pour vous connecter";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send disappearing message" = "Envoyer un message éphémère"; "Send disappearing message" = "Envoyer un message éphémère";
@@ -2866,6 +3089,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Servers" = "Serveurs"; "Servers" = "Serveurs";
/* No comment provided by engineer. */
"Session code" = "Code de session";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Set 1 day" = "Définir 1 jour"; "Set 1 day" = "Définir 1 jour";
@@ -3052,6 +3278,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Tap to activate profile." = "Appuyez pour activer un profil."; "Tap to activate profile." = "Appuyez pour activer un profil.";
/* No comment provided by engineer. */
"Tap to Connect" = "Tapez pour vous connecter";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Tap to join" = "Appuyez pour rejoindre"; "Tap to join" = "Appuyez pour rejoindre";
@@ -3115,9 +3344,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Le chiffrement fonctionne et le nouvel accord de chiffrement n'est pas nécessaire. Cela peut provoquer des erreurs de connexion !"; "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Le chiffrement fonctionne et le nouvel accord de chiffrement n'est pas nécessaire. Cela peut provoquer des erreurs de connexion !";
/* No comment provided by engineer. */
"The group is fully decentralized it is visible only to the members." = "Le groupe est entièrement décentralisé il n'est visible que par ses membres.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The hash of the previous message is different." = "Le hash du message précédent est différent."; "The hash of the previous message is different." = "Le hash du message précédent est différent.";
@@ -3175,12 +3401,21 @@
/* notification title */ /* notification title */
"this contact" = "ce contact"; "this contact" = "ce contact";
/* No comment provided by engineer. */
"This device name" = "Ce nom d'appareil";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This group has over %lld members, delivery receipts are not sent." = "Ce groupe compte plus de %lld membres, les accusés de réception ne sont pas envoyés."; "This group has over %lld members, delivery receipts are not sent." = "Ce groupe compte plus de %lld membres, les accusés de réception ne sont pas envoyés.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This group no longer exists." = "Ce groupe n'existe plus."; "This group no longer exists." = "Ce groupe n'existe plus.";
/* No comment provided by engineer. */
"This is your own one-time link!" = "Voici votre propre lien unique !";
/* No comment provided by engineer. */
"This is your own SimpleX address!" = "Voici votre propre adresse SimpleX !";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This setting applies to messages in your current chat profile **%@**." = "Ce paramètre s'applique aux messages de votre profil de chat actuel **%@**."; "This setting applies to messages in your current chat profile **%@**." = "Ce paramètre s'applique aux messages de votre profil de chat actuel **%@**.";
@@ -3190,6 +3425,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To connect, your contact can scan QR code or use the link in the app." = "Pour se connecter, votre contact peut scanner le code QR ou utiliser le lien dans l'application."; "To connect, your contact can scan QR code or use the link in the app." = "Pour se connecter, votre contact peut scanner le code QR ou utiliser le lien dans l'application.";
/* No comment provided by engineer. */
"To hide unwanted messages." = "Pour cacher les messages indésirables.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To make a new connection" = "Pour établir une nouvelle connexion"; "To make a new connection" = "Pour établir une nouvelle connexion";
@@ -3238,6 +3476,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unable to record voice message" = "Impossible d'enregistrer un message vocal"; "Unable to record voice message" = "Impossible d'enregistrer un message vocal";
/* No comment provided by engineer. */
"Unblock" = "Débloquer";
/* No comment provided by engineer. */
"Unblock member" = "Débloquer ce membre";
/* No comment provided by engineer. */
"Unblock member?" = "Débloquer ce membre ?";
/* item status description */ /* item status description */
"Unexpected error: %@" = "Erreur inattendue: %@"; "Unexpected error: %@" = "Erreur inattendue: %@";
@@ -3277,6 +3524,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "A moins que votre contact ait supprimé la connexion ou que ce lien ait déjà été utilisé, il peut s'agir d'un bug - veuillez le signaler.\nPour vous connecter, veuillez demander à votre contact de créer un autre lien de connexion et vérifiez que vous disposez d'une connexion réseau stable."; "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "A moins que votre contact ait supprimé la connexion ou que ce lien ait déjà été utilisé, il peut s'agir d'un bug - veuillez le signaler.\nPour vous connecter, veuillez demander à votre contact de créer un autre lien de connexion et vérifiez que vous disposez d'une connexion réseau stable.";
/* No comment provided by engineer. */
"Unlink" = "Délier";
/* No comment provided by engineer. */
"Unlink desktop?" = "Délier le bureau ?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unlock" = "Déverrouiller"; "Unlock" = "Déverrouiller";
@@ -3331,6 +3584,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use for new connections" = "Utiliser pour les nouvelles connexions"; "Use for new connections" = "Utiliser pour les nouvelles connexions";
/* No comment provided by engineer. */
"Use from desktop" = "Utilisation depuis le bureau";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use iOS call interface" = "Utiliser l'interface d'appel d'iOS"; "Use iOS call interface" = "Utiliser l'interface d'appel d'iOS";
@@ -3352,12 +3608,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Using SimpleX Chat servers." = "Utilisation des serveurs SimpleX Chat."; "Using SimpleX Chat servers." = "Utilisation des serveurs SimpleX Chat.";
/* No comment provided by engineer. */
"v%@" = "v%@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"v%@ (%@)" = "v%@ (%@)"; "v%@ (%@)" = "v%@ (%@)";
/* No comment provided by engineer. */
"Verify code with desktop" = "Vérifier le code avec le bureau";
/* No comment provided by engineer. */
"Verify connection" = "Vérifier la connexion";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Verify connection security" = "Vérifier la sécurité de la connexion"; "Verify connection security" = "Vérifier la sécurité de la connexion";
/* No comment provided by engineer. */
"Verify connections" = "Vérifier les connexions";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Verify security code" = "Vérifier le code de sécurité"; "Verify security code" = "Vérifier le code de sécurité";
@@ -3376,6 +3644,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"via relay" = "via relais"; "via relay" = "via relais";
/* No comment provided by engineer. */
"Via secure quantum resistant protocol." = "Via un protocole sécurisé de cryptographie post-quantique.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Video call" = "Appel vidéo"; "Video call" = "Appel vidéo";
@@ -3415,6 +3686,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"waiting for confirmation…" = "en attente de confirmation…"; "waiting for confirmation…" = "en attente de confirmation…";
/* No comment provided by engineer. */
"Waiting for desktop..." = "En attente du bureau...";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Waiting for file" = "En attente du fichier"; "Waiting for file" = "En attente du fichier";
@@ -3484,6 +3758,27 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You are already connected to %@." = "Vous êtes déjà connecté·e à %@ via ce lien."; "You are already connected to %@." = "Vous êtes déjà connecté·e à %@ via ce lien.";
/* No comment provided by engineer. */
"You are already connecting to %@." = "Vous êtes déjà en train de vous connecter à %@.";
/* No comment provided by engineer. */
"You are already connecting via this one-time link!" = "Vous êtes déjà connecté(e) via ce lien unique !";
/* No comment provided by engineer. */
"You are already in group %@." = "Vous êtes déjà dans le groupe %@.";
/* No comment provided by engineer. */
"You are already joining the group %@." = "Vous êtes déjà en train de rejoindre le groupe %@.";
/* No comment provided by engineer. */
"You are already joining the group via this link!" = "Vous êtes déjà en train de rejoindre le groupe via ce lien !";
/* No comment provided by engineer. */
"You are already joining the group via this link." = "Vous êtes déjà en train de rejoindre le groupe via ce lien.";
/* No comment provided by engineer. */
"You are already joining the group!\nRepeat join request?" = "Vous êtes déjà membre de ce groupe !\nRépéter la demande d'adhésion ?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You are connected to the server used to receive messages from this contact." = "Vous êtes connecté·e au serveur utilisé pour recevoir les messages de ce contact."; "You are connected to the server used to receive messages from this contact." = "Vous êtes connecté·e au serveur utilisé pour recevoir les messages de ce contact.";
@@ -3559,6 +3854,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You could not be verified; please try again." = "Vous n'avez pas pu être vérifié·e; veuillez réessayer."; "You could not be verified; please try again." = "Vous n'avez pas pu être vérifié·e; veuillez réessayer.";
/* No comment provided by engineer. */
"You have already requested connection via this address!" = "Vous avez déjà demandé une connexion via cette adresse !";
/* No comment provided by engineer. */
"You have already requested connection!\nRepeat connection request?" = "Vous avez déjà demandé une connexion !\nRépéter la demande de connexion ?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You have no chats" = "Vous n'avez aucune discussion"; "You have no chats" = "Vous n'avez aucune discussion";
@@ -3601,6 +3902,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be connected to group when the group host's device is online, please wait or check later!" = "Vous serez connecté·e au groupe lorsque l'appareil de l'hôte sera en ligne, veuillez attendre ou vérifier plus tard !"; "You will be connected to group when the group host's device is online, please wait or check later!" = "Vous serez connecté·e au groupe lorsque l'appareil de l'hôte sera en ligne, veuillez attendre ou vérifier plus tard !";
/* No comment provided by engineer. */
"You will be connected when group link host's device is online, please wait or check later!" = "Vous serez connecté(e) lorsque l'appareil de l'hôte du lien de groupe sera en ligne, veuillez patienter ou vérifier plus tard !";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be connected when your connection request is accepted, please wait or check later!" = "Vous serez connecté·e lorsque votre demande de connexion sera acceptée, veuillez attendre ou vérifier plus tard !"; "You will be connected when your connection request is accepted, please wait or check later!" = "Vous serez connecté·e lorsque votre demande de connexion sera acceptée, veuillez attendre ou vérifier plus tard !";
@@ -3611,7 +3915,7 @@
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Il vous sera demandé de vous authentifier lorsque vous démarrez ou reprenez l'application après 30 secondes en arrière-plan."; "You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Il vous sera demandé de vous authentifier lorsque vous démarrez ou reprenez l'application après 30 secondes en arrière-plan.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will join a group this link refers to and connect to its group members." = "Vous allez rejoindre le groupe correspondant à ce lien et être mis en relation avec les autres membres du groupe."; "You will connect to all group members." = "Vous vous connecterez à tous les membres du groupe.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "Vous continuerez à recevoir des appels et des notifications des profils mis en sourdine lorsqu'ils sont actifs."; "You will still receive calls and notifications from muted profiles when they are active." = "Vous continuerez à recevoir des appels et des notifications des profils mis en sourdine lorsqu'ils sont actifs.";
@@ -3643,9 +3947,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat database is not encrypted - set passphrase to encrypt it." = "Votre base de données de chat n'est pas chiffrée - définisez une phrase secrète."; "Your chat database is not encrypted - set passphrase to encrypt it." = "Votre base de données de chat n'est pas chiffrée - définisez une phrase secrète.";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "Votre profil de chat sera envoyé aux membres du groupe";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat profiles" = "Vos profils de chat"; "Your chat profiles" = "Vos profils de chat";
@@ -3679,6 +3980,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your privacy" = "Votre vie privée"; "Your privacy" = "Votre vie privée";
/* No comment provided by engineer. */
"Your profile" = "Votre profil";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your profile **%@** will be shared." = "Votre profil **%@** sera partagé."; "Your profile **%@** will be shared." = "Votre profil **%@** sera partagé.";
@@ -7,6 +7,9 @@
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleGroup not found!X utilise Face ID pour l'authentification locale"; "NSFaceIDUsageDescription" = "SimpleGroup not found!X utilise Face ID pour l'authentification locale";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX utilise un accès au réseau local pour permettre l'utilisation du profil de chat de l'utilisateur via l'application de bureau au sein de ce même réseau.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX a besoin d'un accès au microphone pour les appels audio et vidéo ainsi que pour enregistrer des messages vocaux."; "NSMicrophoneUsageDescription" = "SimpleX a besoin d'un accès au microphone pour les appels audio et vidéo ainsi que pour enregistrer des messages vocaux.";
+319 -33
View File
@@ -25,6 +25,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- more stable message delivery.\n- a bit better groups.\n- and more!" = "- recapito dei messaggi più stabile.\n- gruppi un po' migliorati.\n- e altro ancora!"; "- more stable message delivery.\n- a bit better groups.\n- and more!" = "- recapito dei messaggi più stabile.\n- gruppi un po' migliorati.\n- e altro ancora!";
/* No comment provided by engineer. */
"- optionally notify deleted contacts.\n- profile names with spaces.\n- and more!" = "- avvisa facoltativamente i contatti eliminati.\n- nomi del profilo con spazi.\n- e molto altro!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- messaggi vocali fino a 5 minuti.\n- tempo di scomparsa personalizzato.\n- cronologia delle modifiche."; "- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- messaggi vocali fino a 5 minuti.\n- tempo di scomparsa personalizzato.\n- cronologia delle modifiche.";
@@ -43,6 +46,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"(" = "("; "(" = "(";
/* No comment provided by engineer. */
"(new)" = "(nuovo)";
/* No comment provided by engineer. */
"(this device v%@)" = "(questo dispositivo v%@)";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
")" = ")"; ")" = ")";
@@ -118,12 +127,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@ %@" = "%@ %@"; "%@ %@" = "%@ %@";
/* No comment provided by engineer. */
"%@ and %@" = "%@ e %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@ and %@ connected" = "%@ e %@ sono connessi/e"; "%@ and %@ connected" = "%@ e %@ sono connessi/e";
/* copied message info, <sender> at <time> */ /* copied message info, <sender> at <time> */
"%@ at %@:" = "%1$@ alle %2$@:"; "%@ at %@:" = "%1$@ alle %2$@:";
/* No comment provided by engineer. */
"%@ connected" = "%@ si è connesso/a";
/* notification title */ /* notification title */
"%@ is connected!" = "%@ è connesso/a!"; "%@ is connected!" = "%@ è connesso/a!";
@@ -139,6 +154,9 @@
/* notification title */ /* notification title */
"%@ wants to connect!" = "%@ si vuole connettere!"; "%@ wants to connect!" = "%@ si vuole connettere!";
/* No comment provided by engineer. */
"%@, %@ and %lld members" = "%@, %@ e %lld membri";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@, %@ and %lld other members connected" = "%@, %@ e altri %lld membri sono connessi"; "%@, %@ and %lld other members connected" = "%@, %@ e altri %lld membri sono connessi";
@@ -178,9 +196,21 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld file(s) with total size of %@" = "%lld file con dimensione totale di %@"; "%lld file(s) with total size of %@" = "%lld file con dimensione totale di %@";
/* No comment provided by engineer. */
"%lld group events" = "%lld eventi del gruppo";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld members" = "%lld membri"; "%lld members" = "%lld membri";
/* No comment provided by engineer. */
"%lld messages blocked" = "%lld messaggi bloccati";
/* No comment provided by engineer. */
"%lld messages marked deleted" = "%lld messaggi contrassegnati eliminati";
/* No comment provided by engineer. */
"%lld messages moderated by %@" = "%lld messaggi moderati da %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld minutes" = "%lld minuti"; "%lld minutes" = "%lld minuti";
@@ -229,6 +259,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"~strike~" = "\\~barrato~"; "~strike~" = "\\~barrato~";
/* time to disappear */
"0 sec" = "0 sec";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"0s" = "0s"; "0s" = "0s";
@@ -371,6 +404,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Tutti i messaggi verranno eliminati, non è reversibile! I messaggi verranno eliminati SOLO per te."; "All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Tutti i messaggi verranno eliminati, non è reversibile! I messaggi verranno eliminati SOLO per te.";
/* No comment provided by engineer. */
"All new messages from %@ will be hidden!" = "Tutti i nuovi messaggi da %@ verrranno nascosti!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"All your contacts will remain connected." = "Tutti i tuoi contatti resteranno connessi."; "All your contacts will remain connected." = "Tutti i tuoi contatti resteranno connessi.";
@@ -434,6 +470,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Already connected?" = "Già connesso/a?"; "Already connected?" = "Già connesso/a?";
/* No comment provided by engineer. */
"Already connecting!" = "Già in connessione!";
/* No comment provided by engineer. */
"Already joining the group!" = "Già in ingresso nel gruppo!";
/* pref value */ /* pref value */
"always" = "sempre"; "always" = "sempre";
@@ -443,6 +485,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"An empty chat profile with the provided name is created, and the app opens as usual." = "Viene creato un profilo di chat vuoto con il nome scelto e l'app si apre come al solito."; "An empty chat profile with the provided name is created, and the app opens as usual." = "Viene creato un profilo di chat vuoto con il nome scelto e l'app si apre come al solito.";
/* No comment provided by engineer. */
"and %lld other events" = "e altri %lld eventi";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Answer call" = "Rispondi alla chiamata"; "Answer call" = "Rispondi alla chiamata";
@@ -512,6 +557,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Back" = "Indietro"; "Back" = "Indietro";
/* No comment provided by engineer. */
"Bad desktop address" = "Indirizzo desktop errato";
/* integrity error chat item */ /* integrity error chat item */
"bad message hash" = "hash del messaggio errato"; "bad message hash" = "hash del messaggio errato";
@@ -524,9 +572,27 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Bad message ID" = "ID del messaggio errato"; "Bad message ID" = "ID del messaggio errato";
/* No comment provided by engineer. */
"Better groups" = "Gruppi migliorati";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Better messages" = "Messaggi migliorati"; "Better messages" = "Messaggi migliorati";
/* No comment provided by engineer. */
"Block" = "Blocca";
/* No comment provided by engineer. */
"Block group members" = "Blocca i membri dei gruppi";
/* No comment provided by engineer. */
"Block member" = "Blocca membro";
/* No comment provided by engineer. */
"Block member?" = "Bloccare il membro?";
/* No comment provided by engineer. */
"blocked" = "bloccato";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"bold" = "grassetto"; "bold" = "grassetto";
@@ -622,7 +688,7 @@
"changed address for you" = "indirizzo cambiato per te"; "changed address for you" = "indirizzo cambiato per te";
/* rcv group event chat item */ /* rcv group event chat item */
"changed role of %@ to %@" = "cambiato il ruolo di %1$@ in %2$@"; "changed role of %@ to %@" = "ha cambiato il ruolo di %1$@ in %2$@";
/* rcv group event chat item */ /* rcv group event chat item */
"changed your role to %@" = "cambiato il tuo ruolo in %@"; "changed your role to %@" = "cambiato il tuo ruolo in %@";
@@ -721,19 +787,25 @@
"Connect" = "Connetti"; "Connect" = "Connetti";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect directly" = "Connetti direttamente"; "Connect incognito" = "Connetti in incognito";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect incognito" = "Connetti in incognito"; "Connect to desktop" = "Connetti al desktop";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "connettiti agli sviluppatori di SimpleX Chat."; "connect to SimpleX Chat developers." = "connettiti agli sviluppatori di SimpleX Chat.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via contact link" = "Connetti via link del contatto"; "Connect to yourself?" = "Connettersi a te stesso?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via group link?" = "Connettere via link del gruppo?"; "Connect to yourself?\nThis is your own one-time link!" = "Connettersi a te stesso?\nQuesto è il tuo link una tantum!";
/* No comment provided by engineer. */
"Connect to yourself?\nThis is your own SimpleX address!" = "Connettersi a te stesso?\nQuesto è il tuo indirizzo SimpleX!";
/* No comment provided by engineer. */
"Connect via contact address" = "Connettere via indirizzo del contatto";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via link" = "Connetti via link"; "Connect via link" = "Connetti via link";
@@ -744,9 +816,21 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via one-time link" = "Connetti via link una tantum"; "Connect via one-time link" = "Connetti via link una tantum";
/* No comment provided by engineer. */
"Connect with %@" = "Connettersi con %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connected" = "connesso/a"; "connected" = "connesso/a";
/* No comment provided by engineer. */
"Connected desktop" = "Desktop connesso";
/* rcv group event chat item */
"connected directly" = "si è connesso/a direttamente";
/* No comment provided by engineer. */
"Connected to desktop" = "Connesso al desktop";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connecting" = "in connessione"; "connecting" = "in connessione";
@@ -771,6 +855,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connecting server… (error: %@)" = "Connessione al server… (errore: %@)"; "Connecting server… (error: %@)" = "Connessione al server… (errore: %@)";
/* No comment provided by engineer. */
"Connecting to desktop" = "Connessione al desktop";
/* chat list item title */ /* chat list item title */
"connecting…" = "in connessione…"; "connecting…" = "in connessione…";
@@ -789,6 +876,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connection request sent!" = "Richiesta di connessione inviata!"; "Connection request sent!" = "Richiesta di connessione inviata!";
/* No comment provided by engineer. */
"Connection terminated" = "Connessione terminata";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connection timeout" = "Connessione scaduta"; "Connection timeout" = "Connessione scaduta";
@@ -801,9 +891,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Contact already exists" = "Il contatto esiste già"; "Contact already exists" = "Il contatto esiste già";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "Il contatto e tutti i messaggi verranno eliminati, non è reversibile!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"contact has e2e encryption" = "il contatto ha la crittografia e2e"; "contact has e2e encryption" = "il contatto ha la crittografia e2e";
@@ -840,15 +927,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Core version: v%@" = "Versione core: v%@"; "Core version: v%@" = "Versione core: v%@";
/* No comment provided by engineer. */
"Correct name to %@?" = "Correggere il nome a %@?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create" = "Crea"; "Create" = "Crea";
/* No comment provided by engineer. */
"Create a group using a random profile." = "Crea un gruppo usando un profilo casuale.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create an address to let people connect with you." = "Crea un indirizzo per consentire alle persone di connettersi con te."; "Create an address to let people connect with you." = "Crea un indirizzo per consentire alle persone di connettersi con te.";
/* server test step */ /* server test step */
"Create file" = "Crea file"; "Create file" = "Crea file";
/* No comment provided by engineer. */
"Create group" = "Crea gruppo";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create group link" = "Crea link del gruppo"; "Create group link" = "Crea link del gruppo";
@@ -861,6 +957,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create one-time invitation link" = "Crea link di invito una tantum"; "Create one-time invitation link" = "Crea link di invito una tantum";
/* No comment provided by engineer. */
"Create profile" = "Crea profilo";
/* server test step */ /* server test step */
"Create queue" = "Crea coda"; "Create queue" = "Crea coda";
@@ -975,6 +1074,9 @@
/* chat item action */ /* chat item action */
"Delete" = "Elimina"; "Delete" = "Elimina";
/* No comment provided by engineer. */
"Delete %lld messages?" = "Eliminare %lld messaggi?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete address" = "Elimina indirizzo"; "Delete address" = "Elimina indirizzo";
@@ -987,6 +1089,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete all files" = "Elimina tutti i file"; "Delete all files" = "Elimina tutti i file";
/* No comment provided by engineer. */
"Delete and notify contact" = "Elimina e avvisa il contatto";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete archive" = "Elimina archivio"; "Delete archive" = "Elimina archivio";
@@ -1009,7 +1114,7 @@
"Delete Contact" = "Elimina contatto"; "Delete Contact" = "Elimina contatto";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete contact?" = "Eliminare il contatto?"; "Delete contact?\nThis cannot be undone!" = "Eliminare il contatto?\nNon è reversibile!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete database" = "Elimina database"; "Delete database" = "Elimina database";
@@ -1086,6 +1191,9 @@
/* copied message info */ /* copied message info */
"Deleted at: %@" = "Eliminato il: %@"; "Deleted at: %@" = "Eliminato il: %@";
/* rcv direct event chat item */
"deleted contact" = "contatto eliminato";
/* rcv group event chat item */ /* rcv group event chat item */
"deleted group" = "gruppo eliminato"; "deleted group" = "gruppo eliminato";
@@ -1101,6 +1209,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Description" = "Descrizione"; "Description" = "Descrizione";
/* No comment provided by engineer. */
"Desktop address" = "Indirizzo desktop";
/* No comment provided by engineer. */
"Desktop app version %@ is not compatible with this app." = "La versione dell'app desktop %@ non è compatibile con questa app.";
/* No comment provided by engineer. */
"Desktop devices" = "Dispositivi desktop";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Develop" = "Sviluppa"; "Develop" = "Sviluppa";
@@ -1164,15 +1281,12 @@
/* server test step */ /* server test step */
"Disconnect" = "Disconnetti"; "Disconnect" = "Disconnetti";
/* No comment provided by engineer. */
"Disconnect desktop?" = "Disconnettere il desktop?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Discover and join groups" = "Scopri ed unisciti ai gruppi"; "Discover and join groups" = "Scopri ed unisciti ai gruppi";
/* No comment provided by engineer. */
"Display name" = "Nome da mostrare";
/* No comment provided by engineer. */
"Display name:" = "Nome da mostrare:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Do it later" = "Fallo dopo"; "Do it later" = "Fallo dopo";
@@ -1308,6 +1422,12 @@
/* chat item text */ /* chat item text */
"encryption re-negotiation allowed for %@" = "rinegoziazione della crittografia consentita per %@"; "encryption re-negotiation allowed for %@" = "rinegoziazione della crittografia consentita per %@";
/* message decrypt error item */
"Encryption re-negotiation error" = "Errore di rinegoziazione crittografia";
/* No comment provided by engineer. */
"Encryption re-negotiation failed." = "Rinegoziazione crittografia fallita.";
/* chat item text */ /* chat item text */
"encryption re-negotiation required" = "richiesta rinegoziazione della crittografia"; "encryption re-negotiation required" = "richiesta rinegoziazione della crittografia";
@@ -1323,6 +1443,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter correct passphrase." = "Inserisci la password giusta."; "Enter correct passphrase." = "Inserisci la password giusta.";
/* No comment provided by engineer. */
"Enter group name…" = "Inserisci il nome del gruppo…";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter Passcode" = "Inserisci il codice di accesso"; "Enter Passcode" = "Inserisci il codice di accesso";
@@ -1335,12 +1458,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter server manually" = "Inserisci il server a mano"; "Enter server manually" = "Inserisci il server a mano";
/* No comment provided by engineer. */
"Enter this device name…" = "Inserisci il nome di questo dispositivo…";
/* placeholder */ /* placeholder */
"Enter welcome message…" = "Inserisci il messaggio di benvenuto…"; "Enter welcome message…" = "Inserisci il messaggio di benvenuto…";
/* placeholder */ /* placeholder */
"Enter welcome message… (optional)" = "Inserisci il messaggio di benvenuto… (facoltativo)"; "Enter welcome message… (optional)" = "Inserisci il messaggio di benvenuto… (facoltativo)";
/* No comment provided by engineer. */
"Enter your name…" = "Inserisci il tuo nome…";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"error" = "errore"; "error" = "errore";
@@ -1377,6 +1506,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating group link" = "Errore nella creazione del link del gruppo"; "Error creating group link" = "Errore nella creazione del link del gruppo";
/* No comment provided by engineer. */
"Error creating member contact" = "Errore di creazione del contatto";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating profile!" = "Errore nella creazione del profilo!"; "Error creating profile!" = "Errore nella creazione del profilo!";
@@ -1455,6 +1587,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending email" = "Errore nell'invio dell'email"; "Error sending email" = "Errore nell'invio dell'email";
/* No comment provided by engineer. */
"Error sending member contact invitation" = "Errore di invio dell'invito al contatto";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending message" = "Errore nell'invio del messaggio"; "Error sending message" = "Errore nell'invio del messaggio";
@@ -1506,6 +1641,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Exit without saving" = "Esci senza salvare"; "Exit without saving" = "Esci senza salvare";
/* chat item action */
"Expand" = "Espandi";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Export database" = "Esporta database"; "Export database" = "Esporta database";
@@ -1524,6 +1662,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Fast and no wait until the sender is online!" = "Veloce e senza aspettare che il mittente sia in linea!"; "Fast and no wait until the sender is online!" = "Veloce e senza aspettare che il mittente sia in linea!";
/* No comment provided by engineer. */
"Faster joining and more reliable messages." = "Ingresso più veloce e messaggi più affidabili.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Favorite" = "Preferito"; "Favorite" = "Preferito";
@@ -1593,6 +1734,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Full name:" = "Nome completo:"; "Full name:" = "Nome completo:";
/* No comment provided by engineer. */
"Fully decentralized visible only to members." = "Completamente decentralizzato: visibile solo ai membri.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Fully re-implemented - work in background!" = "Completamente reimplementato - funziona in secondo piano!"; "Fully re-implemented - work in background!" = "Completamente reimplementato - funziona in secondo piano!";
@@ -1605,6 +1749,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Group" = "Gruppo"; "Group" = "Gruppo";
/* No comment provided by engineer. */
"Group already exists" = "Il gruppo esiste già";
/* No comment provided by engineer. */
"Group already exists!" = "Il gruppo esiste già!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"group deleted" = "gruppo eliminato"; "group deleted" = "gruppo eliminato";
@@ -1776,6 +1926,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incognito" = "Incognito"; "Incognito" = "Incognito";
/* No comment provided by engineer. */
"Incognito groups" = "Gruppi in incognito";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incognito mode" = "Modalità incognito"; "Incognito mode" = "Modalità incognito";
@@ -1803,6 +1956,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incompatible database version" = "Versione del database incompatibile"; "Incompatible database version" = "Versione del database incompatibile";
/* No comment provided by engineer. */
"Incompatible version" = "Versione incompatibile";
/* PIN entry */ /* PIN entry */
"Incorrect passcode" = "Codice di accesso errato"; "Incorrect passcode" = "Codice di accesso errato";
@@ -1842,6 +1998,9 @@
/* invalid chat item */ /* invalid chat item */
"invalid data" = "dati non validi"; "invalid data" = "dati non validi";
/* No comment provided by engineer. */
"Invalid name!" = "Nome non valido!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Invalid server address!" = "Indirizzo del server non valido!"; "Invalid server address!" = "Indirizzo del server non valido!";
@@ -1920,12 +2079,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Join group" = "Entra nel gruppo"; "Join group" = "Entra nel gruppo";
/* No comment provided by engineer. */
"Join group?" = "Entrare nel gruppo?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Join incognito" = "Entra in incognito"; "Join incognito" = "Entra in incognito";
/* No comment provided by engineer. */
"Join with current profile" = "Entra con il profilo attuale";
/* No comment provided by engineer. */
"Join your group?\nThis is your link for group %@!" = "Entrare nel tuo gruppo?\nQuesto è il tuo link per il gruppo %@!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Joining group" = "Ingresso nel gruppo"; "Joining group" = "Ingresso nel gruppo";
/* No comment provided by engineer. */
"Keep the app open to use it from desktop" = "Tieni aperta l'app per usarla dal desktop";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Keep your connections" = "Mantieni le tue connessioni"; "Keep your connections" = "Mantieni le tue connessioni";
@@ -1962,6 +2133,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Limitations" = "Limitazioni"; "Limitations" = "Limitazioni";
/* No comment provided by engineer. */
"Link mobile and desktop apps! 🔗" = "Collega le app mobile e desktop! 🔗";
/* No comment provided by engineer. */
"Linked desktop options" = "Opzioni del desktop collegato";
/* No comment provided by engineer. */
"Linked desktops" = "Desktop collegati";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"LIVE" = "IN DIRETTA"; "LIVE" = "IN DIRETTA";
@@ -2026,7 +2206,7 @@
"Member" = "Membro"; "Member" = "Membro";
/* rcv group event chat item */ /* rcv group event chat item */
"member connected" = "è connesso/a"; "member connected" = "si è connesso/a";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Member role will be changed to \"%@\". All group members will be notified." = "Il ruolo del membro verrà cambiato in \"%@\". Tutti i membri del gruppo verranno avvisati."; "Member role will be changed to \"%@\". All group members will be notified." = "Il ruolo del membro verrà cambiato in \"%@\". Tutti i membri del gruppo verranno avvisati.";
@@ -2067,6 +2247,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Messages & files" = "Messaggi"; "Messages & files" = "Messaggi";
/* No comment provided by engineer. */
"Messages from %@ will be shown!" = "I messaggi da %@ verranno mostrati!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Migrating database archive…" = "Migrazione archivio del database…"; "Migrating database archive…" = "Migrazione archivio del database…";
@@ -2227,7 +2410,8 @@
"observer" = "osservatore"; "observer" = "osservatore";
/* enabled status /* enabled status
group pref value */ group pref value
time to disappear */
"off" = "off"; "off" = "off";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@@ -2308,12 +2492,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Only your contact can send voice messages." = "Solo il tuo contatto può inviare messaggi vocali."; "Only your contact can send voice messages." = "Solo il tuo contatto può inviare messaggi vocali.";
/* No comment provided by engineer. */
"Open" = "Apri";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open chat" = "Apri chat"; "Open chat" = "Apri chat";
/* authentication reason */ /* authentication reason */
"Open chat console" = "Apri la console della chat"; "Open chat console" = "Apri la console della chat";
/* No comment provided by engineer. */
"Open group" = "Apri gruppo";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open Settings" = "Apri le impostazioni"; "Open Settings" = "Apri le impostazioni";
@@ -2326,12 +2516,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Opening database…" = "Apertura del database…"; "Opening database…" = "Apertura del database…";
/* No comment provided by engineer. */
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Aprire il link nel browser può ridurre la privacy e la sicurezza della connessione. I link SimpleX non fidati saranno in rosso.";
/* No comment provided by engineer. */
"or chat with the developers" = "o scrivi agli sviluppatori";
/* member role */ /* member role */
"owner" = "proprietario"; "owner" = "proprietario";
@@ -2356,6 +2540,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Paste" = "Incolla"; "Paste" = "Incolla";
/* No comment provided by engineer. */
"Paste desktop address" = "Incolla l'indirizzo desktop";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Paste image" = "Incolla immagine"; "Paste image" = "Incolla immagine";
@@ -2452,6 +2639,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Profile image" = "Immagine del profilo"; "Profile image" = "Immagine del profilo";
/* No comment provided by engineer. */
"Profile name" = "Nome del profilo";
/* No comment provided by engineer. */
"Profile name:" = "Nome del profilo:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Profile password" = "Password del profilo"; "Profile password" = "Password del profilo";
@@ -2600,13 +2793,13 @@
"Remove passphrase from keychain?" = "Rimuovere la password dal portachiavi?"; "Remove passphrase from keychain?" = "Rimuovere la password dal portachiavi?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"removed" = "ha rimosso"; "removed" = "rimosso";
/* rcv group event chat item */ /* rcv group event chat item */
"removed %@" = "ha rimosso %@"; "removed %@" = "ha rimosso %@";
/* rcv group event chat item */ /* rcv group event chat item */
"removed you" = "sei stato/a rimosso/a"; "removed you" = "ti ha rimosso/a";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Renegotiate" = "Rinegoziare"; "Renegotiate" = "Rinegoziare";
@@ -2617,6 +2810,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Renegotiate encryption?" = "Rinegoziare la crittografia?"; "Renegotiate encryption?" = "Rinegoziare la crittografia?";
/* No comment provided by engineer. */
"Repeat connection request?" = "Ripetere la richiesta di connessione?";
/* No comment provided by engineer. */
"Repeat join request?" = "Ripetere la richiesta di ingresso?";
/* chat item action */ /* chat item action */
"Reply" = "Rispondi"; "Reply" = "Rispondi";
@@ -2654,7 +2853,7 @@
"Reveal" = "Rivela"; "Reveal" = "Rivela";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Revert" = "Annulla"; "Revert" = "Ripristina";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Revoke" = "Revoca"; "Revoke" = "Revoca";
@@ -2728,6 +2927,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Scan QR code" = "Scansiona codice QR"; "Scan QR code" = "Scansiona codice QR";
/* No comment provided by engineer. */
"Scan QR code from desktop" = "Scansiona codice QR dal desktop";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Scan security code from your contact's app." = "Scansiona il codice di sicurezza dall'app del tuo contatto."; "Scan security code from your contact's app." = "Scansiona il codice di sicurezza dall'app del tuo contatto.";
@@ -2782,9 +2984,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send delivery receipts to" = "Invia ricevute di consegna a"; "Send delivery receipts to" = "Invia ricevute di consegna a";
/* No comment provided by engineer. */
"send direct message" = "invia messaggio diretto";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send direct message" = "Invia messaggio diretto"; "Send direct message" = "Invia messaggio diretto";
/* No comment provided by engineer. */
"Send direct message to connect" = "Invia messaggio diretto per connetterti";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send disappearing message" = "Invia messaggio a tempo"; "Send disappearing message" = "Invia messaggio a tempo";
@@ -2866,6 +3074,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Servers" = "Server"; "Servers" = "Server";
/* No comment provided by engineer. */
"Session code" = "Codice di sessione";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Set 1 day" = "Imposta 1 giorno"; "Set 1 day" = "Imposta 1 giorno";
@@ -3052,6 +3263,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Tap to activate profile." = "Tocca per attivare il profilo."; "Tap to activate profile." = "Tocca per attivare il profilo.";
/* No comment provided by engineer. */
"Tap to Connect" = "Tocca per connettere";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Tap to join" = "Tocca per entrare"; "Tap to join" = "Tocca per entrare";
@@ -3115,9 +3329,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "La crittografia funziona e il nuovo accordo sulla crittografia non è richiesto. Potrebbero verificarsi errori di connessione!"; "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "La crittografia funziona e il nuovo accordo sulla crittografia non è richiesto. Potrebbero verificarsi errori di connessione!";
/* No comment provided by engineer. */
"The group is fully decentralized it is visible only to the members." = "Il gruppo è completamente decentralizzato: è visibile solo ai membri.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The hash of the previous message is different." = "L'hash del messaggio precedente è diverso."; "The hash of the previous message is different." = "L'hash del messaggio precedente è diverso.";
@@ -3175,12 +3386,21 @@
/* notification title */ /* notification title */
"this contact" = "questo contatto"; "this contact" = "questo contatto";
/* No comment provided by engineer. */
"This device name" = "Il nome di questo dispositivo";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This group has over %lld members, delivery receipts are not sent." = "Questo gruppo ha più di %lld membri, le ricevute di consegna non vengono inviate."; "This group has over %lld members, delivery receipts are not sent." = "Questo gruppo ha più di %lld membri, le ricevute di consegna non vengono inviate.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This group no longer exists." = "Questo gruppo non esiste più."; "This group no longer exists." = "Questo gruppo non esiste più.";
/* No comment provided by engineer. */
"This is your own one-time link!" = "Questo è il tuo link una tantum!";
/* No comment provided by engineer. */
"This is your own SimpleX address!" = "Questo è il tuo indirizzo SimpleX!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This setting applies to messages in your current chat profile **%@**." = "Questa impostazione si applica ai messaggi del profilo di chat attuale **%@**."; "This setting applies to messages in your current chat profile **%@**." = "Questa impostazione si applica ai messaggi del profilo di chat attuale **%@**.";
@@ -3190,6 +3410,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To connect, your contact can scan QR code or use the link in the app." = "Per connettervi, il tuo contatto può scansionare il codice QR o usare il link nell'app."; "To connect, your contact can scan QR code or use the link in the app." = "Per connettervi, il tuo contatto può scansionare il codice QR o usare il link nell'app.";
/* No comment provided by engineer. */
"To hide unwanted messages." = "Per nascondere messaggi indesiderati.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To make a new connection" = "Per creare una nuova connessione"; "To make a new connection" = "Per creare una nuova connessione";
@@ -3238,6 +3461,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unable to record voice message" = "Impossibile registrare il messaggio vocale"; "Unable to record voice message" = "Impossibile registrare il messaggio vocale";
/* No comment provided by engineer. */
"Unblock" = "Sblocca";
/* No comment provided by engineer. */
"Unblock member" = "Sblocca membro";
/* No comment provided by engineer. */
"Unblock member?" = "Sbloccare il membro?";
/* item status description */ /* item status description */
"Unexpected error: %@" = "Errore imprevisto: % @"; "Unexpected error: %@" = "Errore imprevisto: % @";
@@ -3277,6 +3509,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "A meno che il tuo contatto non abbia eliminato la connessione o che questo link non sia già stato usato, potrebbe essere un errore; per favore segnalalo.\nPer connetterti, chiedi al tuo contatto di creare un altro link di connessione e controlla di avere una connessione di rete stabile."; "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "A meno che il tuo contatto non abbia eliminato la connessione o che questo link non sia già stato usato, potrebbe essere un errore; per favore segnalalo.\nPer connetterti, chiedi al tuo contatto di creare un altro link di connessione e controlla di avere una connessione di rete stabile.";
/* No comment provided by engineer. */
"Unlink" = "Scollega";
/* No comment provided by engineer. */
"Unlink desktop?" = "Scollegare il desktop?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unlock" = "Sblocca"; "Unlock" = "Sblocca";
@@ -3331,6 +3569,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use for new connections" = "Usa per connessioni nuove"; "Use for new connections" = "Usa per connessioni nuove";
/* No comment provided by engineer. */
"Use from desktop" = "Usa dal desktop";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use iOS call interface" = "Usa interfaccia di chiamata iOS"; "Use iOS call interface" = "Usa interfaccia di chiamata iOS";
@@ -3352,12 +3593,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Using SimpleX Chat servers." = "Utilizzo dei server SimpleX Chat."; "Using SimpleX Chat servers." = "Utilizzo dei server SimpleX Chat.";
/* No comment provided by engineer. */
"v%@" = "v%@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"v%@ (%@)" = "v%@ (%@)"; "v%@ (%@)" = "v%@ (%@)";
/* No comment provided by engineer. */
"Verify code with desktop" = "Verifica il codice con il desktop";
/* No comment provided by engineer. */
"Verify connection" = "Verifica la connessione";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Verify connection security" = "Verifica la sicurezza della connessione"; "Verify connection security" = "Verifica la sicurezza della connessione";
/* No comment provided by engineer. */
"Verify connections" = "Verifica le connessioni";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Verify security code" = "Verifica codice di sicurezza"; "Verify security code" = "Verifica codice di sicurezza";
@@ -3376,6 +3629,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"via relay" = "via relay"; "via relay" = "via relay";
/* No comment provided by engineer. */
"Via secure quantum resistant protocol." = "Tramite protocollo sicuro resistente alla quantistica.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Video call" = "Videochiamata"; "Video call" = "Videochiamata";
@@ -3484,6 +3740,27 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You are already connected to %@." = "Sei già connesso/a a %@."; "You are already connected to %@." = "Sei già connesso/a a %@.";
/* No comment provided by engineer. */
"You are already connecting to %@." = "Ti stai già connettendo a %@.";
/* No comment provided by engineer. */
"You are already connecting via this one-time link!" = "Ti stai già connettendo tramite questo link una tantum!";
/* No comment provided by engineer. */
"You are already in group %@." = "Sei già nel gruppo %@.";
/* No comment provided by engineer. */
"You are already joining the group %@." = "Stai già entrando nel gruppo %@.";
/* No comment provided by engineer. */
"You are already joining the group via this link!" = "Stai già entrando nel gruppo tramite questo link!";
/* No comment provided by engineer. */
"You are already joining the group via this link." = "Stai già entrando nel gruppo tramite questo link.";
/* No comment provided by engineer. */
"You are already joining the group!\nRepeat join request?" = "Stai già entrando nel gruppo!\nRipetere la richiesta di ingresso?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You are connected to the server used to receive messages from this contact." = "Sei connesso/a al server usato per ricevere messaggi da questo contatto."; "You are connected to the server used to receive messages from this contact." = "Sei connesso/a al server usato per ricevere messaggi da questo contatto.";
@@ -3559,6 +3836,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You could not be verified; please try again." = "Non è stato possibile verificarti, riprova."; "You could not be verified; please try again." = "Non è stato possibile verificarti, riprova.";
/* No comment provided by engineer. */
"You have already requested connection via this address!" = "Hai già richiesto la connessione tramite questo indirizzo!";
/* No comment provided by engineer. */
"You have already requested connection!\nRepeat connection request?" = "Hai già richiesto la connessione!\nRipetere la richiesta di connessione?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You have no chats" = "Non hai chat"; "You have no chats" = "Non hai chat";
@@ -3601,6 +3884,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be connected to group when the group host's device is online, please wait or check later!" = "Verrai connesso/a al gruppo quando il dispositivo dell'host del gruppo sarà in linea, attendi o controlla più tardi!"; "You will be connected to group when the group host's device is online, please wait or check later!" = "Verrai connesso/a al gruppo quando il dispositivo dell'host del gruppo sarà in linea, attendi o controlla più tardi!";
/* No comment provided by engineer. */
"You will be connected when group link host's device is online, please wait or check later!" = "Verrai connesso/a quando il dispositivo dell'host del gruppo sarà in linea, attendi o controlla più tardi!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be connected when your connection request is accepted, please wait or check later!" = "Verrai connesso/a quando la tua richiesta di connessione verrà accettata, attendi o controlla più tardi!"; "You will be connected when your connection request is accepted, please wait or check later!" = "Verrai connesso/a quando la tua richiesta di connessione verrà accettata, attendi o controlla più tardi!";
@@ -3611,7 +3897,7 @@
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Dovrai autenticarti quando avvii o riapri l'app dopo 30 secondi in secondo piano."; "You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Dovrai autenticarti quando avvii o riapri l'app dopo 30 secondi in secondo piano.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will join a group this link refers to and connect to its group members." = "Entrerai in un gruppo a cui si riferisce questo link e ti connetterai ai suoi membri."; "You will connect to all group members." = "Ti connetterai a tutti i membri del gruppo.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "Continuerai a ricevere chiamate e notifiche da profili silenziati quando sono attivi."; "You will still receive calls and notifications from muted profiles when they are active." = "Continuerai a ricevere chiamate e notifiche da profili silenziati quando sono attivi.";
@@ -3643,9 +3929,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat database is not encrypted - set passphrase to encrypt it." = "Il tuo database della chat non è crittografato: imposta la password per crittografarlo."; "Your chat database is not encrypted - set passphrase to encrypt it." = "Il tuo database della chat non è crittografato: imposta la password per crittografarlo.";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "Il tuo profilo di chat verrà inviato ai membri del gruppo";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat profiles" = "I tuoi profili di chat"; "Your chat profiles" = "I tuoi profili di chat";
@@ -3679,6 +3962,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your privacy" = "La tua privacy"; "Your privacy" = "La tua privacy";
/* No comment provided by engineer. */
"Your profile" = "Il tuo profilo";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your profile **%@** will be shared." = "Il tuo profilo **%@** verrà condiviso."; "Your profile **%@** will be shared." = "Il tuo profilo **%@** verrà condiviso.";
@@ -7,6 +7,9 @@
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX usa Face ID per l'autenticazione locale"; "NSFaceIDUsageDescription" = "SimpleX usa Face ID per l'autenticazione locale";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX usa l'accesso alla rete locale per consentire di usare il profilo di chat tramite l'app desktop sulla stessa rete.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX ha bisogno dell'accesso al microfono per le chiamate audio e video e per registrare messaggi vocali."; "NSMicrophoneUsageDescription" = "SimpleX ha bisogno dell'accesso al microfono per le chiamate audio e video e per registrare messaggi vocali.";
+39 -35
View File
@@ -181,6 +181,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld minutes" = "%lld 分"; "%lld minutes" = "%lld 分";
/* No comment provided by engineer. */
"%lld new interface languages" = "%lldつの新しいインターフェース言語";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld second(s)" = "%lld 秒"; "%lld second(s)" = "%lld 秒";
@@ -443,6 +446,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"App build: %@" = "アプリのビルド: %@"; "App build: %@" = "アプリのビルド: %@";
/* No comment provided by engineer. */
"App encrypts new local files (except videos)." = "アプリは新しいローカルファイル(ビデオを除く)を暗号化します。";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"App icon" = "アプリのアイコン"; "App icon" = "アプリのアイコン";
@@ -536,6 +542,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Both you and your contact can send voice messages." = "あなたと連絡相手が音声メッセージを送信できます。"; "Both you and your contact can send voice messages." = "あなたと連絡相手が音声メッセージを送信できます。";
/* No comment provided by engineer. */
"Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" = "ブルガリア語、フィンランド語、タイ語、ウクライナ語 - ユーザーと [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)に感謝します!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "チャット プロファイル経由 (デフォルト) または [接続経由](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "チャット プロファイル経由 (デフォルト) または [接続経由](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).";
@@ -708,21 +717,12 @@
/* server test step */ /* server test step */
"Connect" = "接続"; "Connect" = "接続";
/* No comment provided by engineer. */
"Connect directly" = "直接接続する";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect incognito" = "シークレットモードで接続"; "Connect incognito" = "シークレットモードで接続";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "SimpleX Chat 開発者に接続します。"; "connect to SimpleX Chat developers." = "SimpleX Chat 開発者に接続します。";
/* No comment provided by engineer. */
"Connect via contact link" = "連絡先リンク経由で接続しますか?";
/* No comment provided by engineer. */
"Connect via group link?" = "グループリンク経由で接続しますか?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via link" = "リンク経由で接続"; "Connect via link" = "リンク経由で接続";
@@ -789,9 +789,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Contact already exists" = "連絡先に既に存在します"; "Contact already exists" = "連絡先に既に存在します";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "連絡先と全メッセージが削除されます (※元に戻せません※)!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"contact has e2e encryption" = "連絡先はエンドツーエンド暗号化があります"; "contact has e2e encryption" = "連絡先はエンドツーエンド暗号化があります";
@@ -843,6 +840,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create link" = "リンクを生成する"; "Create link" = "リンクを生成する";
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "[デスクトップアプリ](https://simplex.chat/downloads/)で新しいプロファイルを作成します。 💻";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create one-time invitation link" = "使い捨ての招待リンクを生成する"; "Create one-time invitation link" = "使い捨ての招待リンクを生成する";
@@ -993,9 +993,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete Contact" = "連絡先を削除"; "Delete Contact" = "連絡先を削除";
/* No comment provided by engineer. */
"Delete contact?" = "連絡先を削除しますか?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete database" = "データベースを削除"; "Delete database" = "データベースを削除";
@@ -1080,6 +1077,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delivery receipts are disabled!" = "Delivery receipts are disabled!"; "Delivery receipts are disabled!" = "Delivery receipts are disabled!";
/* No comment provided by engineer. */
"Delivery receipts!" = "配信通知!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Description" = "説明"; "Description" = "説明";
@@ -1147,10 +1147,7 @@
"Disconnect" = "切断"; "Disconnect" = "切断";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Display name" = "表示名"; "Discover and join groups" = "グループを見つけて参加する";
/* No comment provided by engineer. */
"Display name:" = "表示名:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Do it later" = "後で行う"; "Do it later" = "後で行う";
@@ -1245,6 +1242,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Encrypt local files" = "ローカルファイルを暗号化する"; "Encrypt local files" = "ローカルファイルを暗号化する";
/* No comment provided by engineer. */
"Encrypt stored files & media" = "保存されたファイルとメディアを暗号化する";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Encrypted database" = "暗号化済みデータベース"; "Encrypted database" = "暗号化済みデータベース";
@@ -1353,6 +1353,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating group link" = "グループリンク生成にエラー発生"; "Error creating group link" = "グループリンク生成にエラー発生";
/* No comment provided by engineer. */
"Error creating member contact" = "メンバー連絡先の作成中にエラーが発生";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating profile!" = "プロフィール作成にエラー発生!"; "Error creating profile!" = "プロフィール作成にエラー発生!";
@@ -1428,6 +1431,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending email" = "メールの送信にエラー発生"; "Error sending email" = "メールの送信にエラー発生";
/* No comment provided by engineer. */
"Error sending member contact invitation" = "招待メッセージの送信エラー";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending message" = "メッセージ送信にエラー発生"; "Error sending message" = "メッセージ送信にエラー発生";
@@ -2115,6 +2121,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"New database archive" = "新しいデータベースのアーカイブ"; "New database archive" = "新しいデータベースのアーカイブ";
/* No comment provided by engineer. */
"New desktop app!" = "新しいデスクトップアプリ!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"New display name" = "新たな表示名"; "New display name" = "新たな表示名";
@@ -2191,7 +2200,8 @@
"observer" = "オブザーバー"; "observer" = "オブザーバー";
/* enabled status /* enabled status
group pref value */ group pref value
time to disappear */
"off" = "オフ"; "off" = "オフ";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@@ -2272,6 +2282,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Only your contact can send voice messages." = "音声メッセージを送れるのはあなたの連絡相手だけです。"; "Only your contact can send voice messages." = "音声メッセージを送れるのはあなたの連絡相手だけです。";
/* No comment provided by engineer. */
"Open" = "開く";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open chat" = "チャットを開く"; "Open chat" = "チャットを開く";
@@ -2290,12 +2303,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Opening database…" = "データベースを開いています…"; "Opening database…" = "データベースを開いています…";
/* No comment provided by engineer. */
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "ブラウザでリンクを開くと接続のプライバシーとセキュリティが下がる可能性があります。信頼されないSimpleXリンクは読み込まれません。";
/* No comment provided by engineer. */
"or chat with the developers" = "または開発者とチャットする";
/* member role */ /* member role */
"owner" = "オーナー"; "owner" = "オーナー";
@@ -2743,6 +2750,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send direct message" = "ダイレクトメッセージを送信"; "Send direct message" = "ダイレクトメッセージを送信";
/* No comment provided by engineer. */
"Send direct message to connect" = "ダイレクトメッセージを送信して接続する";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send disappearing message" = "消えるメッセージを送信"; "Send disappearing message" = "消えるメッセージを送信";
@@ -2902,6 +2912,9 @@
/* simplex link type */ /* simplex link type */
"SimpleX one-time invitation" = "SimpleX使い捨て招待リンク"; "SimpleX one-time invitation" = "SimpleX使い捨て招待リンク";
/* No comment provided by engineer. */
"Simplified incognito mode" = "シークレットモードの簡素化";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Skip" = "スキップ"; "Skip" = "スキップ";
@@ -3049,9 +3062,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "暗号化は機能しており、新しい暗号化への同意は必要ありません。接続エラーが発生する可能性があります!"; "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "暗号化は機能しており、新しい暗号化への同意は必要ありません。接続エラーが発生する可能性があります!";
/* No comment provided by engineer. */
"The group is fully decentralized it is visible only to the members." = "グループは完全分散型で、メンバーしか内容を見れません。";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The hash of the previous message is different." = "以前のメッセージとハッシュ値が異なります。"; "The hash of the previous message is different." = "以前のメッセージとハッシュ値が異なります。";
@@ -3538,9 +3548,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "起動時、または非アクティブ状態で30秒が経った後に戻ると、認証する必要となります。"; "You will be required to authenticate when you start or resume the app after 30 seconds in background." = "起動時、または非アクティブ状態で30秒が経った後に戻ると、認証する必要となります。";
/* No comment provided by engineer. */
"You will join a group this link refers to and connect to its group members." = "このリンクのグループに参加し、そのメンバーに繋がります。";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "ミュートされたプロフィールがアクティブな場合でも、そのプロフィールからの通話や通知は引き続き受信します。"; "You will still receive calls and notifications from muted profiles when they are active." = "ミュートされたプロフィールがアクティブな場合でも、そのプロフィールからの通話や通知は引き続き受信します。";
@@ -3571,9 +3578,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat database is not encrypted - set passphrase to encrypt it." = "チャット データベースは暗号化されていません - 暗号化するにはパスフレーズを設定してください。"; "Your chat database is not encrypted - set passphrase to encrypt it." = "チャット データベースは暗号化されていません - 暗号化するにはパスフレーズを設定してください。";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "あなたのチャットプロフィールが他のグループメンバーに送られます";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat profiles" = "あなたのチャットプロフィール"; "Your chat profiles" = "あなたのチャットプロフィール";
+345 -41
View File
@@ -25,6 +25,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- more stable message delivery.\n- a bit better groups.\n- and more!" = "- stabielere berichtbezorging.\n- een beetje betere groepen.\n- en meer!"; "- more stable message delivery.\n- a bit better groups.\n- and more!" = "- stabielere berichtbezorging.\n- een beetje betere groepen.\n- en meer!";
/* No comment provided by engineer. */
"- optionally notify deleted contacts.\n- profile names with spaces.\n- and more!" = "- optioneel verwijderde contacten op de hoogte stellen.\n- profielnamen met spaties.\n- en meer!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- spraakberichten tot 5 minuten.\n- aangepaste tijd om te verdwijnen.\n- bewerkingsgeschiedenis."; "- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- spraakberichten tot 5 minuten.\n- aangepaste tijd om te verdwijnen.\n- bewerkingsgeschiedenis.";
@@ -43,6 +46,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"(" = "("; "(" = "(";
/* No comment provided by engineer. */
"(new)" = "(nieuw)";
/* No comment provided by engineer. */
"(this device v%@)" = "(dit apparaat v%@)";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
")" = ")"; ")" = ")";
@@ -118,12 +127,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@ %@" = "%@ %@"; "%@ %@" = "%@ %@";
/* No comment provided by engineer. */
"%@ and %@" = "%@ en %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@ and %@ connected" = "%@ en %@ verbonden"; "%@ and %@ connected" = "%@ en %@ verbonden";
/* copied message info, <sender> at <time> */ /* copied message info, <sender> at <time> */
"%@ at %@:" = "%1$@ bij %2$@:"; "%@ at %@:" = "%1$@ bij %2$@:";
/* No comment provided by engineer. */
"%@ connected" = "%@ verbonden";
/* notification title */ /* notification title */
"%@ is connected!" = "%@ is verbonden!"; "%@ is connected!" = "%@ is verbonden!";
@@ -139,6 +154,9 @@
/* notification title */ /* notification title */
"%@ wants to connect!" = "%@ wil verbinding maken!"; "%@ wants to connect!" = "%@ wil verbinding maken!";
/* No comment provided by engineer. */
"%@, %@ and %lld members" = "%@, %@ en %lld leden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@, %@ and %lld other members connected" = "%@, %@ en %lld andere leden hebben verbinding gemaakt"; "%@, %@ and %lld other members connected" = "%@, %@ en %lld andere leden hebben verbinding gemaakt";
@@ -178,9 +196,21 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld file(s) with total size of %@" = "%lld bestand(en) met een totale grootte van %@"; "%lld file(s) with total size of %@" = "%lld bestand(en) met een totale grootte van %@";
/* No comment provided by engineer. */
"%lld group events" = "%lld groep gebeurtenissen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld members" = "%lld leden"; "%lld members" = "%lld leden";
/* No comment provided by engineer. */
"%lld messages blocked" = "%lld berichten geblokkeerd";
/* No comment provided by engineer. */
"%lld messages marked deleted" = "%lld berichten gemarkeerd als verwijderd";
/* No comment provided by engineer. */
"%lld messages moderated by %@" = "%lld berichten gemodereerd door %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld minutes" = "%lld minuten"; "%lld minutes" = "%lld minuten";
@@ -229,6 +259,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"~strike~" = "\\~staking~"; "~strike~" = "\\~staking~";
/* time to disappear */
"0 sec" = "0 sec";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"0s" = "0s"; "0s" = "0s";
@@ -371,6 +404,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd."; "All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd.";
/* No comment provided by engineer. */
"All new messages from %@ will be hidden!" = "Alle nieuwe berichten van %@ worden verborgen!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"All your contacts will remain connected." = "Al uw contacten blijven verbonden."; "All your contacts will remain connected." = "Al uw contacten blijven verbonden.";
@@ -434,6 +470,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Already connected?" = "Al verbonden?"; "Already connected?" = "Al verbonden?";
/* No comment provided by engineer. */
"Already connecting!" = "Al bezig met verbinden!";
/* No comment provided by engineer. */
"Already joining the group!" = "Al lid van de groep!";
/* pref value */ /* pref value */
"always" = "altijd"; "always" = "altijd";
@@ -443,6 +485,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"An empty chat profile with the provided name is created, and the app opens as usual." = "Er wordt een leeg chatprofiel met de opgegeven naam gemaakt en de app wordt zoals gewoonlijk geopend."; "An empty chat profile with the provided name is created, and the app opens as usual." = "Er wordt een leeg chatprofiel met de opgegeven naam gemaakt en de app wordt zoals gewoonlijk geopend.";
/* No comment provided by engineer. */
"and %lld other events" = "en %lld andere gebeurtenissen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Answer call" = "Beantwoord oproep"; "Answer call" = "Beantwoord oproep";
@@ -500,6 +545,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Authentication unavailable" = "Verificatie niet beschikbaar"; "Authentication unavailable" = "Verificatie niet beschikbaar";
/* member role */
"author" = "auteur";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Auto-accept" = "Automatisch accepteren"; "Auto-accept" = "Automatisch accepteren";
@@ -512,6 +560,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Back" = "Terug"; "Back" = "Terug";
/* No comment provided by engineer. */
"Bad desktop address" = "Onjuist desktopadres";
/* integrity error chat item */ /* integrity error chat item */
"bad message hash" = "Onjuiste bericht hash"; "bad message hash" = "Onjuiste bericht hash";
@@ -524,9 +575,27 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Bad message ID" = "Onjuiste bericht-ID"; "Bad message ID" = "Onjuiste bericht-ID";
/* No comment provided by engineer. */
"Better groups" = "Betere groepen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Better messages" = "Betere berichten"; "Better messages" = "Betere berichten";
/* No comment provided by engineer. */
"Block" = "Blokkeren";
/* No comment provided by engineer. */
"Block group members" = "Groepsleden blokkeren";
/* No comment provided by engineer. */
"Block member" = "Lid blokkeren";
/* No comment provided by engineer. */
"Block member?" = "Lid blokkeren?";
/* No comment provided by engineer. */
"blocked" = "geblokkeerd";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"bold" = "vetgedrukt"; "bold" = "vetgedrukt";
@@ -597,7 +666,7 @@
"Change lock mode" = "Wijzig de vergrendelings modus"; "Change lock mode" = "Wijzig de vergrendelings modus";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Change member role?" = "Rol van gebruiker wijzigen?"; "Change member role?" = "Rol van lid wijzigen?";
/* authentication reason */ /* authentication reason */
"Change passcode" = "Toegangscode wijzigen"; "Change passcode" = "Toegangscode wijzigen";
@@ -721,19 +790,28 @@
"Connect" = "Verbind"; "Connect" = "Verbind";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect directly" = "Verbind direct"; "Connect automatically" = "Automatisch verbinden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect incognito" = "Verbind incognito"; "Connect incognito" = "Verbind incognito";
/* No comment provided by engineer. */
"Connect to desktop" = "Verbinden met desktop";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "maak verbinding met SimpleX Chat-ontwikkelaars."; "connect to SimpleX Chat developers." = "maak verbinding met SimpleX Chat-ontwikkelaars.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via contact link" = "Verbinden via contact link?"; "Connect to yourself?" = "Verbinding maken met jezelf?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via group link?" = "Verbinden via groep link?"; "Connect to yourself?\nThis is your own one-time link!" = "Verbinding maken met jezelf?\nDit is uw eigen eenmalige link!";
/* No comment provided by engineer. */
"Connect to yourself?\nThis is your own SimpleX address!" = "Verbinding maken met jezelf?\nDit is uw eigen SimpleX adres!";
/* No comment provided by engineer. */
"Connect via contact address" = "Verbinding maken via contactadres";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via link" = "Maak verbinding via link"; "Connect via link" = "Maak verbinding via link";
@@ -744,9 +822,21 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via one-time link" = "Verbinden via een eenmalige link?"; "Connect via one-time link" = "Verbinden via een eenmalige link?";
/* No comment provided by engineer. */
"Connect with %@" = "Verbonden met %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connected" = "verbonden"; "connected" = "verbonden";
/* No comment provided by engineer. */
"Connected desktop" = "Verbonden desktop";
/* rcv group event chat item */
"connected directly" = "direct verbonden";
/* No comment provided by engineer. */
"Connected to desktop" = "Verbonden met desktop";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connecting" = "Verbinden"; "connecting" = "Verbinden";
@@ -771,6 +861,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connecting server… (error: %@)" = "Verbinden met server... (fout: %@)"; "Connecting server… (error: %@)" = "Verbinden met server... (fout: %@)";
/* No comment provided by engineer. */
"Connecting to desktop" = "Verbinding maken met desktop";
/* chat list item title */ /* chat list item title */
"connecting…" = "Verbinden…"; "connecting…" = "Verbinden…";
@@ -789,6 +882,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connection request sent!" = "Verbindingsverzoek verzonden!"; "Connection request sent!" = "Verbindingsverzoek verzonden!";
/* No comment provided by engineer. */
"Connection terminated" = "Verbinding beëindigd";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connection timeout" = "Timeout verbinding"; "Connection timeout" = "Timeout verbinding";
@@ -801,9 +897,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Contact already exists" = "Contact bestaat al"; "Contact already exists" = "Contact bestaat al";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "Contact en alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"contact has e2e encryption" = "contact heeft e2e-codering"; "contact has e2e encryption" = "contact heeft e2e-codering";
@@ -840,15 +933,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Core version: v%@" = "Core versie: v% @"; "Core version: v%@" = "Core versie: v% @";
/* No comment provided by engineer. */
"Correct name to %@?" = "Juiste naam voor %@?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create" = "Maak"; "Create" = "Maak";
/* No comment provided by engineer. */
"Create a group using a random profile." = "Maak een groep met een willekeurig profiel.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create an address to let people connect with you." = "Maak een adres aan zodat mensen contact met je kunnen opnemen."; "Create an address to let people connect with you." = "Maak een adres aan zodat mensen contact met je kunnen opnemen.";
/* server test step */ /* server test step */
"Create file" = "Bestand maken"; "Create file" = "Bestand maken";
/* No comment provided by engineer. */
"Create group" = "Groep aanmaken";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create group link" = "Groep link maken"; "Create group link" = "Groep link maken";
@@ -861,6 +963,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create one-time invitation link" = "Maak een eenmalige uitnodiging link"; "Create one-time invitation link" = "Maak een eenmalige uitnodiging link";
/* No comment provided by engineer. */
"Create profile" = "Maak een profiel aan";
/* server test step */ /* server test step */
"Create queue" = "Maak een wachtrij"; "Create queue" = "Maak een wachtrij";
@@ -975,6 +1080,9 @@
/* chat item action */ /* chat item action */
"Delete" = "Verwijderen"; "Delete" = "Verwijderen";
/* No comment provided by engineer. */
"Delete %lld messages?" = "%lld berichten verwijderen?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete address" = "Adres verwijderen"; "Delete address" = "Adres verwijderen";
@@ -987,6 +1095,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete all files" = "Verwijder alle bestanden"; "Delete all files" = "Verwijder alle bestanden";
/* No comment provided by engineer. */
"Delete and notify contact" = "Contact verwijderen en op de hoogte stellen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete archive" = "Archief verwijderen"; "Delete archive" = "Archief verwijderen";
@@ -1009,7 +1120,7 @@
"Delete Contact" = "Verwijder contact"; "Delete Contact" = "Verwijder contact";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete contact?" = "Verwijder contact?"; "Delete contact?\nThis cannot be undone!" = "Verwijder contact?\nDit kan niet ongedaan gemaakt worden!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete database" = "Database verwijderen"; "Delete database" = "Database verwijderen";
@@ -1086,6 +1197,9 @@
/* copied message info */ /* copied message info */
"Deleted at: %@" = "Verwijderd om: %@"; "Deleted at: %@" = "Verwijderd om: %@";
/* rcv direct event chat item */
"deleted contact" = "verwijderd contact";
/* rcv group event chat item */ /* rcv group event chat item */
"deleted group" = "verwijderde groep"; "deleted group" = "verwijderde groep";
@@ -1101,6 +1215,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Description" = "Beschrijving"; "Description" = "Beschrijving";
/* No comment provided by engineer. */
"Desktop address" = "Desktop adres";
/* No comment provided by engineer. */
"Desktop app version %@ is not compatible with this app." = "Desktop-app-versie %@ is niet compatibel met deze app.";
/* No comment provided by engineer. */
"Desktop devices" = "Desktop apparaten";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Develop" = "Ontwikkelen"; "Develop" = "Ontwikkelen";
@@ -1164,14 +1287,14 @@
/* server test step */ /* server test step */
"Disconnect" = "verbinding verbreken"; "Disconnect" = "verbinding verbreken";
/* No comment provided by engineer. */
"Disconnect desktop?" = "Desktop loskoppelen?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Discover and join groups" = "Ontdek en sluit je aan bij groepen"; "Discover and join groups" = "Ontdek en sluit je aan bij groepen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Display name" = "Weergavenaam"; "Discover via local network" = "Ontdek via het lokale netwerk";
/* No comment provided by engineer. */
"Display name:" = "Weergavenaam:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Do it later" = "Doe het later"; "Do it later" = "Doe het later";
@@ -1308,6 +1431,12 @@
/* chat item text */ /* chat item text */
"encryption re-negotiation allowed for %@" = "versleuteling heronderhandeling toegestaan voor % @"; "encryption re-negotiation allowed for %@" = "versleuteling heronderhandeling toegestaan voor % @";
/* message decrypt error item */
"Encryption re-negotiation error" = "Fout bij heronderhandeling van codering";
/* No comment provided by engineer. */
"Encryption re-negotiation failed." = "Opnieuw onderhandelen over de codering is mislukt.";
/* chat item text */ /* chat item text */
"encryption re-negotiation required" = "heronderhandeling van versleuteling vereist"; "encryption re-negotiation required" = "heronderhandeling van versleuteling vereist";
@@ -1323,6 +1452,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter correct passphrase." = "Voer het juiste wachtwoord in."; "Enter correct passphrase." = "Voer het juiste wachtwoord in.";
/* No comment provided by engineer. */
"Enter group name…" = "Groep naam invoeren…";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter Passcode" = "Voer toegangscode in"; "Enter Passcode" = "Voer toegangscode in";
@@ -1335,12 +1467,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter server manually" = "Voer de server handmatig in"; "Enter server manually" = "Voer de server handmatig in";
/* No comment provided by engineer. */
"Enter this device name…" = "Voer deze apparaatnaam in…";
/* placeholder */ /* placeholder */
"Enter welcome message…" = "Welkomst bericht invoeren…"; "Enter welcome message…" = "Welkomst bericht invoeren…";
/* placeholder */ /* placeholder */
"Enter welcome message… (optional)" = "Voer welkomst bericht in... (optioneel)"; "Enter welcome message… (optional)" = "Voer welkomst bericht in... (optioneel)";
/* No comment provided by engineer. */
"Enter your name…" = "Vul uw naam in…";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"error" = "fout"; "error" = "fout";
@@ -1357,7 +1495,7 @@
"Error accessing database file" = "Fout bij toegang tot database bestand"; "Error accessing database file" = "Fout bij toegang tot database bestand";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error adding member(s)" = "Fout bij het toevoegen van gebruiker(s)"; "Error adding member(s)" = "Fout bij het toevoegen van leden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error changing address" = "Fout bij wijzigen van adres"; "Error changing address" = "Fout bij wijzigen van adres";
@@ -1377,6 +1515,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating group link" = "Fout bij maken van groep link"; "Error creating group link" = "Fout bij maken van groep link";
/* No comment provided by engineer. */
"Error creating member contact" = "Fout bij aanmaken contact";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating profile!" = "Fout bij aanmaken van profiel!"; "Error creating profile!" = "Fout bij aanmaken van profiel!";
@@ -1432,7 +1573,7 @@
"Error receiving file" = "Fout bij ontvangen van bestand"; "Error receiving file" = "Fout bij ontvangen van bestand";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error removing member" = "Fout bij verwijderen van gebruiker"; "Error removing member" = "Fout bij verwijderen van lid";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error saving %@ servers" = "Fout bij opslaan van %@ servers"; "Error saving %@ servers" = "Fout bij opslaan van %@ servers";
@@ -1455,6 +1596,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending email" = "Fout bij het verzenden van e-mail"; "Error sending email" = "Fout bij het verzenden van e-mail";
/* No comment provided by engineer. */
"Error sending member contact invitation" = "Fout bij verzenden van contact uitnodiging";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending message" = "Fout bij verzenden van bericht"; "Error sending message" = "Fout bij verzenden van bericht";
@@ -1506,6 +1650,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Exit without saving" = "Afsluiten zonder opslaan"; "Exit without saving" = "Afsluiten zonder opslaan";
/* chat item action */
"Expand" = "Uitbreiden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Export database" = "Database exporteren"; "Export database" = "Database exporteren";
@@ -1524,6 +1671,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Fast and no wait until the sender is online!" = "Snel en niet wachten tot de afzender online is!"; "Fast and no wait until the sender is online!" = "Snel en niet wachten tot de afzender online is!";
/* No comment provided by engineer. */
"Faster joining and more reliable messages." = "Snellere deelname en betrouwbaardere berichten.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Favorite" = "Favoriet"; "Favorite" = "Favoriet";
@@ -1581,6 +1731,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"For console" = "Voor console"; "For console" = "Voor console";
/* No comment provided by engineer. */
"Found desktop" = "Desktop gevonden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"French interface" = "Franse interface"; "French interface" = "Franse interface";
@@ -1593,6 +1746,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Full name:" = "Volledige naam:"; "Full name:" = "Volledige naam:";
/* No comment provided by engineer. */
"Fully decentralized visible only to members." = "Volledig gedecentraliseerd alleen zichtbaar voor leden.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Fully re-implemented - work in background!" = "Volledig opnieuw geïmplementeerd - werk op de achtergrond!"; "Fully re-implemented - work in background!" = "Volledig opnieuw geïmplementeerd - werk op de achtergrond!";
@@ -1605,6 +1761,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Group" = "Groep"; "Group" = "Groep";
/* No comment provided by engineer. */
"Group already exists" = "Groep bestaat al";
/* No comment provided by engineer. */
"Group already exists!" = "Groep bestaat al!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"group deleted" = "groep verwijderd"; "group deleted" = "groep verwijderd";
@@ -1776,6 +1938,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incognito" = "Incognito"; "Incognito" = "Incognito";
/* No comment provided by engineer. */
"Incognito groups" = "Incognitogroepen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incognito mode" = "Incognito modus"; "Incognito mode" = "Incognito modus";
@@ -1803,6 +1968,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incompatible database version" = "Incompatibele database versie"; "Incompatible database version" = "Incompatibele database versie";
/* No comment provided by engineer. */
"Incompatible version" = "Incompatibele versie";
/* PIN entry */ /* PIN entry */
"Incorrect passcode" = "Onjuiste toegangscode"; "Incorrect passcode" = "Onjuiste toegangscode";
@@ -1842,6 +2010,9 @@
/* invalid chat item */ /* invalid chat item */
"invalid data" = "ongeldige gegevens"; "invalid data" = "ongeldige gegevens";
/* No comment provided by engineer. */
"Invalid name!" = "Ongeldige naam!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Invalid server address!" = "Ongeldig server adres!"; "Invalid server address!" = "Ongeldig server adres!";
@@ -1894,10 +2065,10 @@
"It allows having many anonymous connections without any shared data between them in a single chat profile." = "Het maakt het mogelijk om veel anonieme verbindingen te hebben zonder enige gedeelde gegevens tussen hen in een enkel chat profiel."; "It allows having many anonymous connections without any shared data between them in a single chat profile." = "Het maakt het mogelijk om veel anonieme verbindingen te hebben zonder enige gedeelde gegevens tussen hen in een enkel chat profiel.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"It can happen when you or your connection used the old database backup." = "Het kan gebeuren wanneer u of de ander een oude databaseback-up gebruikt."; "It can happen when you or your connection used the old database backup." = "Het kan gebeuren wanneer u of de ander een oude database back-up gebruikt.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"It can happen when:\n1. The messages expired in the sending client after 2 days or on the server after 30 days.\n2. Message decryption failed, because you or your contact used old database backup.\n3. The connection was compromised." = "Het kan gebeuren wanneer:\n1. De berichten zijn na 2 dagen verlopen bij de verzendende client of na 30 dagen op de server.\n2. Decodering van het bericht is mislukt, omdat u of uw contact een oude databaseback-up heeft gebruikt.\n3. De verbinding is verbroken."; "It can happen when:\n1. The messages expired in the sending client after 2 days or on the server after 30 days.\n2. Message decryption failed, because you or your contact used old database backup.\n3. The connection was compromised." = "Het kan gebeuren wanneer:\n1. De berichten zijn na 2 dagen verlopen bij de verzendende client of na 30 dagen op de server.\n2. Decodering van het bericht is mislukt, omdat u of uw contact een oude database back-up heeft gebruikt.\n3. De verbinding is verbroken.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"It seems like you are already connected via this link. If it is not the case, there was an error (%@)." = "Het lijkt erop dat u al bent verbonden via deze link. Als dit niet het geval is, is er een fout opgetreden (%@)."; "It seems like you are already connected via this link. If it is not the case, there was an error (%@)." = "Het lijkt erop dat u al bent verbonden via deze link. Als dit niet het geval is, is er een fout opgetreden (%@).";
@@ -1920,12 +2091,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Join group" = "Word lid van groep"; "Join group" = "Word lid van groep";
/* No comment provided by engineer. */
"Join group?" = "Deelnemen aan groep?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Join incognito" = "Doe incognito mee"; "Join incognito" = "Doe incognito mee";
/* No comment provided by engineer. */
"Join with current profile" = "Word lid met huidig profiel";
/* No comment provided by engineer. */
"Join your group?\nThis is your link for group %@!" = "Sluit u aan bij uw groep?\nDit is jouw link voor groep %@!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Joining group" = "Deel nemen aan groep"; "Joining group" = "Deel nemen aan groep";
/* No comment provided by engineer. */
"Keep the app open to use it from desktop" = "Houd de app geopend om deze vanaf de desktop te gebruiken";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Keep your connections" = "Behoud uw verbindingen"; "Keep your connections" = "Behoud uw verbindingen";
@@ -1962,6 +2145,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Limitations" = "Beperkingen"; "Limitations" = "Beperkingen";
/* No comment provided by engineer. */
"Link mobile and desktop apps! 🔗" = "Koppel mobiele en desktop-apps! 🔗";
/* No comment provided by engineer. */
"Linked desktop options" = "Gekoppelde desktop opties";
/* No comment provided by engineer. */
"Linked desktops" = "Gelinkte desktops";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"LIVE" = "LIVE"; "LIVE" = "LIVE";
@@ -2020,22 +2212,22 @@
"Max 30 seconds, received instantly." = "Max 30 seconden, direct ontvangen."; "Max 30 seconds, received instantly." = "Max 30 seconden, direct ontvangen.";
/* member role */ /* member role */
"member" = "gebruiker"; "member" = "lid";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Member" = "Gebruiker"; "Member" = "Lid";
/* rcv group event chat item */ /* rcv group event chat item */
"member connected" = "is toegetreden"; "member connected" = "is toegetreden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Member role will be changed to \"%@\". All group members will be notified." = "De rol van gebruiker wordt gewijzigd in \"%@\". Alle groepsleden worden op de hoogte gebracht."; "Member role will be changed to \"%@\". All group members will be notified." = "De rol van lid wordt gewijzigd in \"%@\". Alle groepsleden worden op de hoogte gebracht.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Member role will be changed to \"%@\". The member will receive a new invitation." = "De rol van gebruiker wordt gewijzigd in \"%@\". Het lid ontvangt een nieuwe uitnodiging."; "Member role will be changed to \"%@\". The member will receive a new invitation." = "De rol van lid wordt gewijzigd in \"%@\". Het lid ontvangt een nieuwe uitnodiging.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Member will be removed from group - this cannot be undone!" = "Gebruiker wordt uit de groep verwijderd, dit kan niet ongedaan worden gemaakt!"; "Member will be removed from group - this cannot be undone!" = "Lid wordt uit de groep verwijderd, dit kan niet ongedaan worden gemaakt!";
/* item status text */ /* item status text */
"Message delivery error" = "Fout bij bezorging van bericht"; "Message delivery error" = "Fout bij bezorging van bericht";
@@ -2067,6 +2259,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Messages & files" = "Berichten"; "Messages & files" = "Berichten";
/* No comment provided by engineer. */
"Messages from %@ will be shown!" = "Berichten van %@ worden getoond!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Migrating database archive…" = "Database archief migreren…"; "Migrating database archive…" = "Database archief migreren…";
@@ -2214,6 +2409,9 @@
/* copied message info in history */ /* copied message info in history */
"no text" = "geen tekst"; "no text" = "geen tekst";
/* No comment provided by engineer. */
"Not compatible!" = "Niet compatibel!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Notifications" = "Meldingen"; "Notifications" = "Meldingen";
@@ -2227,7 +2425,8 @@
"observer" = "Waarnemer"; "observer" = "Waarnemer";
/* enabled status /* enabled status
group pref value */ group pref value
time to disappear */
"off" = "uit"; "off" = "uit";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@@ -2273,7 +2472,7 @@
"Only group owners can change group preferences." = "Alleen groep eigenaren kunnen groep voorkeuren wijzigen."; "Only group owners can change group preferences." = "Alleen groep eigenaren kunnen groep voorkeuren wijzigen.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Only group owners can enable files and media." = "Alleen groepseigenaren kunnen bestanden en media inschakelen."; "Only group owners can enable files and media." = "Alleen groep eigenaren kunnen bestanden en media inschakelen.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Only group owners can enable voice messages." = "Alleen groep eigenaren kunnen spraak berichten inschakelen."; "Only group owners can enable voice messages." = "Alleen groep eigenaren kunnen spraak berichten inschakelen.";
@@ -2308,12 +2507,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Only your contact can send voice messages." = "Alleen uw contact kan spraak berichten verzenden."; "Only your contact can send voice messages." = "Alleen uw contact kan spraak berichten verzenden.";
/* No comment provided by engineer. */
"Open" = "Open";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open chat" = "Gesprekken openen"; "Open chat" = "Gesprekken openen";
/* authentication reason */ /* authentication reason */
"Open chat console" = "Chat console openen"; "Open chat console" = "Chat console openen";
/* No comment provided by engineer. */
"Open group" = "Open groep";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open Settings" = "Open instellingen"; "Open Settings" = "Open instellingen";
@@ -2326,12 +2531,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Opening database…" = "Database openen…"; "Opening database…" = "Database openen…";
/* No comment provided by engineer. */
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Het openen van de link in de browser kan de privacy en beveiliging van de verbinding verminderen. Niet vertrouwde SimpleX links worden rood weergegeven.";
/* No comment provided by engineer. */
"or chat with the developers" = "of praat met de ontwikkelaars";
/* member role */ /* member role */
"owner" = "Eigenaar"; "owner" = "Eigenaar";
@@ -2356,6 +2555,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Paste" = "Plakken"; "Paste" = "Plakken";
/* No comment provided by engineer. */
"Paste desktop address" = "Desktopadres plakken";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Paste image" = "Afbeelding plakken"; "Paste image" = "Afbeelding plakken";
@@ -2452,6 +2654,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Profile image" = "profielfoto"; "Profile image" = "profielfoto";
/* No comment provided by engineer. */
"Profile name" = "Profielnaam";
/* No comment provided by engineer. */
"Profile name:" = "Profielnaam:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Profile password" = "Profiel wachtwoord"; "Profile password" = "Profiel wachtwoord";
@@ -2591,10 +2799,10 @@
"Remove" = "Verwijderen"; "Remove" = "Verwijderen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Remove member" = "Gebruiker verwijderen"; "Remove member" = "Lid verwijderen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Remove member?" = "Gebruiker verwijderen?"; "Remove member?" = "Lid verwijderen?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Remove passphrase from keychain?" = "Wachtwoord van de keychain verwijderen?"; "Remove passphrase from keychain?" = "Wachtwoord van de keychain verwijderen?";
@@ -2617,6 +2825,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Renegotiate encryption?" = "Heronderhandelen over versleuteling?"; "Renegotiate encryption?" = "Heronderhandelen over versleuteling?";
/* No comment provided by engineer. */
"Repeat connection request?" = "Verbindingsverzoek herhalen?";
/* No comment provided by engineer. */
"Repeat join request?" = "Deelnameverzoek herhalen?";
/* chat item action */ /* chat item action */
"Reply" = "Antwoord"; "Reply" = "Antwoord";
@@ -2681,7 +2895,7 @@
"Save and notify contact" = "Opslaan en Contact melden"; "Save and notify contact" = "Opslaan en Contact melden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Save and notify group members" = "Opslaan en Groep leden melden"; "Save and notify group members" = "Opslaan en groep leden melden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Save and update group profile" = "Groep profiel opslaan en bijwerken"; "Save and update group profile" = "Groep profiel opslaan en bijwerken";
@@ -2728,6 +2942,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Scan QR code" = "Scan QR-code"; "Scan QR code" = "Scan QR-code";
/* No comment provided by engineer. */
"Scan QR code from desktop" = "Scan QR-code vanaf uw desktop";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Scan security code from your contact's app." = "Scan de beveiligingscode van de app van uw contact."; "Scan security code from your contact's app." = "Scan de beveiligingscode van de app van uw contact.";
@@ -2782,9 +2999,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send delivery receipts to" = "Stuur ontvangstbewijzen naar"; "Send delivery receipts to" = "Stuur ontvangstbewijzen naar";
/* No comment provided by engineer. */
"send direct message" = "stuur een direct bericht";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send direct message" = "Direct bericht sturen"; "Send direct message" = "Direct bericht sturen";
/* No comment provided by engineer. */
"Send direct message to connect" = "Stuur een direct bericht om verbinding te maken";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send disappearing message" = "Stuur een verdwijnend bericht"; "Send disappearing message" = "Stuur een verdwijnend bericht";
@@ -2866,6 +3089,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Servers" = "Servers"; "Servers" = "Servers";
/* No comment provided by engineer. */
"Session code" = "Sessie code";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Set 1 day" = "Stel 1 dag in"; "Set 1 day" = "Stel 1 dag in";
@@ -3053,10 +3279,13 @@
"Tap to activate profile." = "Tik om profiel te activeren."; "Tap to activate profile." = "Tik om profiel te activeren.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Tap to join" = "Tik om mee te doen"; "Tap to Connect" = "Tik om verbinding te maken";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Tap to join incognito" = "Tik om incognito deel te nemen"; "Tap to join" = "Tik om lid te worden";
/* No comment provided by engineer. */
"Tap to join incognito" = "Tik om incognito lid te worden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Tap to start a new chat" = "Tik om een nieuw gesprek te starten"; "Tap to start a new chat" = "Tik om een nieuw gesprek te starten";
@@ -3115,9 +3344,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "De versleuteling werkt en de nieuwe versleutelingsovereenkomst is niet vereist. Dit kan leiden tot verbindingsfouten!"; "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "De versleuteling werkt en de nieuwe versleutelingsovereenkomst is niet vereist. Dit kan leiden tot verbindingsfouten!";
/* No comment provided by engineer. */
"The group is fully decentralized it is visible only to the members." = "De groep is volledig gedecentraliseerd het is alleen zichtbaar voor de leden.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The hash of the previous message is different." = "De hash van het vorige bericht is anders."; "The hash of the previous message is different." = "De hash van het vorige bericht is anders.";
@@ -3175,12 +3401,21 @@
/* notification title */ /* notification title */
"this contact" = "dit contact"; "this contact" = "dit contact";
/* No comment provided by engineer. */
"This device name" = "Deze apparaatnaam";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This group has over %lld members, delivery receipts are not sent." = "Deze groep heeft meer dan %lld -leden, ontvangstbevestigingen worden niet verzonden."; "This group has over %lld members, delivery receipts are not sent." = "Deze groep heeft meer dan %lld -leden, ontvangstbevestigingen worden niet verzonden.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This group no longer exists." = "Deze groep bestaat niet meer."; "This group no longer exists." = "Deze groep bestaat niet meer.";
/* No comment provided by engineer. */
"This is your own one-time link!" = "Dit is uw eigen eenmalige link!";
/* No comment provided by engineer. */
"This is your own SimpleX address!" = "Dit is uw eigen SimpleX adres!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This setting applies to messages in your current chat profile **%@**." = "Deze instelling is van toepassing op berichten in je huidige chat profiel **%@**."; "This setting applies to messages in your current chat profile **%@**." = "Deze instelling is van toepassing op berichten in je huidige chat profiel **%@**.";
@@ -3190,6 +3425,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To connect, your contact can scan QR code or use the link in the app." = "Om verbinding te maken, kan uw contact de QR-code scannen of de link in de app gebruiken."; "To connect, your contact can scan QR code or use the link in the app." = "Om verbinding te maken, kan uw contact de QR-code scannen of de link in de app gebruiken.";
/* No comment provided by engineer. */
"To hide unwanted messages." = "Om ongewenste berichten te verbergen.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To make a new connection" = "Om een nieuwe verbinding te maken"; "To make a new connection" = "Om een nieuwe verbinding te maken";
@@ -3238,6 +3476,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unable to record voice message" = "Kan spraakbericht niet opnemen"; "Unable to record voice message" = "Kan spraakbericht niet opnemen";
/* No comment provided by engineer. */
"Unblock" = "Deblokkeren";
/* No comment provided by engineer. */
"Unblock member" = "Lid deblokkeren";
/* No comment provided by engineer. */
"Unblock member?" = "Lid deblokkeren?";
/* item status description */ /* item status description */
"Unexpected error: %@" = "Onverwachte fout: %@"; "Unexpected error: %@" = "Onverwachte fout: %@";
@@ -3277,6 +3524,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Tenzij uw contact de verbinding heeft verwijderd of deze link al is gebruikt, kan het een bug zijn. Meld het alstublieft.\nOm verbinding te maken, vraagt u uw contact om een andere verbinding link te maken en te controleren of u een stabiele netwerkverbinding heeft."; "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Tenzij uw contact de verbinding heeft verwijderd of deze link al is gebruikt, kan het een bug zijn. Meld het alstublieft.\nOm verbinding te maken, vraagt u uw contact om een andere verbinding link te maken en te controleren of u een stabiele netwerkverbinding heeft.";
/* No comment provided by engineer. */
"Unlink" = "Ontkoppelen";
/* No comment provided by engineer. */
"Unlink desktop?" = "Desktop ontkoppelen?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unlock" = "Ontgrendelen"; "Unlock" = "Ontgrendelen";
@@ -3331,6 +3584,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use for new connections" = "Gebruik voor nieuwe verbindingen"; "Use for new connections" = "Gebruik voor nieuwe verbindingen";
/* No comment provided by engineer. */
"Use from desktop" = "Gebruik vanaf desktop";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use iOS call interface" = "De iOS-oproepinterface gebruiken"; "Use iOS call interface" = "De iOS-oproepinterface gebruiken";
@@ -3352,12 +3608,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Using SimpleX Chat servers." = "SimpleX Chat servers gebruiken."; "Using SimpleX Chat servers." = "SimpleX Chat servers gebruiken.";
/* No comment provided by engineer. */
"v%@" = "v%@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"v%@ (%@)" = "v%@ (%@)"; "v%@ (%@)" = "v%@ (%@)";
/* No comment provided by engineer. */
"Verify code with desktop" = "Code verifiëren met desktop";
/* No comment provided by engineer. */
"Verify connection" = "Controleer de verbinding";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Verify connection security" = "Controleer de verbindingsbeveiliging"; "Verify connection security" = "Controleer de verbindingsbeveiliging";
/* No comment provided by engineer. */
"Verify connections" = "Controleer verbindingen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Verify security code" = "Controleer de beveiligingscode"; "Verify security code" = "Controleer de beveiligingscode";
@@ -3376,6 +3644,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"via relay" = "via relais"; "via relay" = "via relais";
/* No comment provided by engineer. */
"Via secure quantum resistant protocol." = "Via een beveiligd kwantumbestendig protocol.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Video call" = "video oproep"; "Video call" = "video oproep";
@@ -3415,6 +3686,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"waiting for confirmation…" = "Wachten op bevestiging…"; "waiting for confirmation…" = "Wachten op bevestiging…";
/* No comment provided by engineer. */
"Waiting for desktop..." = "Wachten op desktop...";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Waiting for file" = "Wachten op bestand"; "Waiting for file" = "Wachten op bestand";
@@ -3484,6 +3758,27 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You are already connected to %@." = "U bent al verbonden met %@."; "You are already connected to %@." = "U bent al verbonden met %@.";
/* No comment provided by engineer. */
"You are already connecting to %@." = "U maakt al verbinding met %@.";
/* No comment provided by engineer. */
"You are already connecting via this one-time link!" = "Je maakt al verbinding via deze eenmalige link!";
/* No comment provided by engineer. */
"You are already in group %@." = "Je zit al in groep %@.";
/* No comment provided by engineer. */
"You are already joining the group %@." = "Je bent al lid van de groep %@.";
/* No comment provided by engineer. */
"You are already joining the group via this link!" = "Je wordt al lid van de groep via deze link!";
/* No comment provided by engineer. */
"You are already joining the group via this link." = "Je wordt al lid van de groep via deze link.";
/* No comment provided by engineer. */
"You are already joining the group!\nRepeat join request?" = "Je sluit je al aan bij de groep!\nDeelnameverzoek herhalen?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You are connected to the server used to receive messages from this contact." = "U bent verbonden met de server die wordt gebruikt om berichten van dit contact te ontvangen."; "You are connected to the server used to receive messages from this contact." = "U bent verbonden met de server die wordt gebruikt om berichten van dit contact te ontvangen.";
@@ -3559,6 +3854,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You could not be verified; please try again." = "U kon niet worden geverifieerd; probeer het opnieuw."; "You could not be verified; please try again." = "U kon niet worden geverifieerd; probeer het opnieuw.";
/* No comment provided by engineer. */
"You have already requested connection via this address!" = "U heeft al een verbinding aangevraagd via dit adres!";
/* No comment provided by engineer. */
"You have already requested connection!\nRepeat connection request?" = "Je hebt al verbinding aangevraagd!\nVerbindingsverzoek herhalen?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You have no chats" = "Je hebt geen gesprekken"; "You have no chats" = "Je hebt geen gesprekken";
@@ -3601,6 +3902,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be connected to group when the group host's device is online, please wait or check later!" = "Je wordt verbonden met de groep wanneer het apparaat van de groep host online is, even geduld a.u.b. of controleer het later!"; "You will be connected to group when the group host's device is online, please wait or check later!" = "Je wordt verbonden met de groep wanneer het apparaat van de groep host online is, even geduld a.u.b. of controleer het later!";
/* No comment provided by engineer. */
"You will be connected when group link host's device is online, please wait or check later!" = "U wordt verbonden wanneer het apparaat van de groep link host online is. Wacht even of controleer het later opnieuw!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be connected when your connection request is accepted, please wait or check later!" = "U wordt verbonden wanneer uw verbindingsverzoek wordt geaccepteerd, even geduld a.u.b. of controleer later!"; "You will be connected when your connection request is accepted, please wait or check later!" = "U wordt verbonden wanneer uw verbindingsverzoek wordt geaccepteerd, even geduld a.u.b. of controleer later!";
@@ -3611,7 +3915,7 @@
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "U moet zich authenticeren wanneer u de app na 30 seconden op de achtergrond start of hervat."; "You will be required to authenticate when you start or resume the app after 30 seconds in background." = "U moet zich authenticeren wanneer u de app na 30 seconden op de achtergrond start of hervat.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will join a group this link refers to and connect to its group members." = "U wordt lid van de groep waar deze link naar verwijst en maakt verbinding met de groepsleden."; "You will connect to all group members." = "Je maakt verbinding met alle leden.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "U ontvangt nog steeds oproepen en meldingen van gedempte profielen wanneer deze actief zijn."; "You will still receive calls and notifications from muted profiles when they are active." = "U ontvangt nog steeds oproepen en meldingen van gedempte profielen wanneer deze actief zijn.";
@@ -3643,9 +3947,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat database is not encrypted - set passphrase to encrypt it." = "Uw chat database is niet versleuteld, stel een wachtwoord in om deze te versleutelen."; "Your chat database is not encrypted - set passphrase to encrypt it." = "Uw chat database is niet versleuteld, stel een wachtwoord in om deze te versleutelen.";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "Uw chat profiel wordt verzonden naar de groepsleden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat profiles" = "Uw chat profielen"; "Your chat profiles" = "Uw chat profielen";
@@ -3679,6 +3980,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your privacy" = "Uw privacy"; "Your privacy" = "Uw privacy";
/* No comment provided by engineer. */
"Your profile" = "Jouw profiel";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your profile **%@** will be shared." = "Uw profiel **%@** wordt gedeeld."; "Your profile **%@** will be shared." = "Uw profiel **%@** wordt gedeeld.";
@@ -7,6 +7,9 @@
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX gebruikt Face-ID voor lokale authenticatie"; "NSFaceIDUsageDescription" = "SimpleX gebruikt Face-ID voor lokale authenticatie";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX maakt gebruik van lokale netwerktoegang om het gebruik van een gebruikerschatprofiel via de desktop-app op hetzelfde netwerk mogelijk te maken.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX heeft microfoon toegang nodig voor audio en video oproepen en om spraak berichten op te nemen."; "NSMicrophoneUsageDescription" = "SimpleX heeft microfoon toegang nodig voor audio en video oproepen en om spraak berichten op te nemen.";
+329 -25
View File
@@ -25,6 +25,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- more stable message delivery.\n- a bit better groups.\n- and more!" = "- bardziej stabilne dostarczanie wiadomości.\n- nieco lepsze grupy.\n- i więcej!"; "- more stable message delivery.\n- a bit better groups.\n- and more!" = "- bardziej stabilne dostarczanie wiadomości.\n- nieco lepsze grupy.\n- i więcej!";
/* No comment provided by engineer. */
"- optionally notify deleted contacts.\n- profile names with spaces.\n- and more!" = "- opcjonalnie powiadamiaj usunięte kontakty.\n- nazwy profili ze spacją.\n- i wiele więcej!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- wiadomości głosowe do 5 minut.\n- niestandardowy czas zniknięcia.\n- historia edycji."; "- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- wiadomości głosowe do 5 minut.\n- niestandardowy czas zniknięcia.\n- historia edycji.";
@@ -43,6 +46,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"(" = "("; "(" = "(";
/* No comment provided by engineer. */
"(new)" = "(nowy)";
/* No comment provided by engineer. */
"(this device v%@)" = "(to urządzenie v%@)";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
")" = ")"; ")" = ")";
@@ -118,12 +127,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@ %@" = "%@ %@"; "%@ %@" = "%@ %@";
/* No comment provided by engineer. */
"%@ and %@" = "%@ i %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@ and %@ connected" = "%@ i %@ połączeni"; "%@ and %@ connected" = "%@ i %@ połączeni";
/* copied message info, <sender> at <time> */ /* copied message info, <sender> at <time> */
"%@ at %@:" = "%1$@ o %2$@:"; "%@ at %@:" = "%1$@ o %2$@:";
/* No comment provided by engineer. */
"%@ connected" = "%@ połączony";
/* notification title */ /* notification title */
"%@ is connected!" = "%@ jest połączony!"; "%@ is connected!" = "%@ jest połączony!";
@@ -139,6 +154,9 @@
/* notification title */ /* notification title */
"%@ wants to connect!" = "%@ chce się połączyć!"; "%@ wants to connect!" = "%@ chce się połączyć!";
/* No comment provided by engineer. */
"%@, %@ and %lld members" = "%@, %@ i %lld członków";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@, %@ and %lld other members connected" = "%@, %@ i %lld innych członków połączeni"; "%@, %@ and %lld other members connected" = "%@, %@ i %lld innych członków połączeni";
@@ -178,9 +196,21 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld file(s) with total size of %@" = "%lld plik(i) o całkowitym rozmiarze %@"; "%lld file(s) with total size of %@" = "%lld plik(i) o całkowitym rozmiarze %@";
/* No comment provided by engineer. */
"%lld group events" = "%lld wydarzeń grupy";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld members" = "%lld członków"; "%lld members" = "%lld członków";
/* No comment provided by engineer. */
"%lld messages blocked" = "%lld wiadomości zablokowanych";
/* No comment provided by engineer. */
"%lld messages marked deleted" = "%lld wiadomości oznaczonych do usunięcia";
/* No comment provided by engineer. */
"%lld messages moderated by %@" = "%lld wiadomości zmoderowanych przez %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld minutes" = "%lld minut"; "%lld minutes" = "%lld minut";
@@ -229,6 +259,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"~strike~" = "\\~strajk~"; "~strike~" = "\\~strajk~";
/* time to disappear */
"0 sec" = "0 sek";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"0s" = "0s"; "0s" = "0s";
@@ -371,6 +404,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Wszystkie wiadomości zostaną usunięte - nie można tego cofnąć! Wiadomości zostaną usunięte TYLKO dla Ciebie."; "All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Wszystkie wiadomości zostaną usunięte - nie można tego cofnąć! Wiadomości zostaną usunięte TYLKO dla Ciebie.";
/* No comment provided by engineer. */
"All new messages from %@ will be hidden!" = "Wszystkie nowe wiadomości z %@ zostaną ukryte!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"All your contacts will remain connected." = "Wszystkie Twoje kontakty pozostaną połączone."; "All your contacts will remain connected." = "Wszystkie Twoje kontakty pozostaną połączone.";
@@ -434,6 +470,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Already connected?" = "Już połączony?"; "Already connected?" = "Już połączony?";
/* No comment provided by engineer. */
"Already connecting!" = "Już połączony!";
/* No comment provided by engineer. */
"Already joining the group!" = "Już dołączono do grupy!";
/* pref value */ /* pref value */
"always" = "zawsze"; "always" = "zawsze";
@@ -443,6 +485,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"An empty chat profile with the provided name is created, and the app opens as usual." = "Tworzony jest pusty profil czatu o podanej nazwie, a aplikacja otwiera się jak zwykle."; "An empty chat profile with the provided name is created, and the app opens as usual." = "Tworzony jest pusty profil czatu o podanej nazwie, a aplikacja otwiera się jak zwykle.";
/* No comment provided by engineer. */
"and %lld other events" = "i %lld innych wydarzeń";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Answer call" = "Odbierz połączenie"; "Answer call" = "Odbierz połączenie";
@@ -500,6 +545,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Authentication unavailable" = "Uwierzytelnianie niedostępne"; "Authentication unavailable" = "Uwierzytelnianie niedostępne";
/* member role */
"author" = "autor";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Auto-accept" = "Automatycznie akceptuj"; "Auto-accept" = "Automatycznie akceptuj";
@@ -512,6 +560,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Back" = "Wstecz"; "Back" = "Wstecz";
/* No comment provided by engineer. */
"Bad desktop address" = "Zły adres komputera";
/* integrity error chat item */ /* integrity error chat item */
"bad message hash" = "zły hash wiadomości"; "bad message hash" = "zły hash wiadomości";
@@ -524,9 +575,27 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Bad message ID" = "Zły identyfikator wiadomości"; "Bad message ID" = "Zły identyfikator wiadomości";
/* No comment provided by engineer. */
"Better groups" = "Lepsze grupy";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Better messages" = "Lepsze wiadomości"; "Better messages" = "Lepsze wiadomości";
/* No comment provided by engineer. */
"Block" = "Zablokuj";
/* No comment provided by engineer. */
"Block group members" = "Blokuj członków grupy";
/* No comment provided by engineer. */
"Block member" = "Zablokuj członka";
/* No comment provided by engineer. */
"Block member?" = "Zablokować członka?";
/* No comment provided by engineer. */
"blocked" = "zablokowany";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"bold" = "pogrubiona"; "bold" = "pogrubiona";
@@ -721,19 +790,28 @@
"Connect" = "Połącz"; "Connect" = "Połącz";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect directly" = "Połącz bezpośrednio"; "Connect automatically" = "Łącz automatycznie";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect incognito" = "Połącz incognito"; "Connect incognito" = "Połącz incognito";
/* No comment provided by engineer. */
"Connect to desktop" = "Połącz do komputera";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "połącz się z deweloperami SimpleX Chat."; "connect to SimpleX Chat developers." = "połącz się z deweloperami SimpleX Chat.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via contact link" = "Połącz przez link kontaktowy"; "Connect to yourself?" = "Połączyć się ze sobą?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via group link?" = "Połącz się przez link grupowy?"; "Connect to yourself?\nThis is your own one-time link!" = "Połącz się ze sobą?\nTo jest twój jednorazowy link!";
/* No comment provided by engineer. */
"Connect to yourself?\nThis is your own SimpleX address!" = "Połączyć się ze sobą?\nTo jest twój własny adres SimpleX!";
/* No comment provided by engineer. */
"Connect via contact address" = "Połącz przez adres kontaktowy";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via link" = "Połącz się przez link"; "Connect via link" = "Połącz się przez link";
@@ -744,9 +822,21 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via one-time link" = "Połącz przez jednorazowy link"; "Connect via one-time link" = "Połącz przez jednorazowy link";
/* No comment provided by engineer. */
"Connect with %@" = "Połącz z %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connected" = "połączony"; "connected" = "połączony";
/* No comment provided by engineer. */
"Connected desktop" = "Połączony komputer";
/* rcv group event chat item */
"connected directly" = "połącz bezpośrednio";
/* No comment provided by engineer. */
"Connected to desktop" = "Połączony do komputera";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connecting" = "łączenie"; "connecting" = "łączenie";
@@ -771,6 +861,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connecting server… (error: %@)" = "Łączenie z serwerem... (błąd: %@)"; "Connecting server… (error: %@)" = "Łączenie z serwerem... (błąd: %@)";
/* No comment provided by engineer. */
"Connecting to desktop" = "Łączenie z komputerem";
/* chat list item title */ /* chat list item title */
"connecting…" = "łączenie…"; "connecting…" = "łączenie…";
@@ -789,6 +882,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connection request sent!" = "Prośba o połączenie wysłana!"; "Connection request sent!" = "Prośba o połączenie wysłana!";
/* No comment provided by engineer. */
"Connection terminated" = "Połączenie zakończone";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connection timeout" = "Czas połączenia minął"; "Connection timeout" = "Czas połączenia minął";
@@ -801,9 +897,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Contact already exists" = "Kontakt już istnieje"; "Contact already exists" = "Kontakt już istnieje";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "Kontakt i wszystkie wiadomości zostaną usunięte - nie można tego cofnąć!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"contact has e2e encryption" = "kontakt posiada szyfrowanie e2e"; "contact has e2e encryption" = "kontakt posiada szyfrowanie e2e";
@@ -840,15 +933,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Core version: v%@" = "Wersja rdzenia: v%@"; "Core version: v%@" = "Wersja rdzenia: v%@";
/* No comment provided by engineer. */
"Correct name to %@?" = "Poprawić imię na %@?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create" = "Utwórz"; "Create" = "Utwórz";
/* No comment provided by engineer. */
"Create a group using a random profile." = "Utwórz grupę używając losowego profilu.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create an address to let people connect with you." = "Utwórz adres, aby ludzie mogli się z Tobą połączyć."; "Create an address to let people connect with you." = "Utwórz adres, aby ludzie mogli się z Tobą połączyć.";
/* server test step */ /* server test step */
"Create file" = "Utwórz plik"; "Create file" = "Utwórz plik";
/* No comment provided by engineer. */
"Create group" = "Utwórz grupę";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create group link" = "Utwórz link do grupy"; "Create group link" = "Utwórz link do grupy";
@@ -861,6 +963,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create one-time invitation link" = "Utwórz jednorazowy link do zaproszenia"; "Create one-time invitation link" = "Utwórz jednorazowy link do zaproszenia";
/* No comment provided by engineer. */
"Create profile" = "Utwórz profil";
/* server test step */ /* server test step */
"Create queue" = "Utwórz kolejkę"; "Create queue" = "Utwórz kolejkę";
@@ -975,6 +1080,9 @@
/* chat item action */ /* chat item action */
"Delete" = "Usuń"; "Delete" = "Usuń";
/* No comment provided by engineer. */
"Delete %lld messages?" = "Usunąć %lld wiadomości?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete address" = "Usuń adres"; "Delete address" = "Usuń adres";
@@ -987,6 +1095,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete all files" = "Usuń wszystkie pliki"; "Delete all files" = "Usuń wszystkie pliki";
/* No comment provided by engineer. */
"Delete and notify contact" = "Usuń i powiadom kontakt";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete archive" = "Usuń archiwum"; "Delete archive" = "Usuń archiwum";
@@ -1009,7 +1120,7 @@
"Delete Contact" = "Usuń Kontakt"; "Delete Contact" = "Usuń Kontakt";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete contact?" = "Usunąć kontakt?"; "Delete contact?\nThis cannot be undone!" = "Usunąć kontakt?\nTo nie może być cofnięte!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete database" = "Usuń bazę danych"; "Delete database" = "Usuń bazę danych";
@@ -1086,6 +1197,9 @@
/* copied message info */ /* copied message info */
"Deleted at: %@" = "Usunięto o: %@"; "Deleted at: %@" = "Usunięto o: %@";
/* rcv direct event chat item */
"deleted contact" = "usunięto kontakt";
/* rcv group event chat item */ /* rcv group event chat item */
"deleted group" = "usunięta grupa"; "deleted group" = "usunięta grupa";
@@ -1101,6 +1215,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Description" = "Opis"; "Description" = "Opis";
/* No comment provided by engineer. */
"Desktop address" = "Adres komputera";
/* No comment provided by engineer. */
"Desktop app version %@ is not compatible with this app." = "Wersja aplikacji komputerowej %@ nie jest kompatybilna z tą aplikacją.";
/* No comment provided by engineer. */
"Desktop devices" = "Urządzenia komputerowe";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Develop" = "Deweloperskie"; "Develop" = "Deweloperskie";
@@ -1164,14 +1287,14 @@
/* server test step */ /* server test step */
"Disconnect" = "Rozłącz"; "Disconnect" = "Rozłącz";
/* No comment provided by engineer. */
"Disconnect desktop?" = "Rozłączyć komputer?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Discover and join groups" = "Odkrywaj i dołączaj do grup"; "Discover and join groups" = "Odkrywaj i dołączaj do grup";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Display name" = "Wyświetlana nazwa"; "Discover via local network" = "Odkryj przez sieć lokalną";
/* No comment provided by engineer. */
"Display name:" = "Wyświetlana nazwa:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Do it later" = "Zrób to później"; "Do it later" = "Zrób to później";
@@ -1308,6 +1431,12 @@
/* chat item text */ /* chat item text */
"encryption re-negotiation allowed for %@" = "renegocjacja szyfrowania dozwolona dla %@"; "encryption re-negotiation allowed for %@" = "renegocjacja szyfrowania dozwolona dla %@";
/* message decrypt error item */
"Encryption re-negotiation error" = "Błąd renegocjacji szyfrowania";
/* No comment provided by engineer. */
"Encryption re-negotiation failed." = "Renegocjacja szyfrowania nie powiodła się.";
/* chat item text */ /* chat item text */
"encryption re-negotiation required" = "renegocjacja szyfrowania wymagana"; "encryption re-negotiation required" = "renegocjacja szyfrowania wymagana";
@@ -1323,6 +1452,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter correct passphrase." = "Wprowadź poprawne hasło."; "Enter correct passphrase." = "Wprowadź poprawne hasło.";
/* No comment provided by engineer. */
"Enter group name…" = "Wpisz nazwę grupy…";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter Passcode" = "Wprowadź Pin"; "Enter Passcode" = "Wprowadź Pin";
@@ -1335,12 +1467,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter server manually" = "Wprowadź serwer ręcznie"; "Enter server manually" = "Wprowadź serwer ręcznie";
/* No comment provided by engineer. */
"Enter this device name…" = "Podaj nazwę urządzenia…";
/* placeholder */ /* placeholder */
"Enter welcome message…" = "Wpisz wiadomość powitalną…"; "Enter welcome message…" = "Wpisz wiadomość powitalną…";
/* placeholder */ /* placeholder */
"Enter welcome message… (optional)" = "Wpisz wiadomość powitalną… (opcjonalne)"; "Enter welcome message… (optional)" = "Wpisz wiadomość powitalną… (opcjonalne)";
/* No comment provided by engineer. */
"Enter your name…" = "Wpisz swoją nazwę…";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"error" = "błąd"; "error" = "błąd";
@@ -1377,6 +1515,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating group link" = "Błąd tworzenia linku grupy"; "Error creating group link" = "Błąd tworzenia linku grupy";
/* No comment provided by engineer. */
"Error creating member contact" = "Błąd tworzenia kontaktu członka";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating profile!" = "Błąd tworzenia profilu!"; "Error creating profile!" = "Błąd tworzenia profilu!";
@@ -1455,6 +1596,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending email" = "Błąd wysyłania e-mail"; "Error sending email" = "Błąd wysyłania e-mail";
/* No comment provided by engineer. */
"Error sending member contact invitation" = "Błąd wysyłania zaproszenia kontaktu członka";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending message" = "Błąd wysyłania wiadomości"; "Error sending message" = "Błąd wysyłania wiadomości";
@@ -1506,6 +1650,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Exit without saving" = "Wyjdź bez zapisywania"; "Exit without saving" = "Wyjdź bez zapisywania";
/* chat item action */
"Expand" = "Rozszerz";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Export database" = "Eksportuj bazę danych"; "Export database" = "Eksportuj bazę danych";
@@ -1524,6 +1671,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Fast and no wait until the sender is online!" = "Szybko i bez czekania aż nadawca będzie online!"; "Fast and no wait until the sender is online!" = "Szybko i bez czekania aż nadawca będzie online!";
/* No comment provided by engineer. */
"Faster joining and more reliable messages." = "Szybsze dołączenie i bardziej niezawodne wiadomości.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Favorite" = "Ulubione"; "Favorite" = "Ulubione";
@@ -1581,6 +1731,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"For console" = "Dla konsoli"; "For console" = "Dla konsoli";
/* No comment provided by engineer. */
"Found desktop" = "Znaleziono komputer";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"French interface" = "Francuski interfejs"; "French interface" = "Francuski interfejs";
@@ -1593,6 +1746,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Full name:" = "Pełna nazwa:"; "Full name:" = "Pełna nazwa:";
/* No comment provided by engineer. */
"Fully decentralized visible only to members." = "W pełni zdecentralizowana widoczna tylko dla członków.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Fully re-implemented - work in background!" = "W pełni ponownie zaimplementowany - praca w tle!"; "Fully re-implemented - work in background!" = "W pełni ponownie zaimplementowany - praca w tle!";
@@ -1605,6 +1761,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Group" = "Grupa"; "Group" = "Grupa";
/* No comment provided by engineer. */
"Group already exists" = "Grupa już istnieje";
/* No comment provided by engineer. */
"Group already exists!" = "Grupa już istnieje!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"group deleted" = "grupa usunięta"; "group deleted" = "grupa usunięta";
@@ -1776,6 +1938,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incognito" = "Incognito"; "Incognito" = "Incognito";
/* No comment provided by engineer. */
"Incognito groups" = "Grupy incognito";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incognito mode" = "Tryb incognito"; "Incognito mode" = "Tryb incognito";
@@ -1803,6 +1968,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incompatible database version" = "Niekompatybilna wersja bazy danych"; "Incompatible database version" = "Niekompatybilna wersja bazy danych";
/* No comment provided by engineer. */
"Incompatible version" = "Niekompatybilna wersja";
/* PIN entry */ /* PIN entry */
"Incorrect passcode" = "Nieprawidłowy pin"; "Incorrect passcode" = "Nieprawidłowy pin";
@@ -1842,6 +2010,9 @@
/* invalid chat item */ /* invalid chat item */
"invalid data" = "nieprawidłowe dane"; "invalid data" = "nieprawidłowe dane";
/* No comment provided by engineer. */
"Invalid name!" = "Nieprawidłowa nazwa!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Invalid server address!" = "Nieprawidłowy adres serwera!"; "Invalid server address!" = "Nieprawidłowy adres serwera!";
@@ -1920,12 +2091,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Join group" = "Dołącz do grupy"; "Join group" = "Dołącz do grupy";
/* No comment provided by engineer. */
"Join group?" = "Dołączyć do grupy?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Join incognito" = "Dołącz incognito"; "Join incognito" = "Dołącz incognito";
/* No comment provided by engineer. */
"Join with current profile" = "Dołącz z obecnym profilem";
/* No comment provided by engineer. */
"Join your group?\nThis is your link for group %@!" = "Dołączyć do twojej grupy?\nTo jest twój link do grupy %@!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Joining group" = "Dołączanie do grupy"; "Joining group" = "Dołączanie do grupy";
/* No comment provided by engineer. */
"Keep the app open to use it from desktop" = "Zostaw aplikację otwartą i używaj ją z komputera";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Keep your connections" = "Zachowaj swoje połączenia"; "Keep your connections" = "Zachowaj swoje połączenia";
@@ -1962,6 +2145,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Limitations" = "Ograniczenia"; "Limitations" = "Ograniczenia";
/* No comment provided by engineer. */
"Link mobile and desktop apps! 🔗" = "Połącz mobile i komputerowe aplikacje! 🔗";
/* No comment provided by engineer. */
"Linked desktop options" = "Połączone opcje komputera";
/* No comment provided by engineer. */
"Linked desktops" = "Połączone komputery";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"LIVE" = "NA ŻYWO"; "LIVE" = "NA ŻYWO";
@@ -2067,6 +2259,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Messages & files" = "Wiadomości i pliki"; "Messages & files" = "Wiadomości i pliki";
/* No comment provided by engineer. */
"Messages from %@ will be shown!" = "Wiadomości od %@ zostaną pokazane!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Migrating database archive…" = "Migrowanie archiwum bazy danych…"; "Migrating database archive…" = "Migrowanie archiwum bazy danych…";
@@ -2214,6 +2409,9 @@
/* copied message info in history */ /* copied message info in history */
"no text" = "brak tekstu"; "no text" = "brak tekstu";
/* No comment provided by engineer. */
"Not compatible!" = "Nie kompatybilny!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Notifications" = "Powiadomienia"; "Notifications" = "Powiadomienia";
@@ -2227,7 +2425,8 @@
"observer" = "obserwator"; "observer" = "obserwator";
/* enabled status /* enabled status
group pref value */ group pref value
time to disappear */
"off" = "wyłączony"; "off" = "wyłączony";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@@ -2308,12 +2507,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Only your contact can send voice messages." = "Tylko Twój kontakt może wysyłać wiadomości głosowe."; "Only your contact can send voice messages." = "Tylko Twój kontakt może wysyłać wiadomości głosowe.";
/* No comment provided by engineer. */
"Open" = "Otwórz";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open chat" = "Otwórz czat"; "Open chat" = "Otwórz czat";
/* authentication reason */ /* authentication reason */
"Open chat console" = "Otwórz konsolę czatu"; "Open chat console" = "Otwórz konsolę czatu";
/* No comment provided by engineer. */
"Open group" = "Grupa otwarta";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open Settings" = "Otwórz Ustawienia"; "Open Settings" = "Otwórz Ustawienia";
@@ -2326,12 +2531,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Opening database…" = "Otwieranie bazy danych…"; "Opening database…" = "Otwieranie bazy danych…";
/* No comment provided by engineer. */
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Otwarcie łącza w przeglądarce może zmniejszyć prywatność i bezpieczeństwo połączenia. Niezaufane linki SimpleX będą miały kolor czerwony.";
/* No comment provided by engineer. */
"or chat with the developers" = "lub porozmawiać z deweloperami";
/* member role */ /* member role */
"owner" = "właściciel"; "owner" = "właściciel";
@@ -2356,6 +2555,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Paste" = "Wklej"; "Paste" = "Wklej";
/* No comment provided by engineer. */
"Paste desktop address" = "Wklej adres komputera";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Paste image" = "Wklej obraz"; "Paste image" = "Wklej obraz";
@@ -2452,6 +2654,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Profile image" = "Zdjęcie profilowe"; "Profile image" = "Zdjęcie profilowe";
/* No comment provided by engineer. */
"Profile name" = "Nazwa profilu";
/* No comment provided by engineer. */
"Profile name:" = "Nazwa profilu:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Profile password" = "Hasło profilu"; "Profile password" = "Hasło profilu";
@@ -2617,6 +2825,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Renegotiate encryption?" = "Renegocjować szyfrowanie?"; "Renegotiate encryption?" = "Renegocjować szyfrowanie?";
/* No comment provided by engineer. */
"Repeat connection request?" = "Powtórzyć prośbę połączenia?";
/* No comment provided by engineer. */
"Repeat join request?" = "Powtórzyć prośbę dołączenia?";
/* chat item action */ /* chat item action */
"Reply" = "Odpowiedz"; "Reply" = "Odpowiedz";
@@ -2728,6 +2942,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Scan QR code" = "Zeskanuj kod QR"; "Scan QR code" = "Zeskanuj kod QR";
/* No comment provided by engineer. */
"Scan QR code from desktop" = "Zeskanuj kod QR z komputera";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Scan security code from your contact's app." = "Zeskanuj kod bezpieczeństwa z aplikacji Twojego kontaktu."; "Scan security code from your contact's app." = "Zeskanuj kod bezpieczeństwa z aplikacji Twojego kontaktu.";
@@ -2782,9 +2999,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send delivery receipts to" = "Wyślij potwierdzenia dostawy do"; "Send delivery receipts to" = "Wyślij potwierdzenia dostawy do";
/* No comment provided by engineer. */
"send direct message" = "wyślij wiadomość bezpośrednią";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send direct message" = "Wyślij wiadomość bezpośrednią"; "Send direct message" = "Wyślij wiadomość bezpośrednią";
/* No comment provided by engineer. */
"Send direct message to connect" = "Wyślij wiadomość bezpośrednią aby połączyć";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send disappearing message" = "Wyślij znikającą wiadomość"; "Send disappearing message" = "Wyślij znikającą wiadomość";
@@ -2866,6 +3089,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Servers" = "Serwery"; "Servers" = "Serwery";
/* No comment provided by engineer. */
"Session code" = "Kod sesji";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Set 1 day" = "Ustaw 1 dzień"; "Set 1 day" = "Ustaw 1 dzień";
@@ -3052,6 +3278,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Tap to activate profile." = "Dotknij, aby aktywować profil."; "Tap to activate profile." = "Dotknij, aby aktywować profil.";
/* No comment provided by engineer. */
"Tap to Connect" = "Dotknij aby połączyć";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Tap to join" = "Dotknij, aby dołączyć"; "Tap to join" = "Dotknij, aby dołączyć";
@@ -3115,9 +3344,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Szyfrowanie działa, a nowe uzgodnienie szyfrowania nie jest wymagane. Może to spowodować błędy w połączeniu!"; "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Szyfrowanie działa, a nowe uzgodnienie szyfrowania nie jest wymagane. Może to spowodować błędy w połączeniu!";
/* No comment provided by engineer. */
"The group is fully decentralized it is visible only to the members." = "Grupa jest w pełni zdecentralizowana jest widoczna tylko dla członków.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The hash of the previous message is different." = "Hash poprzedniej wiadomości jest inny."; "The hash of the previous message is different." = "Hash poprzedniej wiadomości jest inny.";
@@ -3175,12 +3401,21 @@
/* notification title */ /* notification title */
"this contact" = "ten kontakt"; "this contact" = "ten kontakt";
/* No comment provided by engineer. */
"This device name" = "Nazwa tego urządzenia";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This group has over %lld members, delivery receipts are not sent." = "Ta grupa ma ponad %lld członków, potwierdzenia dostawy nie są wysyłane."; "This group has over %lld members, delivery receipts are not sent." = "Ta grupa ma ponad %lld członków, potwierdzenia dostawy nie są wysyłane.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This group no longer exists." = "Ta grupa już nie istnieje."; "This group no longer exists." = "Ta grupa już nie istnieje.";
/* No comment provided by engineer. */
"This is your own one-time link!" = "To jest twój jednorazowy link!";
/* No comment provided by engineer. */
"This is your own SimpleX address!" = "To jest twój własny adres SimpleX!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This setting applies to messages in your current chat profile **%@**." = "To ustawienie dotyczy wiadomości Twojego bieżącego profilu czatu **%@**."; "This setting applies to messages in your current chat profile **%@**." = "To ustawienie dotyczy wiadomości Twojego bieżącego profilu czatu **%@**.";
@@ -3190,6 +3425,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To connect, your contact can scan QR code or use the link in the app." = "Aby się połączyć, Twój kontakt może zeskanować kod QR lub skorzystać z linku w aplikacji."; "To connect, your contact can scan QR code or use the link in the app." = "Aby się połączyć, Twój kontakt może zeskanować kod QR lub skorzystać z linku w aplikacji.";
/* No comment provided by engineer. */
"To hide unwanted messages." = "Aby ukryć niechciane wiadomości.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To make a new connection" = "Aby nawiązać nowe połączenie"; "To make a new connection" = "Aby nawiązać nowe połączenie";
@@ -3238,6 +3476,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unable to record voice message" = "Nie można nagrać wiadomości głosowej"; "Unable to record voice message" = "Nie można nagrać wiadomości głosowej";
/* No comment provided by engineer. */
"Unblock" = "Odblokuj";
/* No comment provided by engineer. */
"Unblock member" = "Odblokuj członka";
/* No comment provided by engineer. */
"Unblock member?" = "Odblokować członka?";
/* item status description */ /* item status description */
"Unexpected error: %@" = "Nieoczekiwany błąd: %@"; "Unexpected error: %@" = "Nieoczekiwany błąd: %@";
@@ -3277,6 +3524,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "O ile Twój kontakt nie usunął połączenia lub ten link był już użyty, może to być błąd - zgłoś go.\nAby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połączenia i sprawdź, czy masz stabilne połączenie z siecią."; "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "O ile Twój kontakt nie usunął połączenia lub ten link był już użyty, może to być błąd - zgłoś go.\nAby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połączenia i sprawdź, czy masz stabilne połączenie z siecią.";
/* No comment provided by engineer. */
"Unlink" = "Odłącz";
/* No comment provided by engineer. */
"Unlink desktop?" = "Odłączyć komputer?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unlock" = "Odblokuj"; "Unlock" = "Odblokuj";
@@ -3331,6 +3584,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use for new connections" = "Użyj dla nowych połączeń"; "Use for new connections" = "Użyj dla nowych połączeń";
/* No comment provided by engineer. */
"Use from desktop" = "Użyj z komputera";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use iOS call interface" = "Użyj interfejsu połączeń iOS"; "Use iOS call interface" = "Użyj interfejsu połączeń iOS";
@@ -3352,12 +3608,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Using SimpleX Chat servers." = "Używanie serwerów SimpleX Chat."; "Using SimpleX Chat servers." = "Używanie serwerów SimpleX Chat.";
/* No comment provided by engineer. */
"v%@" = "v%@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"v%@ (%@)" = "v%@ (%@)"; "v%@ (%@)" = "v%@ (%@)";
/* No comment provided by engineer. */
"Verify code with desktop" = "Zweryfikuj kod z komputera";
/* No comment provided by engineer. */
"Verify connection" = "Zweryfikuj połączenie";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Verify connection security" = "Weryfikuj bezpieczeństwo połączenia"; "Verify connection security" = "Weryfikuj bezpieczeństwo połączenia";
/* No comment provided by engineer. */
"Verify connections" = "Zweryfikuj połączenia";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Verify security code" = "Weryfikuj kod bezpieczeństwa"; "Verify security code" = "Weryfikuj kod bezpieczeństwa";
@@ -3376,6 +3644,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"via relay" = "przez przekaźnik"; "via relay" = "przez przekaźnik";
/* No comment provided by engineer. */
"Via secure quantum resistant protocol." = "Dzięki bezpiecznemu protokołowi odpornego kwantowo.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Video call" = "Połączenie wideo"; "Video call" = "Połączenie wideo";
@@ -3415,6 +3686,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"waiting for confirmation…" = "oczekiwanie na potwierdzenie…"; "waiting for confirmation…" = "oczekiwanie na potwierdzenie…";
/* No comment provided by engineer. */
"Waiting for desktop..." = "Oczekiwanie na komputer...";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Waiting for file" = "Oczekiwanie na plik"; "Waiting for file" = "Oczekiwanie na plik";
@@ -3484,6 +3758,27 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You are already connected to %@." = "Jesteś już połączony z %@."; "You are already connected to %@." = "Jesteś już połączony z %@.";
/* No comment provided by engineer. */
"You are already connecting to %@." = "Już się łączysz z %@.";
/* No comment provided by engineer. */
"You are already connecting via this one-time link!" = "Już jesteś połączony z tym jednorazowym linkiem!";
/* No comment provided by engineer. */
"You are already in group %@." = "Już jesteś w grupie %@.";
/* No comment provided by engineer. */
"You are already joining the group %@." = "Już dołączasz do grupy %@.";
/* No comment provided by engineer. */
"You are already joining the group via this link!" = "Już dołączasz do grupy przez ten link!";
/* No comment provided by engineer. */
"You are already joining the group via this link." = "Już dołączasz do grupy przez ten link.";
/* No comment provided by engineer. */
"You are already joining the group!\nRepeat join request?" = "Już dołączasz do grupy!\nPowtórzyć prośbę dołączenia?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You are connected to the server used to receive messages from this contact." = "Jesteś połączony z serwerem używanym do odbierania wiadomości od tego kontaktu."; "You are connected to the server used to receive messages from this contact." = "Jesteś połączony z serwerem używanym do odbierania wiadomości od tego kontaktu.";
@@ -3559,6 +3854,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You could not be verified; please try again." = "Nie można zweryfikować użytkownika; proszę spróbować ponownie."; "You could not be verified; please try again." = "Nie można zweryfikować użytkownika; proszę spróbować ponownie.";
/* No comment provided by engineer. */
"You have already requested connection via this address!" = "Już prosiłeś o połączenie na ten adres!";
/* No comment provided by engineer. */
"You have already requested connection!\nRepeat connection request?" = "Już prosiłeś o połączenie!\nPowtórzyć prośbę połączenia?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You have no chats" = "Nie masz czatów"; "You have no chats" = "Nie masz czatów";
@@ -3601,6 +3902,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be connected to group when the group host's device is online, please wait or check later!" = "Zostaniesz połączony do grupy, gdy urządzenie gospodarza grupy będzie online, proszę czekać lub sprawdzić później!"; "You will be connected to group when the group host's device is online, please wait or check later!" = "Zostaniesz połączony do grupy, gdy urządzenie gospodarza grupy będzie online, proszę czekać lub sprawdzić później!";
/* No comment provided by engineer. */
"You will be connected when group link host's device is online, please wait or check later!" = "Zostaniesz połączony, gdy urządzenie hosta grupy będzie online, proszę czekać lub sprawdzić później!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be connected when your connection request is accepted, please wait or check later!" = "Zostaniesz połączony, gdy Twoje żądanie połączenia zostanie zaakceptowane, proszę czekać lub sprawdzić później!"; "You will be connected when your connection request is accepted, please wait or check later!" = "Zostaniesz połączony, gdy Twoje żądanie połączenia zostanie zaakceptowane, proszę czekać lub sprawdzić później!";
@@ -3611,7 +3915,7 @@
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Uwierzytelnienie będzie wymagane przy uruchamianiu lub wznawianiu aplikacji po 30 sekundach w tle."; "You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Uwierzytelnienie będzie wymagane przy uruchamianiu lub wznawianiu aplikacji po 30 sekundach w tle.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will join a group this link refers to and connect to its group members." = "Dołączysz do grupy, do której odnosi się ten link i połączysz się z jej członkami."; "You will connect to all group members." = "Zostaniesz połączony ze wszystkimi członkami grupy.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "Nadal będziesz otrzymywać połączenia i powiadomienia z wyciszonych profili, gdy są one aktywne."; "You will still receive calls and notifications from muted profiles when they are active." = "Nadal będziesz otrzymywać połączenia i powiadomienia z wyciszonych profili, gdy są one aktywne.";
@@ -3643,9 +3947,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat database is not encrypted - set passphrase to encrypt it." = "Baza danych czatu nie jest szyfrowana - ustaw hasło, aby ją zaszyfrować."; "Your chat database is not encrypted - set passphrase to encrypt it." = "Baza danych czatu nie jest szyfrowana - ustaw hasło, aby ją zaszyfrować.";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "Twój profil czatu zostanie wysłany do członków grupy";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat profiles" = "Twoje profile czatu"; "Your chat profiles" = "Twoje profile czatu";
@@ -3679,6 +3980,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your privacy" = "Twoja prywatność"; "Your privacy" = "Twoja prywatność";
/* No comment provided by engineer. */
"Your profile" = "Twój profil";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your profile **%@** will be shared." = "Twój profil **%@** zostanie udostępniony."; "Your profile **%@** will be shared." = "Twój profil **%@** zostanie udostępniony.";
@@ -7,6 +7,9 @@
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX używa Face ID do lokalnego uwierzytelniania"; "NSFaceIDUsageDescription" = "SimpleX używa Face ID do lokalnego uwierzytelniania";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX używa sieci lokalnej aby pozwolić na dostęp profilom czatu użytkownika przez aplikację komputerową na tej samej sieci.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX potrzebuje dostępu do mikrofonu, w celu połączeń audio i wideo oraz nagrywania wiadomości głosowych."; "NSMicrophoneUsageDescription" = "SimpleX potrzebuje dostępu do mikrofonu, w celu połączeń audio i wideo oraz nagrywania wiadomości głosowych.";
+329 -25
View File
@@ -25,6 +25,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- more stable message delivery.\n- a bit better groups.\n- and more!" = "- более стабильная доставка сообщений.\n- немного улучшенные группы.\n- и прочее!"; "- more stable message delivery.\n- a bit better groups.\n- and more!" = "- более стабильная доставка сообщений.\n- немного улучшенные группы.\n- и прочее!";
/* No comment provided by engineer. */
"- optionally notify deleted contacts.\n- profile names with spaces.\n- and more!" = "- опционально уведомляйте удалённые контакты.\n- имена профилей с пробелами.\n- и прочее!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- голосовые сообщения до 5 минут.\n- настройка времени исчезающих сообщений.\n- история редактирования."; "- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- голосовые сообщения до 5 минут.\n- настройка времени исчезающих сообщений.\n- история редактирования.";
@@ -43,6 +46,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"(" = "("; "(" = "(";
/* No comment provided by engineer. */
"(new)" = "(новое)";
/* No comment provided by engineer. */
"(this device v%@)" = "(это устройство v%@)";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
")" = ")"; ")" = ")";
@@ -118,12 +127,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@ %@" = "%@ %@"; "%@ %@" = "%@ %@";
/* No comment provided by engineer. */
"%@ and %@" = "%@ и %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@ and %@ connected" = "%@ и %@ соединены"; "%@ and %@ connected" = "%@ и %@ соединены";
/* copied message info, <sender> at <time> */ /* copied message info, <sender> at <time> */
"%@ at %@:" = "%1$@ в %2$@:"; "%@ at %@:" = "%1$@ в %2$@:";
/* No comment provided by engineer. */
"%@ connected" = "%@ соединен(а)";
/* notification title */ /* notification title */
"%@ is connected!" = "Установлено соединение с %@!"; "%@ is connected!" = "Установлено соединение с %@!";
@@ -139,6 +154,9 @@
/* notification title */ /* notification title */
"%@ wants to connect!" = "%@ хочет соединиться!"; "%@ wants to connect!" = "%@ хочет соединиться!";
/* No comment provided by engineer. */
"%@, %@ and %lld members" = "%@, %@ и %lld членов группы";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%@, %@ and %lld other members connected" = "%@, %@ и %lld других членов соединены"; "%@, %@ and %lld other members connected" = "%@, %@ и %lld других членов соединены";
@@ -178,9 +196,21 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld file(s) with total size of %@" = "%lld файл(ов) общим размером %@"; "%lld file(s) with total size of %@" = "%lld файл(ов) общим размером %@";
/* No comment provided by engineer. */
"%lld group events" = "%lld событий";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld members" = "Членов группы: %lld"; "%lld members" = "Членов группы: %lld";
/* No comment provided by engineer. */
"%lld messages blocked" = "%lld сообщений заблокировано";
/* No comment provided by engineer. */
"%lld messages marked deleted" = "%lld сообщений помечено удалёнными";
/* No comment provided by engineer. */
"%lld messages moderated by %@" = "%lld сообщений модерировано членом %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"%lld minutes" = "%lld минуты"; "%lld minutes" = "%lld минуты";
@@ -229,6 +259,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"~strike~" = "\\~зачеркнуть~"; "~strike~" = "\\~зачеркнуть~";
/* time to disappear */
"0 sec" = "0 сек";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"0s" = "0с"; "0s" = "0с";
@@ -371,6 +404,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Все сообщения будут удалены - это действие нельзя отменить! Сообщения будут удалены только для Вас."; "All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Все сообщения будут удалены - это действие нельзя отменить! Сообщения будут удалены только для Вас.";
/* No comment provided by engineer. */
"All new messages from %@ will be hidden!" = "Все новые сообщения от %@ будут скрыты!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"All your contacts will remain connected." = "Все контакты, которые соединились через этот адрес, сохранятся."; "All your contacts will remain connected." = "Все контакты, которые соединились через этот адрес, сохранятся.";
@@ -434,6 +470,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Already connected?" = "Соединение уже установлено?"; "Already connected?" = "Соединение уже установлено?";
/* No comment provided by engineer. */
"Already connecting!" = "Уже соединяется!";
/* No comment provided by engineer. */
"Already joining the group!" = "Вступление в группу уже начато!";
/* pref value */ /* pref value */
"always" = "всегда"; "always" = "всегда";
@@ -443,6 +485,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"An empty chat profile with the provided name is created, and the app opens as usual." = "Будет создан пустой профиль чата с указанным именем, и приложение откроется в обычном режиме."; "An empty chat profile with the provided name is created, and the app opens as usual." = "Будет создан пустой профиль чата с указанным именем, и приложение откроется в обычном режиме.";
/* No comment provided by engineer. */
"and %lld other events" = "и %lld других событий";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Answer call" = "Принять звонок"; "Answer call" = "Принять звонок";
@@ -500,6 +545,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Authentication unavailable" = "Аутентификация недоступна"; "Authentication unavailable" = "Аутентификация недоступна";
/* member role */
"author" = "автор";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Auto-accept" = "Автоприем"; "Auto-accept" = "Автоприем";
@@ -512,6 +560,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Back" = "Назад"; "Back" = "Назад";
/* No comment provided by engineer. */
"Bad desktop address" = "Неверный адрес компьютера";
/* integrity error chat item */ /* integrity error chat item */
"bad message hash" = "ошибка хэш сообщения"; "bad message hash" = "ошибка хэш сообщения";
@@ -524,9 +575,27 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Bad message ID" = "Ошибка ID сообщения"; "Bad message ID" = "Ошибка ID сообщения";
/* No comment provided by engineer. */
"Better groups" = "Улучшенные группы";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Better messages" = "Улучшенные сообщения"; "Better messages" = "Улучшенные сообщения";
/* No comment provided by engineer. */
"Block" = "Заблокировать";
/* No comment provided by engineer. */
"Block group members" = "Блокируйте членов группы";
/* No comment provided by engineer. */
"Block member" = "Заблокировать члена группы";
/* No comment provided by engineer. */
"Block member?" = "Заблокировать члена группы?";
/* No comment provided by engineer. */
"blocked" = "заблокировано";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"bold" = "жирный"; "bold" = "жирный";
@@ -721,19 +790,28 @@
"Connect" = "Соединиться"; "Connect" = "Соединиться";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect directly" = "Соединиться напрямую"; "Connect automatically" = "Соединяться автоматически";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect incognito" = "Соединиться Инкогнито"; "Connect incognito" = "Соединиться Инкогнито";
/* No comment provided by engineer. */
"Connect to desktop" = "Подключиться к компьютеру";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "соединитесь с разработчиками."; "connect to SimpleX Chat developers." = "соединитесь с разработчиками.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via contact link" = "Соединиться через ссылку-контакт"; "Connect to yourself?" = "Соединиться с самим собой?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via group link?" = "Соединиться через ссылку группы?"; "Connect to yourself?\nThis is your own one-time link!" = "Соединиться с самим собой?\nЭто ваша собственная одноразовая ссылка!";
/* No comment provided by engineer. */
"Connect to yourself?\nThis is your own SimpleX address!" = "Соединиться с самим собой?\nЭто ваш собственный адрес SimpleX!";
/* No comment provided by engineer. */
"Connect via contact address" = "Соединиться через адрес";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via link" = "Соединиться через ссылку"; "Connect via link" = "Соединиться через ссылку";
@@ -744,9 +822,21 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via one-time link" = "Соединиться через одноразовую ссылку"; "Connect via one-time link" = "Соединиться через одноразовую ссылку";
/* No comment provided by engineer. */
"Connect with %@" = "Соединиться с %@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connected" = "соединение установлено"; "connected" = "соединение установлено";
/* No comment provided by engineer. */
"Connected desktop" = "Подключенный компьютер";
/* rcv group event chat item */
"connected directly" = "соединен(а) напрямую";
/* No comment provided by engineer. */
"Connected to desktop" = "Компьютер подключен";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connecting" = "соединяется"; "connecting" = "соединяется";
@@ -771,6 +861,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connecting server… (error: %@)" = "Устанавливается соединение с сервером… (ошибка: %@)"; "Connecting server… (error: %@)" = "Устанавливается соединение с сервером… (ошибка: %@)";
/* No comment provided by engineer. */
"Connecting to desktop" = "Подключение к компьютеру";
/* chat list item title */ /* chat list item title */
"connecting…" = "соединяется…"; "connecting…" = "соединяется…";
@@ -789,6 +882,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connection request sent!" = "Запрос на соединение отправлен!"; "Connection request sent!" = "Запрос на соединение отправлен!";
/* No comment provided by engineer. */
"Connection terminated" = "Подключение прервано";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connection timeout" = "Превышено время соединения"; "Connection timeout" = "Превышено время соединения";
@@ -801,9 +897,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Contact already exists" = "Существующий контакт"; "Contact already exists" = "Существующий контакт";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "Контакт и все сообщения будут удалены - это действие нельзя отменить!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"contact has e2e encryption" = "у контакта есть e2e шифрование"; "contact has e2e encryption" = "у контакта есть e2e шифрование";
@@ -840,15 +933,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Core version: v%@" = "Версия ядра: v%@"; "Core version: v%@" = "Версия ядра: v%@";
/* No comment provided by engineer. */
"Correct name to %@?" = "Исправить имя на %@?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create" = "Создать"; "Create" = "Создать";
/* No comment provided by engineer. */
"Create a group using a random profile." = "Создайте группу, используя случайный профиль.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create an address to let people connect with you." = "Создайте адрес, чтобы можно было соединиться с вами."; "Create an address to let people connect with you." = "Создайте адрес, чтобы можно было соединиться с вами.";
/* server test step */ /* server test step */
"Create file" = "Создание файла"; "Create file" = "Создание файла";
/* No comment provided by engineer. */
"Create group" = "Создать группу";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create group link" = "Создать ссылку группы"; "Create group link" = "Создать ссылку группы";
@@ -861,6 +963,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create one-time invitation link" = "Создать ссылку-приглашение"; "Create one-time invitation link" = "Создать ссылку-приглашение";
/* No comment provided by engineer. */
"Create profile" = "Создать профиль";
/* server test step */ /* server test step */
"Create queue" = "Создание очереди"; "Create queue" = "Создание очереди";
@@ -975,6 +1080,9 @@
/* chat item action */ /* chat item action */
"Delete" = "Удалить"; "Delete" = "Удалить";
/* No comment provided by engineer. */
"Delete %lld messages?" = "Удалить %lld сообщений?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete address" = "Удалить адрес"; "Delete address" = "Удалить адрес";
@@ -987,6 +1095,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete all files" = "Удалить все файлы"; "Delete all files" = "Удалить все файлы";
/* No comment provided by engineer. */
"Delete and notify contact" = "Удалить и уведомить контакт";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete archive" = "Удалить архив"; "Delete archive" = "Удалить архив";
@@ -1009,7 +1120,7 @@
"Delete Contact" = "Удалить контакт"; "Delete Contact" = "Удалить контакт";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete contact?" = "Удалить контакт?"; "Delete contact?\nThis cannot be undone!" = "Удалить контакт?\nЭто не может быть отменено!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete database" = "Удалить данные чата"; "Delete database" = "Удалить данные чата";
@@ -1086,6 +1197,9 @@
/* copied message info */ /* copied message info */
"Deleted at: %@" = "Удалено: %@"; "Deleted at: %@" = "Удалено: %@";
/* rcv direct event chat item */
"deleted contact" = "удалил(а) контакт";
/* rcv group event chat item */ /* rcv group event chat item */
"deleted group" = "удалил(а) группу"; "deleted group" = "удалил(а) группу";
@@ -1101,6 +1215,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Description" = "Описание"; "Description" = "Описание";
/* No comment provided by engineer. */
"Desktop address" = "Адрес компьютера";
/* No comment provided by engineer. */
"Desktop app version %@ is not compatible with this app." = "Версия настольного приложения %@ несовместима с этим приложением.";
/* No comment provided by engineer. */
"Desktop devices" = "Компьютеры";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Develop" = "Для разработчиков"; "Develop" = "Для разработчиков";
@@ -1164,14 +1287,14 @@
/* server test step */ /* server test step */
"Disconnect" = "Разрыв соединения"; "Disconnect" = "Разрыв соединения";
/* No comment provided by engineer. */
"Disconnect desktop?" = "Отключить компьютер?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Discover and join groups" = "Найдите и вступите в группы"; "Discover and join groups" = "Найдите и вступите в группы";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Display name" = "Имя профиля"; "Discover via local network" = "Обнаружение по локальной сети";
/* No comment provided by engineer. */
"Display name:" = "Имя профиля:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Do it later" = "Отложить"; "Do it later" = "Отложить";
@@ -1308,6 +1431,12 @@
/* chat item text */ /* chat item text */
"encryption re-negotiation allowed for %@" = "новое соглашение о шифровании разрешено для %@"; "encryption re-negotiation allowed for %@" = "новое соглашение о шифровании разрешено для %@";
/* message decrypt error item */
"Encryption re-negotiation error" = "Ошибка нового соглашения о шифровании";
/* No comment provided by engineer. */
"Encryption re-negotiation failed." = "Ошибка нового соглашения о шифровании.";
/* chat item text */ /* chat item text */
"encryption re-negotiation required" = "требуется новое соглашение о шифровании"; "encryption re-negotiation required" = "требуется новое соглашение о шифровании";
@@ -1323,6 +1452,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter correct passphrase." = "Введите правильный пароль."; "Enter correct passphrase." = "Введите правильный пароль.";
/* No comment provided by engineer. */
"Enter group name…" = "Введите имя группы…";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter Passcode" = "Введите Код"; "Enter Passcode" = "Введите Код";
@@ -1335,12 +1467,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Enter server manually" = "Ввести сервер вручную"; "Enter server manually" = "Ввести сервер вручную";
/* No comment provided by engineer. */
"Enter this device name…" = "Введите имя этого устройства…";
/* placeholder */ /* placeholder */
"Enter welcome message…" = "Введите приветственное сообщение…"; "Enter welcome message…" = "Введите приветственное сообщение…";
/* placeholder */ /* placeholder */
"Enter welcome message… (optional)" = "Введите приветственное сообщение... (опционально)"; "Enter welcome message… (optional)" = "Введите приветственное сообщение... (опционально)";
/* No comment provided by engineer. */
"Enter your name…" = "Введите ваше имя…";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"error" = "ошибка"; "error" = "ошибка";
@@ -1377,6 +1515,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating group link" = "Ошибка при создании ссылки группы"; "Error creating group link" = "Ошибка при создании ссылки группы";
/* No comment provided by engineer. */
"Error creating member contact" = "Ошибка создания контакта с членом группы";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating profile!" = "Ошибка создания профиля!"; "Error creating profile!" = "Ошибка создания профиля!";
@@ -1455,6 +1596,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending email" = "Ошибка отправки email"; "Error sending email" = "Ошибка отправки email";
/* No comment provided by engineer. */
"Error sending member contact invitation" = "Ошибка отправки приглашения члену группы";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending message" = "Ошибка при отправке сообщения"; "Error sending message" = "Ошибка при отправке сообщения";
@@ -1506,6 +1650,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Exit without saving" = "Выйти без сохранения"; "Exit without saving" = "Выйти без сохранения";
/* chat item action */
"Expand" = "Раскрыть";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Export database" = "Экспорт архива чата"; "Export database" = "Экспорт архива чата";
@@ -1524,6 +1671,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Fast and no wait until the sender is online!" = "Быстрые и не нужно ждать, когда отправитель онлайн!"; "Fast and no wait until the sender is online!" = "Быстрые и не нужно ждать, когда отправитель онлайн!";
/* No comment provided by engineer. */
"Faster joining and more reliable messages." = "Быстрое вступление и надежная доставка сообщений.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Favorite" = "Избранный"; "Favorite" = "Избранный";
@@ -1581,6 +1731,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"For console" = "Для консоли"; "For console" = "Для консоли";
/* No comment provided by engineer. */
"Found desktop" = "Компьютер найден";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"French interface" = "Французский интерфейс"; "French interface" = "Французский интерфейс";
@@ -1593,6 +1746,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Full name:" = "Полное имя:"; "Full name:" = "Полное имя:";
/* No comment provided by engineer. */
"Fully decentralized visible only to members." = "Группа полностью децентрализована – она видна только членам.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Fully re-implemented - work in background!" = "Полностью обновлены - работают в фоне!"; "Fully re-implemented - work in background!" = "Полностью обновлены - работают в фоне!";
@@ -1605,6 +1761,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Group" = "Группа"; "Group" = "Группа";
/* No comment provided by engineer. */
"Group already exists" = "Группа уже существует";
/* No comment provided by engineer. */
"Group already exists!" = "Группа уже существует!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"group deleted" = "группа удалена"; "group deleted" = "группа удалена";
@@ -1776,6 +1938,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incognito" = "Инкогнито"; "Incognito" = "Инкогнито";
/* No comment provided by engineer. */
"Incognito groups" = "Инкогнито группы";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incognito mode" = "Режим Инкогнито"; "Incognito mode" = "Режим Инкогнито";
@@ -1803,6 +1968,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Incompatible database version" = "Несовместимая версия базы данных"; "Incompatible database version" = "Несовместимая версия базы данных";
/* No comment provided by engineer. */
"Incompatible version" = "Несовместимая версия";
/* PIN entry */ /* PIN entry */
"Incorrect passcode" = "Неправильный код"; "Incorrect passcode" = "Неправильный код";
@@ -1842,6 +2010,9 @@
/* invalid chat item */ /* invalid chat item */
"invalid data" = "ошибка данных"; "invalid data" = "ошибка данных";
/* No comment provided by engineer. */
"Invalid name!" = "Неверное имя!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Invalid server address!" = "Ошибка в адресе сервера!"; "Invalid server address!" = "Ошибка в адресе сервера!";
@@ -1920,12 +2091,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Join group" = "Вступить в группу"; "Join group" = "Вступить в группу";
/* No comment provided by engineer. */
"Join group?" = "Вступить в группу?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Join incognito" = "Вступить инкогнито"; "Join incognito" = "Вступить инкогнито";
/* No comment provided by engineer. */
"Join with current profile" = "Вступить с активным профилем";
/* No comment provided by engineer. */
"Join your group?\nThis is your link for group %@!" = "Вступить в вашу группу?\nЭто ваша ссылка на группу %@!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Joining group" = "Вступление в группу"; "Joining group" = "Вступление в группу";
/* No comment provided by engineer. */
"Keep the app open to use it from desktop" = "Оставьте приложение открытым, чтобы использовать его с компьютера";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Keep your connections" = "Сохраните Ваши соединения"; "Keep your connections" = "Сохраните Ваши соединения";
@@ -1962,6 +2145,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Limitations" = "Ограничения"; "Limitations" = "Ограничения";
/* No comment provided by engineer. */
"Link mobile and desktop apps! 🔗" = "Свяжите мобильное и настольное приложения! 🔗";
/* No comment provided by engineer. */
"Linked desktop options" = "Опции связанных компьютеров";
/* No comment provided by engineer. */
"Linked desktops" = "Связанные компьютеры";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"LIVE" = "LIVE"; "LIVE" = "LIVE";
@@ -2067,6 +2259,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Messages & files" = "Сообщения"; "Messages & files" = "Сообщения";
/* No comment provided by engineer. */
"Messages from %@ will be shown!" = "Сообщения от %@ будут показаны!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Migrating database archive…" = "Данные чата перемещаются…"; "Migrating database archive…" = "Данные чата перемещаются…";
@@ -2214,6 +2409,9 @@
/* copied message info in history */ /* copied message info in history */
"no text" = "нет текста"; "no text" = "нет текста";
/* No comment provided by engineer. */
"Not compatible!" = "Несовместимая версия!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Notifications" = "Уведомления"; "Notifications" = "Уведомления";
@@ -2227,7 +2425,8 @@
"observer" = "читатель"; "observer" = "читатель";
/* enabled status /* enabled status
group pref value */ group pref value
time to disappear */
"off" = "нет"; "off" = "нет";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@@ -2308,12 +2507,18 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Only your contact can send voice messages." = "Только Ваш контакт может отправлять голосовые сообщения."; "Only your contact can send voice messages." = "Только Ваш контакт может отправлять голосовые сообщения.";
/* No comment provided by engineer. */
"Open" = "Открыть";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open chat" = "Открыть чат"; "Open chat" = "Открыть чат";
/* authentication reason */ /* authentication reason */
"Open chat console" = "Открыть консоль"; "Open chat console" = "Открыть консоль";
/* No comment provided by engineer. */
"Open group" = "Открыть группу";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open Settings" = "Открыть Настройки"; "Open Settings" = "Открыть Настройки";
@@ -2326,12 +2531,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Opening database…" = "Открытие базы данных…"; "Opening database…" = "Открытие базы данных…";
/* No comment provided by engineer. */
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Использование ссылки в браузере может уменьшить конфиденциальность и безопасность соединения. Ссылки на неизвестные сайты будут красными.";
/* No comment provided by engineer. */
"or chat with the developers" = "или соединитесь с разработчиками";
/* member role */ /* member role */
"owner" = "владелец"; "owner" = "владелец";
@@ -2356,6 +2555,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Paste" = "Вставить"; "Paste" = "Вставить";
/* No comment provided by engineer. */
"Paste desktop address" = "Вставить адрес компьютера";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Paste image" = "Вставить изображение"; "Paste image" = "Вставить изображение";
@@ -2452,6 +2654,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Profile image" = "Аватар"; "Profile image" = "Аватар";
/* No comment provided by engineer. */
"Profile name" = "Имя профиля";
/* No comment provided by engineer. */
"Profile name:" = "Имя профиля:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Profile password" = "Пароль профиля"; "Profile password" = "Пароль профиля";
@@ -2617,6 +2825,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Renegotiate encryption?" = "Пересогласовать шифрование?"; "Renegotiate encryption?" = "Пересогласовать шифрование?";
/* No comment provided by engineer. */
"Repeat connection request?" = "Повторить запрос на соединение?";
/* No comment provided by engineer. */
"Repeat join request?" = "Повторить запрос на вступление?";
/* chat item action */ /* chat item action */
"Reply" = "Ответить"; "Reply" = "Ответить";
@@ -2728,6 +2942,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Scan QR code" = "Сканировать QR код"; "Scan QR code" = "Сканировать QR код";
/* No comment provided by engineer. */
"Scan QR code from desktop" = "Сканировать QR код с компьютера";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Scan security code from your contact's app." = "Сканируйте код безопасности из приложения контакта."; "Scan security code from your contact's app." = "Сканируйте код безопасности из приложения контакта.";
@@ -2782,9 +2999,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send delivery receipts to" = "Отправка отчётов о доставке"; "Send delivery receipts to" = "Отправка отчётов о доставке";
/* No comment provided by engineer. */
"send direct message" = "отправьте сообщение";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send direct message" = "Отправить сообщение"; "Send direct message" = "Отправить сообщение";
/* No comment provided by engineer. */
"Send direct message to connect" = "Отправьте сообщение чтобы соединиться";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send disappearing message" = "Отправить исчезающее сообщение"; "Send disappearing message" = "Отправить исчезающее сообщение";
@@ -2866,6 +3089,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Servers" = "Серверы"; "Servers" = "Серверы";
/* No comment provided by engineer. */
"Session code" = "Код сессии";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Set 1 day" = "Установить 1 день"; "Set 1 day" = "Установить 1 день";
@@ -3052,6 +3278,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Tap to activate profile." = "Нажмите, чтобы сделать профиль активным."; "Tap to activate profile." = "Нажмите, чтобы сделать профиль активным.";
/* No comment provided by engineer. */
"Tap to Connect" = "Нажмите чтобы соединиться";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Tap to join" = "Нажмите, чтобы вступить"; "Tap to join" = "Нажмите, чтобы вступить";
@@ -3115,9 +3344,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Шифрование работает, и новое соглашение не требуется. Это может привести к ошибкам соединения!"; "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Шифрование работает, и новое соглашение не требуется. Это может привести к ошибкам соединения!";
/* No comment provided by engineer. */
"The group is fully decentralized it is visible only to the members." = "Группа полностью децентрализована — она видна только членам.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The hash of the previous message is different." = "Хэш предыдущего сообщения отличается."; "The hash of the previous message is different." = "Хэш предыдущего сообщения отличается.";
@@ -3175,12 +3401,21 @@
/* notification title */ /* notification title */
"this contact" = "этот контакт"; "this contact" = "этот контакт";
/* No comment provided by engineer. */
"This device name" = "Имя этого устройства";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This group has over %lld members, delivery receipts are not sent." = "В группе более %lld членов, отчёты о доставке выключены."; "This group has over %lld members, delivery receipts are not sent." = "В группе более %lld членов, отчёты о доставке выключены.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This group no longer exists." = "Эта группа больше не существует."; "This group no longer exists." = "Эта группа больше не существует.";
/* No comment provided by engineer. */
"This is your own one-time link!" = "Это ваша собственная одноразовая ссылка!";
/* No comment provided by engineer. */
"This is your own SimpleX address!" = "Это ваш собственный адрес SimpleX!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"This setting applies to messages in your current chat profile **%@**." = "Эта настройка применяется к сообщениям в Вашем текущем профиле чата **%@**."; "This setting applies to messages in your current chat profile **%@**." = "Эта настройка применяется к сообщениям в Вашем текущем профиле чата **%@**.";
@@ -3190,6 +3425,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To connect, your contact can scan QR code or use the link in the app." = "Чтобы соединиться с Вами, Ваш контакт может отсканировать QR-код или использовать ссылку в приложении."; "To connect, your contact can scan QR code or use the link in the app." = "Чтобы соединиться с Вами, Ваш контакт может отсканировать QR-код или использовать ссылку в приложении.";
/* No comment provided by engineer. */
"To hide unwanted messages." = "Чтобы скрыть нежелательные сообщения.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To make a new connection" = "Чтобы соединиться"; "To make a new connection" = "Чтобы соединиться";
@@ -3238,6 +3476,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unable to record voice message" = "Невозможно записать голосовое сообщение"; "Unable to record voice message" = "Невозможно записать голосовое сообщение";
/* No comment provided by engineer. */
"Unblock" = "Разблокировать";
/* No comment provided by engineer. */
"Unblock member" = "Разблокировать члена группы";
/* No comment provided by engineer. */
"Unblock member?" = "Разблокировать члена группы?";
/* item status description */ /* item status description */
"Unexpected error: %@" = "Неожиданная ошибка: %@"; "Unexpected error: %@" = "Неожиданная ошибка: %@";
@@ -3277,6 +3524,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Возможно, Ваш контакт удалил ссылку, или она уже была использована. Если это не так, то это может быть ошибкой - пожалуйста, сообщите нам об этом.\nЧтобы установить соединение, попросите Ваш контакт создать еще одну ссылку и проверьте Ваше соединение с сетью."; "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Возможно, Ваш контакт удалил ссылку, или она уже была использована. Если это не так, то это может быть ошибкой - пожалуйста, сообщите нам об этом.\nЧтобы установить соединение, попросите Ваш контакт создать еще одну ссылку и проверьте Ваше соединение с сетью.";
/* No comment provided by engineer. */
"Unlink" = "Забыть";
/* No comment provided by engineer. */
"Unlink desktop?" = "Забыть компьютер?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Unlock" = "Разблокировать"; "Unlock" = "Разблокировать";
@@ -3331,6 +3584,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use for new connections" = "Использовать для новых соединений"; "Use for new connections" = "Использовать для новых соединений";
/* No comment provided by engineer. */
"Use from desktop" = "Использовать с компьютера";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Use iOS call interface" = "Использовать интерфейс iOS для звонков"; "Use iOS call interface" = "Использовать интерфейс iOS для звонков";
@@ -3352,12 +3608,24 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Using SimpleX Chat servers." = "Используются серверы, предоставленные SimpleX Chat."; "Using SimpleX Chat servers." = "Используются серверы, предоставленные SimpleX Chat.";
/* No comment provided by engineer. */
"v%@" = "v%@";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"v%@ (%@)" = "v%@ (%@)"; "v%@ (%@)" = "v%@ (%@)";
/* No comment provided by engineer. */
"Verify code with desktop" = "Сверьте код с компьютером";
/* No comment provided by engineer. */
"Verify connection" = "Проверить соединение";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Verify connection security" = "Проверить безопасность соединения"; "Verify connection security" = "Проверить безопасность соединения";
/* No comment provided by engineer. */
"Verify connections" = "Проверять соединения";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Verify security code" = "Подтвердить код безопасности"; "Verify security code" = "Подтвердить код безопасности";
@@ -3376,6 +3644,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"via relay" = "через relay сервер"; "via relay" = "через relay сервер";
/* No comment provided by engineer. */
"Via secure quantum resistant protocol." = "Через безопасный квантово-устойчивый протокол.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Video call" = "Видеозвонок"; "Video call" = "Видеозвонок";
@@ -3415,6 +3686,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"waiting for confirmation…" = "ожидается подтверждение…"; "waiting for confirmation…" = "ожидается подтверждение…";
/* No comment provided by engineer. */
"Waiting for desktop..." = "Ожидается подключение компьютера...";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Waiting for file" = "Ожидается прием файла"; "Waiting for file" = "Ожидается прием файла";
@@ -3484,6 +3758,27 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You are already connected to %@." = "Вы уже соединены с контактом %@."; "You are already connected to %@." = "Вы уже соединены с контактом %@.";
/* No comment provided by engineer. */
"You are already connecting to %@." = "Вы уже соединяетесь с %@.";
/* No comment provided by engineer. */
"You are already connecting via this one-time link!" = "Вы уже соединяетесь по этой одноразовой ссылке!";
/* No comment provided by engineer. */
"You are already in group %@." = "Вы уже состоите в группе %@.";
/* No comment provided by engineer. */
"You are already joining the group %@." = "Вы уже вступаете в группу %@.";
/* No comment provided by engineer. */
"You are already joining the group via this link!" = "Вы уже вступаете в группу по этой ссылке!";
/* No comment provided by engineer. */
"You are already joining the group via this link." = "Вы уже вступаете в группу по этой ссылке.";
/* No comment provided by engineer. */
"You are already joining the group!\nRepeat join request?" = "Вы уже вступаете в группу!\nПовторить запрос на вступление?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You are connected to the server used to receive messages from this contact." = "Установлено соединение с сервером, через который Вы получаете сообщения от этого контакта."; "You are connected to the server used to receive messages from this contact." = "Установлено соединение с сервером, через который Вы получаете сообщения от этого контакта.";
@@ -3559,6 +3854,12 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You could not be verified; please try again." = "Верификация не удалась; пожалуйста, попробуйте ещё раз."; "You could not be verified; please try again." = "Верификация не удалась; пожалуйста, попробуйте ещё раз.";
/* No comment provided by engineer. */
"You have already requested connection via this address!" = "Вы уже запросили соединение через этот адрес!";
/* No comment provided by engineer. */
"You have already requested connection!\nRepeat connection request?" = "Вы уже запросили соединение!\nПовторить запрос?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You have no chats" = "У Вас нет чатов"; "You have no chats" = "У Вас нет чатов";
@@ -3601,6 +3902,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be connected to group when the group host's device is online, please wait or check later!" = "Соединение с группой будет установлено, когда хост группы будет онлайн. Пожалуйста, подождите или проверьте позже!"; "You will be connected to group when the group host's device is online, please wait or check later!" = "Соединение с группой будет установлено, когда хост группы будет онлайн. Пожалуйста, подождите или проверьте позже!";
/* No comment provided by engineer. */
"You will be connected when group link host's device is online, please wait or check later!" = "Соединение будет установлено, когда владелец ссылки группы будет онлайн. Пожалуйста, подождите или проверьте позже!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be connected when your connection request is accepted, please wait or check later!" = "Соединение будет установлено, когда Ваш запрос будет принят. Пожалуйста, подождите или проверьте позже!"; "You will be connected when your connection request is accepted, please wait or check later!" = "Соединение будет установлено, когда Ваш запрос будет принят. Пожалуйста, подождите или проверьте позже!";
@@ -3611,7 +3915,7 @@
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Вы будете аутентифицированы при запуске и возобновлении приложения, которое было 30 секунд в фоновом режиме."; "You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Вы будете аутентифицированы при запуске и возобновлении приложения, которое было 30 секунд в фоновом режиме.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will join a group this link refers to and connect to its group members." = "Вы вступите в группу, на которую ссылается эта ссылка, и соединитесь с её членами."; "You will connect to all group members." = "Вы соединитесь со всеми членами группы.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "Вы все равно получите звонки и уведомления в профилях без звука, когда они активные."; "You will still receive calls and notifications from muted profiles when they are active." = "Вы все равно получите звонки и уведомления в профилях без звука, когда они активные.";
@@ -3643,9 +3947,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat database is not encrypted - set passphrase to encrypt it." = "База данных НЕ зашифрована. Установите пароль, чтобы защитить Ваши данные."; "Your chat database is not encrypted - set passphrase to encrypt it." = "База данных НЕ зашифрована. Установите пароль, чтобы защитить Ваши данные.";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "Ваш профиль чата будет отправлен членам группы";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat profiles" = "Ваши профили чата"; "Your chat profiles" = "Ваши профили чата";
@@ -3679,6 +3980,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your privacy" = "Конфиденциальность"; "Your privacy" = "Конфиденциальность";
/* No comment provided by engineer. */
"Your profile" = "Ваш профиль";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your profile **%@** will be shared." = "Будет отправлен Ваш профиль **%@**."; "Your profile **%@** will be shared." = "Будет отправлен Ваш профиль **%@**.";
@@ -7,6 +7,9 @@
/* Privacy - Face ID Usage Description */ /* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX использует Face ID для аутентификации"; "NSFaceIDUsageDescription" = "SimpleX использует Face ID для аутентификации";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX использует доступ к локальной сети, чтобы разрешить использование профиля чата через компьютер в той же сети.";
/* Privacy - Microphone Usage Description */ /* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX использует микрофон для аудио и видео звонков, и для записи голосовых сообщений."; "NSMicrophoneUsageDescription" = "SimpleX использует микрофон для аудио и видео звонков, и для записи голосовых сообщений.";
+2 -31
View File
@@ -690,9 +690,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "เชื่อมต่อกับนักพัฒนา SimpleX Chat"; "connect to SimpleX Chat developers." = "เชื่อมต่อกับนักพัฒนา SimpleX Chat";
/* No comment provided by engineer. */
"Connect via group link?" = "เชื่อมต่อผ่านลิงค์กลุ่ม?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via link" = "เชื่อมต่อผ่านลิงก์"; "Connect via link" = "เชื่อมต่อผ่านลิงก์";
@@ -756,9 +753,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Contact already exists" = "ผู้ติดต่อรายนี้มีอยู่แล้ว"; "Contact already exists" = "ผู้ติดต่อรายนี้มีอยู่แล้ว";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "ผู้ติดต่อและข้อความทั้งหมดจะถูกลบ - ไม่สามารถยกเลิกได้!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"contact has e2e encryption" = "ผู้ติดต่อมีการ encrypt จากต้นจนจบ"; "contact has e2e encryption" = "ผู้ติดต่อมีการ encrypt จากต้นจนจบ";
@@ -960,9 +954,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete Contact" = "ลบผู้ติดต่อ"; "Delete Contact" = "ลบผู้ติดต่อ";
/* No comment provided by engineer. */
"Delete contact?" = "ลบผู้ติดต่อ?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete database" = "ลบฐานข้อมูล"; "Delete database" = "ลบฐานข้อมูล";
@@ -1110,12 +1101,6 @@
/* server test step */ /* server test step */
"Disconnect" = "ตัดการเชื่อมต่อ"; "Disconnect" = "ตัดการเชื่อมต่อ";
/* No comment provided by engineer. */
"Display name" = "ชื่อที่แสดง";
/* No comment provided by engineer. */
"Display name:" = "ชื่อที่แสดง:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Do it later" = "ทำในภายหลัง"; "Do it later" = "ทำในภายหลัง";
@@ -2143,7 +2128,8 @@
"observer" = "ผู้สังเกตการณ์"; "observer" = "ผู้สังเกตการณ์";
/* enabled status /* enabled status
group pref value */ group pref value
time to disappear */
"off" = "ปิด"; "off" = "ปิด";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@@ -2242,12 +2228,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Opening database…" = "กำลังเปิดฐานข้อมูล…"; "Opening database…" = "กำลังเปิดฐานข้อมูล…";
/* No comment provided by engineer. */
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "การเปิดลิงก์ในเบราว์เซอร์อาจลดความเป็นส่วนตัวและความปลอดภัยของการเชื่อมต่อ ลิงก์ SimpleX ที่ไม่น่าเชื่อถือจะเป็นสีแดง";
/* No comment provided by engineer. */
"or chat with the developers" = "หรือแชทกับนักพัฒนาแอป";
/* member role */ /* member role */
"owner" = "เจ้าของ"; "owner" = "เจ้าของ";
@@ -3007,9 +2987,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "encryption กำลังทำงานและไม่จำเป็นต้องใช้ข้อตกลง encryption ใหม่ อาจทำให้การเชื่อมต่อผิดพลาดได้!"; "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "encryption กำลังทำงานและไม่จำเป็นต้องใช้ข้อตกลง encryption ใหม่ อาจทำให้การเชื่อมต่อผิดพลาดได้!";
/* No comment provided by engineer. */
"The group is fully decentralized it is visible only to the members." = "กลุ่มมีการกระจายอำนาจอย่างเต็มที่ – มองเห็นได้เฉพาะสมาชิกเท่านั้น";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The hash of the previous message is different." = "แฮชของข้อความก่อนหน้านี้แตกต่างกัน"; "The hash of the previous message is different." = "แฮชของข้อความก่อนหน้านี้แตกต่างกัน";
@@ -3484,9 +3461,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "คุณจะต้องตรวจสอบสิทธิ์เมื่อคุณเริ่มหรือกลับมาใช้แอปพลิเคชันอีกครั้งหลังจากผ่านไป 30 วินาทีในพื้นหลัง"; "You will be required to authenticate when you start or resume the app after 30 seconds in background." = "คุณจะต้องตรวจสอบสิทธิ์เมื่อคุณเริ่มหรือกลับมาใช้แอปพลิเคชันอีกครั้งหลังจากผ่านไป 30 วินาทีในพื้นหลัง";
/* No comment provided by engineer. */
"You will join a group this link refers to and connect to its group members." = "คุณจะเข้าร่วมกลุ่มที่ลิงก์นี้อ้างถึงและเชื่อมต่อกับสมาชิกในกลุ่ม";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "คุณจะยังได้รับสายเรียกเข้าและการแจ้งเตือนจากโปรไฟล์ที่ปิดเสียงเมื่อโปรไฟล์ของเขามีการใช้งาน"; "You will still receive calls and notifications from muted profiles when they are active." = "คุณจะยังได้รับสายเรียกเข้าและการแจ้งเตือนจากโปรไฟล์ที่ปิดเสียงเมื่อโปรไฟล์ของเขามีการใช้งาน";
@@ -3517,9 +3491,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat database is not encrypted - set passphrase to encrypt it." = "ฐานข้อมูลการแชทของคุณไม่ได้ถูก encrypt - ตั้งรหัสผ่านเพื่อ encrypt"; "Your chat database is not encrypted - set passphrase to encrypt it." = "ฐานข้อมูลการแชทของคุณไม่ได้ถูก encrypt - ตั้งรหัสผ่านเพื่อ encrypt";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "โปรไฟล์การแชทของคุณจะถูกส่งไปยังสมาชิกในกลุ่ม";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat profiles" = "โปรไฟล์แชทของคุณ"; "Your chat profiles" = "โปรไฟล์แชทของคุณ";
+2 -37
View File
@@ -708,21 +708,12 @@
/* server test step */ /* server test step */
"Connect" = "Підключіться"; "Connect" = "Підключіться";
/* No comment provided by engineer. */
"Connect directly" = "Підключіться безпосередньо";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect incognito" = "Підключайтеся інкогніто"; "Connect incognito" = "Підключайтеся інкогніто";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "зв'язатися з розробниками SimpleX Chat."; "connect to SimpleX Chat developers." = "зв'язатися з розробниками SimpleX Chat.";
/* No comment provided by engineer. */
"Connect via contact link" = "Підключіться за контактним посиланням";
/* No comment provided by engineer. */
"Connect via group link?" = "Підключитися за груповим посиланням?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via link" = "Підключіться за посиланням"; "Connect via link" = "Підключіться за посиланням";
@@ -789,9 +780,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Contact already exists" = "Контакт вже існує"; "Contact already exists" = "Контакт вже існує";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "Контакт і всі повідомлення будуть видалені - це неможливо скасувати!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"contact has e2e encryption" = "контакт має шифрування e2e"; "contact has e2e encryption" = "контакт має шифрування e2e";
@@ -993,9 +981,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete Contact" = "Видалити контакт"; "Delete Contact" = "Видалити контакт";
/* No comment provided by engineer. */
"Delete contact?" = "Видалити контакт?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete database" = "Видалити базу даних"; "Delete database" = "Видалити базу даних";
@@ -1149,12 +1134,6 @@
/* server test step */ /* server test step */
"Disconnect" = "Від'єднати"; "Disconnect" = "Від'єднати";
/* No comment provided by engineer. */
"Display name" = "Відображуване ім'я";
/* No comment provided by engineer. */
"Display name:" = "Відображуване ім'я:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Do it later" = "Зробіть це пізніше"; "Do it later" = "Зробіть це пізніше";
@@ -2197,7 +2176,8 @@
"observer" = "спостерігач"; "observer" = "спостерігач";
/* enabled status /* enabled status
group pref value */ group pref value
time to disappear */
"off" = "вимкнено"; "off" = "вимкнено";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@@ -2296,12 +2276,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Opening database…" = "Відкриття бази даних…"; "Opening database…" = "Відкриття бази даних…";
/* No comment provided by engineer. */
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Відкриття посилання в браузері може знизити конфіденційність і безпеку з'єднання. Ненадійні посилання SimpleX будуть червоного кольору.";
/* No comment provided by engineer. */
"or chat with the developers" = "або поспілкуйтеся з розробниками";
/* member role */ /* member role */
"owner" = "власник"; "owner" = "власник";
@@ -3082,9 +3056,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Шифрування працює і нова угода про шифрування не потрібна. Це може призвести до помилок з'єднання!"; "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Шифрування працює і нова угода про шифрування не потрібна. Це може призвести до помилок з'єднання!";
/* No comment provided by engineer. */
"The group is fully decentralized it is visible only to the members." = "Група повністю децентралізована - її бачать лише учасники.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The hash of the previous message is different." = "Хеш попереднього повідомлення відрізняється."; "The hash of the previous message is different." = "Хеш попереднього повідомлення відрізняється.";
@@ -3574,9 +3545,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Вам потрібно буде пройти автентифікацію при запуску або відновленні програми після 30 секунд роботи у фоновому режимі."; "You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Вам потрібно буде пройти автентифікацію при запуску або відновленні програми після 30 секунд роботи у фоновому режимі.";
/* No comment provided by engineer. */
"You will join a group this link refers to and connect to its group members." = "Ви приєднаєтеся до групи, на яку посилається це посилання, і з'єднаєтеся з її учасниками.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "Ви все одно отримуватимете дзвінки та сповіщення від вимкнених профілів, якщо вони активні."; "You will still receive calls and notifications from muted profiles when they are active." = "Ви все одно отримуватимете дзвінки та сповіщення від вимкнених профілів, якщо вони активні.";
@@ -3607,9 +3575,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat database is not encrypted - set passphrase to encrypt it." = "Ваша база даних чату не зашифрована - встановіть ключову фразу, щоб зашифрувати її."; "Your chat database is not encrypted - set passphrase to encrypt it." = "Ваша база даних чату не зашифрована - встановіть ключову фразу, щоб зашифрувати її.";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "Ваш профіль у чаті буде надіслано учасникам групи";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat profiles" = "Ваші профілі чату"; "Your chat profiles" = "Ваші профілі чату";
+45 -35
View File
@@ -19,6 +19,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"_italic_" = "\\_斜体_"; "_italic_" = "\\_斜体_";
/* No comment provided by engineer. */
"- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- delivery receipts (up to 20 members).\n- faster and more stable." = "- 连接 [目录服务](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- 发送回执(最多20成员)。\n- 更快并且更稳固。";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"- more stable message delivery.\n- a bit better groups.\n- and more!" = "- 更稳定的传输!\n- 更好的社群!\n- 以及更多!"; "- more stable message delivery.\n- a bit better groups.\n- and more!" = "- 更稳定的传输!\n- 更好的社群!\n- 以及更多!";
@@ -446,6 +449,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"App build: %@" = "应用程序构建:%@"; "App build: %@" = "应用程序构建:%@";
/* No comment provided by engineer. */
"App encrypts new local files (except videos)." = "应用程序为新的本地文件(视频除外)加密。";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"App icon" = "应用程序图标"; "App icon" = "应用程序图标";
@@ -539,6 +545,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Both you and your contact can send voice messages." = "您和您的联系人都可以发送语音消息。"; "Both you and your contact can send voice messages." = "您和您的联系人都可以发送语音消息。";
/* No comment provided by engineer. */
"Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" = "保加利亚语、芬兰语、泰语和乌克兰语——感谢用户和[Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "通过聊天资料(默认)或者[通过连接](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)。"; "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "通过聊天资料(默认)或者[通过连接](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)。";
@@ -711,21 +720,12 @@
/* server test step */ /* server test step */
"Connect" = "连接"; "Connect" = "连接";
/* No comment provided by engineer. */
"Connect directly" = "直接连接";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect incognito" = "在隐身状态下连接"; "Connect incognito" = "在隐身状态下连接";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "连接到 SimpleX Chat 开发者。"; "connect to SimpleX Chat developers." = "连接到 SimpleX Chat 开发者。";
/* No comment provided by engineer. */
"Connect via contact link" = "通过联系人链接进行连接";
/* No comment provided by engineer. */
"Connect via group link?" = "通过群组链接连接?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Connect via link" = "通过链接连接"; "Connect via link" = "通过链接连接";
@@ -738,6 +738,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connected" = "已连接"; "connected" = "已连接";
/* rcv group event chat item */
"connected directly" = "已直连";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"connecting" = "连接中"; "connecting" = "连接中";
@@ -792,9 +795,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Contact already exists" = "联系人已存在"; "Contact already exists" = "联系人已存在";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "联系人和所有的消息都将被删除——这是不可逆回的!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"contact has e2e encryption" = "联系人具有端到端加密"; "contact has e2e encryption" = "联系人具有端到端加密";
@@ -846,6 +846,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create link" = "创建链接"; "Create link" = "创建链接";
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "在[桌面应用程序](https://simplex.chat/downloads/)中创建新的个人资料。 💻";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Create one-time invitation link" = "创建一次性邀请链接"; "Create one-time invitation link" = "创建一次性邀请链接";
@@ -996,9 +999,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete Contact" = "删除联系人"; "Delete Contact" = "删除联系人";
/* No comment provided by engineer. */
"Delete contact?" = "删除联系人?";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Delete database" = "删除数据库"; "Delete database" = "删除数据库";
@@ -1153,10 +1153,7 @@
"Disconnect" = "断开连接"; "Disconnect" = "断开连接";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Display name" = "显示名称"; "Discover and join groups" = "发现和加入群组";
/* No comment provided by engineer. */
"Display name:" = "显示名:";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Do it later" = "稍后再做"; "Do it later" = "稍后再做";
@@ -1251,6 +1248,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Encrypt local files" = "加密本地文件"; "Encrypt local files" = "加密本地文件";
/* No comment provided by engineer. */
"Encrypt stored files & media" = "为存储的文件和媒体加密";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Encrypted database" = "加密数据库"; "Encrypted database" = "加密数据库";
@@ -1359,6 +1359,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating group link" = "创建群组链接错误"; "Error creating group link" = "创建群组链接错误";
/* No comment provided by engineer. */
"Error creating member contact" = "创建成员联系人时出错";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error creating profile!" = "创建资料错误!"; "Error creating profile!" = "创建资料错误!";
@@ -1437,6 +1440,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending email" = "发送电邮错误"; "Error sending email" = "发送电邮错误";
/* No comment provided by engineer. */
"Error sending member contact invitation" = "发送成员联系人邀请错误";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Error sending message" = "发送消息错误"; "Error sending message" = "发送消息错误";
@@ -2130,6 +2136,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"New database archive" = "新数据库存档"; "New database archive" = "新数据库存档";
/* No comment provided by engineer. */
"New desktop app!" = "全新桌面应用!";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"New display name" = "新显示名"; "New display name" = "新显示名";
@@ -2206,7 +2215,8 @@
"observer" = "观察者"; "observer" = "观察者";
/* enabled status /* enabled status
group pref value */ group pref value
time to disappear */
"off" = "关闭"; "off" = "关闭";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@@ -2287,6 +2297,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Only your contact can send voice messages." = "只有您的联系人可以发送语音消息。"; "Only your contact can send voice messages." = "只有您的联系人可以发送语音消息。";
/* No comment provided by engineer. */
"Open" = "打开";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Open chat" = "打开聊天"; "Open chat" = "打开聊天";
@@ -2305,12 +2318,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Opening database…" = "打开数据库中……"; "Opening database…" = "打开数据库中……";
/* No comment provided by engineer. */
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "在浏览器中打开链接可能会降低连接的隐私和安全性。SimpleX 上不受信任的链接将显示为红色。";
/* No comment provided by engineer. */
"or chat with the developers" = "或与开发者聊天";
/* member role */ /* member role */
"owner" = "群主"; "owner" = "群主";
@@ -2761,9 +2768,15 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send delivery receipts to" = "将送达回执发送给"; "Send delivery receipts to" = "将送达回执发送给";
/* No comment provided by engineer. */
"send direct message" = "发送私信";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send direct message" = "发送私信"; "Send direct message" = "发送私信";
/* No comment provided by engineer. */
"Send direct message to connect" = "发送私信来连接";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Send disappearing message" = "发送限时消息中"; "Send disappearing message" = "发送限时消息中";
@@ -2944,6 +2957,9 @@
/* simplex link type */ /* simplex link type */
"SimpleX one-time invitation" = "SimpleX 一次性邀请"; "SimpleX one-time invitation" = "SimpleX 一次性邀请";
/* No comment provided by engineer. */
"Simplified incognito mode" = "简化的隐身模式";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Skip" = "跳过"; "Skip" = "跳过";
@@ -3091,9 +3107,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "加密正在运行,不需要新的加密协议。这可能会导致连接错误!"; "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "加密正在运行,不需要新的加密协议。这可能会导致连接错误!";
/* No comment provided by engineer. */
"The group is fully decentralized it is visible only to the members." = "该小组是完全分散式的——它只对成员可见。";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"The hash of the previous message is different." = "上一条消息的散列不同。"; "The hash of the previous message is different." = "上一条消息的散列不同。";
@@ -3190,6 +3203,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "要与您的联系人验证端到端加密,请比较(或扫描)您设备上的代码。"; "To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "要与您的联系人验证端到端加密,请比较(或扫描)您设备上的代码。";
/* No comment provided by engineer. */
"Toggle incognito when connecting." = "在连接时切换隐身模式。";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Transport isolation" = "传输隔离"; "Transport isolation" = "传输隔离";
@@ -3583,9 +3599,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "当您启动应用或在应用程序驻留后台超过30 秒后,您将需要进行身份验证。"; "You will be required to authenticate when you start or resume the app after 30 seconds in background." = "当您启动应用或在应用程序驻留后台超过30 秒后,您将需要进行身份验证。";
/* No comment provided by engineer. */
"You will join a group this link refers to and connect to its group members." = "您将加入此链接指向的群组并连接到其群组成员。";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"You will still receive calls and notifications from muted profiles when they are active." = "当静音配置文件处于活动状态时,您仍会收到来自静音配置文件的电话和通知。"; "You will still receive calls and notifications from muted profiles when they are active." = "当静音配置文件处于活动状态时,您仍会收到来自静音配置文件的电话和通知。";
@@ -3616,9 +3629,6 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat database is not encrypted - set passphrase to encrypt it." = "您的聊天数据库未加密——设置密码来加密。"; "Your chat database is not encrypted - set passphrase to encrypt it." = "您的聊天数据库未加密——设置密码来加密。";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "您的聊天资料将被发送给群组成员";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Your chat profiles" = "您的聊天资料"; "Your chat profiles" = "您的聊天资料";
@@ -15,7 +15,6 @@
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" /> tools:ignore="ScopedStorage" />
@@ -16,7 +16,6 @@ import chat.simplex.common.views.chatlist.*
import chat.simplex.common.views.helpers.* import chat.simplex.common.views.helpers.*
import chat.simplex.common.views.onboarding.* import chat.simplex.common.views.onboarding.*
import chat.simplex.common.platform.* import chat.simplex.common.platform.*
import chat.simplex.res.MR
import kotlinx.coroutines.* import kotlinx.coroutines.*
import java.lang.ref.WeakReference import java.lang.ref.WeakReference
@@ -127,7 +126,7 @@ fun processIntent(intent: Intent?) {
when (intent?.action) { when (intent?.action) {
"android.intent.action.VIEW" -> { "android.intent.action.VIEW" -> {
val uri = intent.data val uri = intent.data
if (uri != null) connectIfOpenedViaUri(uri.toURI(), ChatModel) if (uri != null) connectIfOpenedViaUri(chatModel.remoteHostId(), uri.toURI(), ChatModel)
} }
} }
} }
@@ -143,7 +142,7 @@ fun processExternalIntent(intent: Intent?) {
val text = intent.getStringExtra(Intent.EXTRA_TEXT) val text = intent.getStringExtra(Intent.EXTRA_TEXT)
val uri = intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri val uri = intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri
if (uri != null) { if (uri != null) {
if (uri.scheme != "content") return showNonContentUriAlert() if (uri.scheme != "content") return showWrongUriAlert()
// Shared file that contains plain text, like `*.log` file // Shared file that contains plain text, like `*.log` file
chatModel.sharedContent.value = SharedContent.File(text ?: "", uri.toURI()) chatModel.sharedContent.value = SharedContent.File(text ?: "", uri.toURI())
} else if (text != null) { } else if (text != null) {
@@ -154,14 +153,14 @@ fun processExternalIntent(intent: Intent?) {
isMediaIntent(intent) -> { isMediaIntent(intent) -> {
val uri = intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri val uri = intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri
if (uri != null) { if (uri != null) {
if (uri.scheme != "content") return showNonContentUriAlert() if (uri.scheme != "content") return showWrongUriAlert()
chatModel.sharedContent.value = SharedContent.Media(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", listOf(uri.toURI())) chatModel.sharedContent.value = SharedContent.Media(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", listOf(uri.toURI()))
} // All other mime types } // All other mime types
} }
else -> { else -> {
val uri = intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri val uri = intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri
if (uri != null) { if (uri != null) {
if (uri.scheme != "content") return showNonContentUriAlert() if (uri.scheme != "content") return showWrongUriAlert()
chatModel.sharedContent.value = SharedContent.File(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", uri.toURI()) chatModel.sharedContent.value = SharedContent.File(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", uri.toURI())
} }
} }
@@ -176,7 +175,7 @@ fun processExternalIntent(intent: Intent?) {
isMediaIntent(intent) -> { isMediaIntent(intent) -> {
val uris = intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM) as? List<Uri> val uris = intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM) as? List<Uri>
if (uris != null) { if (uris != null) {
if (uris.any { it.scheme != "content" }) return showNonContentUriAlert() if (uris.any { it.scheme != "content" }) return showWrongUriAlert()
chatModel.sharedContent.value = SharedContent.Media(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", uris.map { it.toURI() }) chatModel.sharedContent.value = SharedContent.Media(intent.getStringExtra(Intent.EXTRA_TEXT) ?: "", uris.map { it.toURI() })
} // All other mime types } // All other mime types
} }
@@ -189,13 +188,6 @@ fun processExternalIntent(intent: Intent?) {
fun isMediaIntent(intent: Intent): Boolean = fun isMediaIntent(intent: Intent): Boolean =
intent.type?.startsWith("image/") == true || intent.type?.startsWith("video/") == true intent.type?.startsWith("image/") == true || intent.type?.startsWith("video/") == true
private fun showNonContentUriAlert() {
AlertManager.shared.showAlertMsg(
title = generalGetString(MR.strings.non_content_uri_alert_title),
text = generalGetString(MR.strings.non_content_uri_alert_text)
)
}
//fun testJson() { //fun testJson() {
// val str: String = """ // val str: String = """
// """.trimIndent() // """.trimIndent()
@@ -57,7 +57,7 @@ class SimplexApp: Application(), LifecycleEventObserver {
updatingChatsMutex.withLock { updatingChatsMutex.withLock {
kotlin.runCatching { kotlin.runCatching {
val currentUserId = chatModel.currentUser.value?.userId val currentUserId = chatModel.currentUser.value?.userId
val chats = ArrayList(chatController.apiGetChats()) val chats = ArrayList(chatController.apiGetChats(chatModel.remoteHostId()))
/** Active user can be changed in background while [ChatController.apiGetChats] is executing */ /** Active user can be changed in background while [ChatController.apiGetChats] is executing */
if (chatModel.currentUser.value?.userId == currentUserId) { if (chatModel.currentUser.value?.userId == currentUserId) {
val currentChatId = chatModel.chatId.value val currentChatId = chatModel.chatId.value
@@ -231,6 +231,7 @@ fun PreviewIncomingCallLockScreenAlert() {
) { ) {
IncomingCallLockScreenAlertLayout( IncomingCallLockScreenAlertLayout(
invitation = RcvCallInvitation( invitation = RcvCallInvitation(
remoteHostId = null,
user = User.sampleData, user = User.sampleData,
contact = Contact.sampleData, contact = Contact.sampleData,
callType = CallType(media = CallMediaType.Audio, capabilities = CallCapabilities(encryption = false)), callType = CallType(media = CallMediaType.Audio, capabilities = CallCapabilities(encryption = false)),
-1
View File
@@ -45,7 +45,6 @@ buildscript {
dependencies { dependencies {
classpath("com.android.tools.build:gradle:${rootProject.extra["gradle.plugin.version"]}") classpath("com.android.tools.build:gradle:${rootProject.extra["gradle.plugin.version"]}")
classpath(kotlin("gradle-plugin", version = rootProject.extra["kotlin.version"] as String)) classpath(kotlin("gradle-plugin", version = rootProject.extra["kotlin.version"] as String))
classpath("org.jetbrains.kotlin:kotlin-serialization:1.3.2")
classpath("dev.icerock.moko:resources-generator:0.23.0") classpath("dev.icerock.moko:resources-generator:0.23.0")
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
@@ -16,6 +16,8 @@ import kotlin.random.Random
actual val appPlatform = AppPlatform.ANDROID actual val appPlatform = AppPlatform.ANDROID
actual val deviceName = android.os.Build.MODEL
var isAppOnForeground: Boolean = false var isAppOnForeground: Boolean = false
@Suppress("ConstantLocale") @Suppress("ConstantLocale")
@@ -23,6 +23,8 @@ actual val agentDatabaseFileName: String = "files_agent.db"
actual val databaseExportDir: File = androidAppContext.cacheDir actual val databaseExportDir: File = androidAppContext.cacheDir
actual val remoteHostsDir: File = File(tmpDir.absolutePath + File.separator + "remote_hosts")
actual fun desktopOpenDatabaseDir() {} actual fun desktopOpenDatabaseDir() {}
@Composable @Composable
@@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.painter.Painter
import com.google.accompanist.insets.navigationBarsWithImePadding import com.google.accompanist.insets.navigationBarsWithImePadding
import java.io.File
actual fun Modifier.navigationBarsWithImePadding(): Modifier = navigationBarsWithImePadding() actual fun Modifier.navigationBarsWithImePadding(): Modifier = navigationBarsWithImePadding()
@@ -19,7 +20,7 @@ actual fun ProvideWindowInsets(
@Composable @Composable
actual fun Modifier.desktopOnExternalDrag( actual fun Modifier.desktopOnExternalDrag(
enabled: Boolean, enabled: Boolean,
onFiles: (List<String>) -> Unit, onFiles: (List<File>) -> Unit,
onImage: (Painter) -> Unit, onImage: (Painter) -> Unit,
onText: (String) -> Unit onText: (String) -> Unit
): Modifier = this ): Modifier = this
@@ -38,7 +38,7 @@ actual class RecorderNative: RecorderInterface {
rec.setAudioSamplingRate(16000) rec.setAudioSamplingRate(16000)
rec.setAudioEncodingBitRate(32000) rec.setAudioEncodingBitRate(32000)
rec.setMaxDuration(MAX_VOICE_MILLIS_FOR_SENDING) rec.setMaxDuration(MAX_VOICE_MILLIS_FOR_SENDING)
val fileToSave = File.createTempFile(generateNewFileName("voice", "${RecorderInterface.extension}_"), ".tmp", tmpDir) val fileToSave = File.createTempFile(generateNewFileName("voice", "${RecorderInterface.extension}_", tmpDir), ".tmp", tmpDir)
fileToSave.deleteOnExit() fileToSave.deleteOnExit()
val path = fileToSave.absolutePath val path = fileToSave.absolutePath
filePath = path filePath = path
@@ -48,6 +48,7 @@ actual class RecorderNative: RecorderInterface {
recStartedAt = System.currentTimeMillis() recStartedAt = System.currentTimeMillis()
progressJob = CoroutineScope(Dispatchers.Default).launch { progressJob = CoroutineScope(Dispatchers.Default).launch {
while(isActive) { while(isActive) {
keepScreenOn(true)
onProgressUpdate(progress(), false) onProgressUpdate(progress(), false)
delay(50) delay(50)
} }
@@ -84,6 +85,7 @@ actual class RecorderNative: RecorderInterface {
progressJob = null progressJob = null
filePath = null filePath = null
recorder = null recorder = null
keepScreenOn(false)
return (realDuration(path) ?: 0).also { recStartedAt = null } return (realDuration(path) ?: 0).also { recStartedAt = null }
} }
@@ -170,6 +172,7 @@ actual object AudioPlayer: AudioPlayerInterface {
progressJob = CoroutineScope(Dispatchers.Default).launch { progressJob = CoroutineScope(Dispatchers.Default).launch {
onProgressUpdate(player.currentPosition, TrackState.PLAYING) onProgressUpdate(player.currentPosition, TrackState.PLAYING)
while(isActive && player.isPlaying) { while(isActive && player.isPlaying) {
keepScreenOn(true)
// Even when current position is equal to duration, the player has isPlaying == true for some time, // Even when current position is equal to duration, the player has isPlaying == true for some time,
// so help to make the playback stopped in UI immediately // so help to make the playback stopped in UI immediately
if (player.currentPosition == player.duration) { if (player.currentPosition == player.duration) {
@@ -187,6 +190,7 @@ actual object AudioPlayer: AudioPlayerInterface {
if (isActive) { if (isActive) {
onProgressUpdate(player.duration, TrackState.PAUSED) onProgressUpdate(player.duration, TrackState.PAUSED)
} }
keepScreenOn(false)
onProgressUpdate(null, TrackState.PAUSED) onProgressUpdate(null, TrackState.PAUSED)
} }
return player.duration return player.duration
@@ -196,6 +200,7 @@ actual object AudioPlayer: AudioPlayerInterface {
progressJob?.cancel() progressJob?.cancel()
progressJob = null progressJob = null
player.pause() player.pause()
keepScreenOn(false)
return player.currentPosition return player.currentPosition
} }
@@ -203,6 +208,7 @@ actual object AudioPlayer: AudioPlayerInterface {
if (currentlyPlaying.value == null) return if (currentlyPlaying.value == null) return
player.stop() player.stop()
stopListener() stopListener()
keepScreenOn(false)
} }
override fun stop(item: ChatItem) = stop(item.file?.fileName) override fun stop(item: ChatItem) = stop(item.file?.fileName)
@@ -263,6 +269,7 @@ actual object AudioPlayer: AudioPlayerInterface {
override fun pause(audioPlaying: MutableState<Boolean>, pro: MutableState<Int>) { override fun pause(audioPlaying: MutableState<Boolean>, pro: MutableState<Int>) {
pro.value = pause() pro.value = pause()
audioPlaying.value = false audioPlaying.value = false
keepScreenOn(false)
} }
override fun seekTo(ms: Int, pro: MutableState<Int>, filePath: String?) { override fun seekTo(ms: Int, pro: MutableState<Int>, filePath: String?) {
@@ -277,9 +284,11 @@ actual object AudioPlayer: AudioPlayerInterface {
kotlin.runCatching { kotlin.runCatching {
helperPlayer.setDataSource(unencryptedFilePath) helperPlayer.setDataSource(unencryptedFilePath)
helperPlayer.prepare() helperPlayer.prepare()
helperPlayer.start() if (helperPlayer.duration <= 0) {
helperPlayer.stop() Log.e(TAG, "Duration of audio is incorrect: ${helperPlayer.duration}")
res = helperPlayer.duration } else {
res = helperPlayer.duration
}
helperPlayer.reset() helperPlayer.reset()
} }
return res return res
@@ -8,15 +8,12 @@ import android.provider.MediaStore
import android.webkit.MimeTypeMap import android.webkit.MimeTypeMap
import androidx.compose.ui.platform.ClipboardManager import androidx.compose.ui.platform.ClipboardManager
import androidx.compose.ui.platform.UriHandler import androidx.compose.ui.platform.UriHandler
import androidx.core.content.FileProvider
import androidx.core.net.toUri
import chat.simplex.common.helpers.* import chat.simplex.common.helpers.*
import chat.simplex.common.model.* import chat.simplex.common.model.*
import chat.simplex.common.views.helpers.* import chat.simplex.common.views.helpers.*
import java.io.BufferedOutputStream import java.io.BufferedOutputStream
import java.io.File import java.io.File
import chat.simplex.res.MR import chat.simplex.res.MR
import java.io.ByteArrayOutputStream
actual fun ClipboardManager.shareText(text: String) { actual fun ClipboardManager.shareText(text: String) {
val sendIntent: Intent = Intent().apply { val sendIntent: Intent = Intent().apply {
@@ -35,8 +32,13 @@ actual fun shareFile(text: String, fileSource: CryptoFile) {
val tmpFile = File(tmpDir, fileSource.filePath) val tmpFile = File(tmpDir, fileSource.filePath)
tmpFile.deleteOnExit() tmpFile.deleteOnExit()
ChatModel.filesToDelete.add(tmpFile) ChatModel.filesToDelete.add(tmpFile)
decryptCryptoFile(getAppFilePath(fileSource.filePath), fileSource.cryptoArgs, tmpFile.absolutePath) try {
FileProvider.getUriForFile(androidAppContext, "$APPLICATION_ID.provider", File(tmpFile.absolutePath)).toURI() decryptCryptoFile(getAppFilePath(fileSource.filePath), fileSource.cryptoArgs, tmpFile.absolutePath)
} catch (e: Exception) {
Log.e(TAG, "Unable to decrypt crypto file: " + e.stackTraceToString())
return
}
getAppFileUri(tmpFile.absolutePath)
} else { } else {
getAppFileUri(fileSource.filePath) getAppFileUri(fileSource.filePath)
} }
@@ -96,15 +98,21 @@ fun saveImage(ciFile: CIFile?) {
val outputStream = BufferedOutputStream(stream) val outputStream = BufferedOutputStream(stream)
if (ciFile.fileSource?.cryptoArgs != null) { if (ciFile.fileSource?.cryptoArgs != null) {
createTmpFileAndDelete { tmpFile -> createTmpFileAndDelete { tmpFile ->
decryptCryptoFile(filePath, ciFile.fileSource.cryptoArgs, tmpFile.absolutePath) try {
decryptCryptoFile(filePath, ciFile.fileSource.cryptoArgs, tmpFile.absolutePath)
} catch (e: Exception) {
Log.e(TAG, "Unable to decrypt crypto file: " + e.stackTraceToString())
return@createTmpFileAndDelete
}
tmpFile.inputStream().use { it.copyTo(outputStream) } tmpFile.inputStream().use { it.copyTo(outputStream) }
showToast(generalGetString(MR.strings.image_saved))
} }
outputStream.close() outputStream.close()
} else { } else {
File(filePath).inputStream().use { it.copyTo(outputStream) } File(filePath).inputStream().use { it.copyTo(outputStream) }
outputStream.close() outputStream.close()
showToast(generalGetString(MR.strings.image_saved))
} }
showToast(generalGetString(MR.strings.image_saved))
} }
} }
} else { } else {
@@ -1,13 +1,10 @@
package chat.simplex.common.platform package chat.simplex.common.platform
import android.media.MediaMetadataRetriever
import android.media.session.PlaybackState import android.media.session.PlaybackState
import android.net.Uri import android.net.Uri
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asImageBitmap
import chat.simplex.common.helpers.toUri
import chat.simplex.common.views.helpers.* import chat.simplex.common.views.helpers.*
import chat.simplex.res.MR import chat.simplex.res.MR
import com.google.android.exoplayer2.* import com.google.android.exoplayer2.*
@@ -74,7 +71,7 @@ actual class VideoPlayer actual constructor(
private fun start(seek: Long? = null, onProgressUpdate: (position: Long?, state: TrackState) -> Unit): Boolean { private fun start(seek: Long? = null, onProgressUpdate: (position: Long?, state: TrackState) -> Unit): Boolean {
val filepath = getAppFilePath(uri) val filepath = getAppFilePath(uri)
if (filepath == null || !File(filepath).exists()) { if (filepath == null || !File(filepath).exists()) {
Log.e(TAG, "No such file: $uri") Log.e(TAG, "No such file: $filepath")
brokenVideo.value = true brokenVideo.value = true
return false return false
} }
@@ -134,6 +131,7 @@ actual class VideoPlayer actual constructor(
player.addListener(object: Player.Listener{ player.addListener(object: Player.Listener{
override fun onIsPlayingChanged(isPlaying: Boolean) { override fun onIsPlayingChanged(isPlaying: Boolean) {
super.onIsPlayingChanged(isPlaying) super.onIsPlayingChanged(isPlaying)
keepScreenOn(isPlaying)
// Produce non-ideal transition from stopped to playing state while showing preview image in ChatView // Produce non-ideal transition from stopped to playing state while showing preview image in ChatView
// videoPlaying.value = isPlaying // videoPlaying.value = isPlaying
} }
@@ -192,6 +190,7 @@ actual class VideoPlayer actual constructor(
override fun release(remove: Boolean) { override fun release(remove: Boolean) {
player.release() player.release()
keepScreenOn(false)
if (remove) { if (remove) {
VideoPlayerHolder.players.remove(uri to gallery) VideoPlayerHolder.players.remove(uri to gallery)
} }
@@ -200,7 +199,7 @@ actual class VideoPlayer actual constructor(
private fun setPreviewAndDuration() { private fun setPreviewAndDuration() {
// It freezes main thread, doing it in IO thread // It freezes main thread, doing it in IO thread
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
val previewAndDuration = VideoPlayerHolder.previewsAndDurations.getOrPut(uri) { getBitmapFromVideo(uri) } val previewAndDuration = VideoPlayerHolder.previewsAndDurations.getOrPut(uri) { getBitmapFromVideo(uri, withAlertOnException = false) }
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
preview.value = previewAndDuration.preview ?: defaultPreview preview.value = previewAndDuration.preview ?: defaultPreview
duration.value = (previewAndDuration.duration ?: 0) duration.value = (previewAndDuration.duration ?: 0)
@@ -115,22 +115,23 @@ actual fun ActiveCallView() {
val call = chatModel.activeCall.value val call = chatModel.activeCall.value
if (call != null) { if (call != null) {
Log.d(TAG, "has active call $call") Log.d(TAG, "has active call $call")
val callRh = call.remoteHostId
when (val r = apiMsg.resp) { when (val r = apiMsg.resp) {
is WCallResponse.Capabilities -> withBGApi { is WCallResponse.Capabilities -> withBGApi {
val callType = CallType(call.localMedia, r.capabilities) val callType = CallType(call.localMedia, r.capabilities)
chatModel.controller.apiSendCallInvitation(call.contact, callType) chatModel.controller.apiSendCallInvitation(callRh, call.contact, callType)
chatModel.activeCall.value = call.copy(callState = CallState.InvitationSent, localCapabilities = r.capabilities) chatModel.activeCall.value = call.copy(callState = CallState.InvitationSent, localCapabilities = r.capabilities)
} }
is WCallResponse.Offer -> withBGApi { is WCallResponse.Offer -> withBGApi {
chatModel.controller.apiSendCallOffer(call.contact, r.offer, r.iceCandidates, call.localMedia, r.capabilities) chatModel.controller.apiSendCallOffer(callRh, call.contact, r.offer, r.iceCandidates, call.localMedia, r.capabilities)
chatModel.activeCall.value = call.copy(callState = CallState.OfferSent, localCapabilities = r.capabilities) chatModel.activeCall.value = call.copy(callState = CallState.OfferSent, localCapabilities = r.capabilities)
} }
is WCallResponse.Answer -> withBGApi { is WCallResponse.Answer -> withBGApi {
chatModel.controller.apiSendCallAnswer(call.contact, r.answer, r.iceCandidates) chatModel.controller.apiSendCallAnswer(callRh, call.contact, r.answer, r.iceCandidates)
chatModel.activeCall.value = call.copy(callState = CallState.Negotiated) chatModel.activeCall.value = call.copy(callState = CallState.Negotiated)
} }
is WCallResponse.Ice -> withBGApi { is WCallResponse.Ice -> withBGApi {
chatModel.controller.apiSendCallExtraInfo(call.contact, r.iceCandidates) chatModel.controller.apiSendCallExtraInfo(callRh, call.contact, r.iceCandidates)
} }
is WCallResponse.Connection -> is WCallResponse.Connection ->
try { try {
@@ -139,7 +140,7 @@ actual fun ActiveCallView() {
chatModel.activeCall.value = call.copy(callState = CallState.Connected, connectedAt = Clock.System.now()) chatModel.activeCall.value = call.copy(callState = CallState.Connected, connectedAt = Clock.System.now())
setCallSound(call.soundSpeaker, audioViaBluetooth) setCallSound(call.soundSpeaker, audioViaBluetooth)
} }
withBGApi { chatModel.controller.apiCallStatus(call.contact, callStatus) } withBGApi { chatModel.controller.apiCallStatus(callRh, call.contact, callStatus) }
} catch (e: Error) { } catch (e: Error) {
Log.d(TAG,"call status ${r.state.connectionState} not used") Log.d(TAG,"call status ${r.state.connectionState} not used")
} }
@@ -196,12 +197,14 @@ actual fun ActiveCallView() {
chatModel.activeCallViewIsVisible.value = true chatModel.activeCallViewIsVisible.value = true
// After the first call, End command gets added to the list which prevents making another calls // After the first call, End command gets added to the list which prevents making another calls
chatModel.callCommand.removeAll { it is WCallCommand.End } chatModel.callCommand.removeAll { it is WCallCommand.End }
keepScreenOn(true)
onDispose { onDispose {
activity.volumeControlStream = prevVolumeControlStream activity.volumeControlStream = prevVolumeControlStream
// Unlock orientation // Unlock orientation
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
chatModel.activeCallViewIsVisible.value = false chatModel.activeCallViewIsVisible.value = false
chatModel.callCommand.clear() chatModel.callCommand.clear()
keepScreenOn(false)
} }
} }
} }
@@ -576,6 +579,7 @@ fun PreviewActiveCallOverlayVideo() {
SimpleXTheme { SimpleXTheme {
ActiveCallOverlayLayout( ActiveCallOverlayLayout(
call = Call( call = Call(
remoteHostId = null,
contact = Contact.sampleData, contact = Contact.sampleData,
callState = CallState.Negotiated, callState = CallState.Negotiated,
localMedia = CallMediaType.Video, localMedia = CallMediaType.Video,
@@ -601,6 +605,7 @@ fun PreviewActiveCallOverlayAudio() {
SimpleXTheme { SimpleXTheme {
ActiveCallOverlayLayout( ActiveCallOverlayLayout(
call = Call( call = Call(
remoteHostId = null,
contact = Contact.sampleData, contact = Contact.sampleData,
callState = CallState.Negotiated, callState = CallState.Negotiated,
localMedia = CallMediaType.Audio, localMedia = CallMediaType.Audio,
@@ -1,16 +0,0 @@
package chat.simplex.common.views.chat
import android.Manifest
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import chat.simplex.common.views.chat.ScanCodeLayout
import com.google.accompanist.permissions.rememberPermissionState
@Composable
actual fun ScanCodeView(verifyCode: (String?, cb: (Boolean) -> Unit) -> Unit, close: () -> Unit) {
val cameraPermissionState = rememberPermissionState(permission = Manifest.permission.CAMERA)
LaunchedEffect(Unit) {
cameraPermissionState.launchPermissionRequest()
}
ScanCodeLayout(verifyCode, close)
}
@@ -11,6 +11,7 @@ import android.text.Spanned
import android.text.SpannedString import android.text.SpannedString
import android.text.style.* import android.text.style.*
import android.util.Base64 import android.util.Base64
import android.view.WindowManager
import androidx.compose.ui.graphics.* import androidx.compose.ui.graphics.*
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.* import androidx.compose.ui.text.*
@@ -43,6 +44,17 @@ fun Resources.getText(id: StringResource, vararg args: Any): CharSequence {
return HtmlCompat.fromHtml(formattedHtml, HtmlCompat.FROM_HTML_MODE_LEGACY) return HtmlCompat.fromHtml(formattedHtml, HtmlCompat.FROM_HTML_MODE_LEGACY)
} }
fun keepScreenOn(on: Boolean) {
val window = mainActivity.get()?.window ?: return
Handler(Looper.getMainLooper()).post {
if (on) {
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
} else {
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
}
}
actual fun escapedHtmlToAnnotatedString(text: String, density: Density): AnnotatedString { actual fun escapedHtmlToAnnotatedString(text: String, density: Density): AnnotatedString {
return spannableStringToAnnotatedString(HtmlCompat.fromHtml(text, HtmlCompat.FROM_HTML_MODE_LEGACY), density) return spannableStringToAnnotatedString(HtmlCompat.fromHtml(text, HtmlCompat.FROM_HTML_MODE_LEGACY), density)
} }
@@ -152,10 +164,10 @@ private fun spannableStringToAnnotatedString(
} }
actual fun getAppFileUri(fileName: String): URI = actual fun getAppFileUri(fileName: String): URI =
FileProvider.getUriForFile(androidAppContext, "$APPLICATION_ID.provider", File(getAppFilePath(fileName))).toURI() FileProvider.getUriForFile(androidAppContext, "$APPLICATION_ID.provider", if (File(fileName).isAbsolute) File(fileName) else File(getAppFilePath(fileName))).toURI()
// https://developer.android.com/training/data-storage/shared/documents-files#bitmap // https://developer.android.com/training/data-storage/shared/documents-files#bitmap
actual fun getLoadedImage(file: CIFile?): Pair<ImageBitmap, ByteArray>? { actual suspend fun getLoadedImage(file: CIFile?): Pair<ImageBitmap, ByteArray>? {
val filePath = getLoadedFilePath(file) val filePath = getLoadedFilePath(file)
return if (filePath != null && file != null) { return if (filePath != null && file != null) {
try { try {
@@ -233,17 +245,13 @@ actual fun getFileSize(uri: URI): Long? {
actual fun getBitmapFromUri(uri: URI, withAlertOnException: Boolean): ImageBitmap? { actual fun getBitmapFromUri(uri: URI, withAlertOnException: Boolean): ImageBitmap? {
return if (Build.VERSION.SDK_INT >= 28) { return if (Build.VERSION.SDK_INT >= 28) {
val source = ImageDecoder.createSource(androidAppContext.contentResolver, uri.toUri())
try { try {
val source = ImageDecoder.createSource(androidAppContext.contentResolver, uri.toUri())
ImageDecoder.decodeBitmap(source) ImageDecoder.decodeBitmap(source)
} catch (e: android.graphics.ImageDecoder.DecodeException) { } catch (e: Exception) {
Log.e(TAG, "Unable to decode the image: ${e.stackTraceToString()}") Log.e(TAG, "Unable to decode the image: ${e.stackTraceToString()}")
if (withAlertOnException) { if (withAlertOnException) showImageDecodingException()
AlertManager.shared.showAlertMsg(
title = generalGetString(MR.strings.image_decoding_exception_title),
text = generalGetString(MR.strings.image_decoding_exception_desc)
)
}
null null
} }
} else { } else {
@@ -253,17 +261,13 @@ actual fun getBitmapFromUri(uri: URI, withAlertOnException: Boolean): ImageBitma
actual fun getBitmapFromByteArray(data: ByteArray, withAlertOnException: Boolean): ImageBitmap? { actual fun getBitmapFromByteArray(data: ByteArray, withAlertOnException: Boolean): ImageBitmap? {
return if (Build.VERSION.SDK_INT >= 31) { return if (Build.VERSION.SDK_INT >= 31) {
val source = ImageDecoder.createSource(data)
try { try {
val source = ImageDecoder.createSource(data)
ImageDecoder.decodeBitmap(source) ImageDecoder.decodeBitmap(source)
} catch (e: android.graphics.ImageDecoder.DecodeException) { } catch (e: android.graphics.ImageDecoder.DecodeException) {
Log.e(TAG, "Unable to decode the image: ${e.stackTraceToString()}") Log.e(TAG, "Unable to decode the image: ${e.stackTraceToString()}")
if (withAlertOnException) { if (withAlertOnException) showImageDecodingException()
AlertManager.shared.showAlertMsg(
title = generalGetString(MR.strings.image_decoding_exception_title),
text = generalGetString(MR.strings.image_decoding_exception_desc)
)
}
null null
} }
} else { } else {
@@ -273,17 +277,13 @@ actual fun getBitmapFromByteArray(data: ByteArray, withAlertOnException: Boolean
actual fun getDrawableFromUri(uri: URI, withAlertOnException: Boolean): Any? { actual fun getDrawableFromUri(uri: URI, withAlertOnException: Boolean): Any? {
return if (Build.VERSION.SDK_INT >= 28) { return if (Build.VERSION.SDK_INT >= 28) {
val source = ImageDecoder.createSource(androidAppContext.contentResolver, uri.toUri())
try { try {
val source = ImageDecoder.createSource(androidAppContext.contentResolver, uri.toUri())
ImageDecoder.decodeDrawable(source) ImageDecoder.decodeDrawable(source)
} catch (e: android.graphics.ImageDecoder.DecodeException) { } catch (e: Exception) {
if (withAlertOnException) {
AlertManager.shared.showAlertMsg(
title = generalGetString(MR.strings.image_decoding_exception_title),
text = generalGetString(MR.strings.image_decoding_exception_desc)
)
}
Log.e(TAG, "Error while decoding drawable: ${e.stackTraceToString()}") Log.e(TAG, "Error while decoding drawable: ${e.stackTraceToString()}")
if (withAlertOnException) showImageDecodingException()
null null
} }
} else { } else {
@@ -295,7 +295,7 @@ actual suspend fun saveTempImageUncompressed(image: ImageBitmap, asPng: Boolean)
return try { return try {
val ext = if (asPng) "png" else "jpg" val ext = if (asPng) "png" else "jpg"
tmpDir.mkdir() tmpDir.mkdir()
return File(tmpDir.absolutePath + File.separator + generateNewFileName("IMG", ext)).apply { return File(tmpDir.absolutePath + File.separator + generateNewFileName("IMG", ext, tmpDir)).apply {
outputStream().use { out -> outputStream().use { out ->
image.asAndroidBitmap().compress(if (asPng) Bitmap.CompressFormat.PNG else Bitmap.CompressFormat.JPEG, 85, out) image.asAndroidBitmap().compress(if (asPng) Bitmap.CompressFormat.PNG else Bitmap.CompressFormat.JPEG, 85, out)
out.flush() out.flush()
@@ -304,23 +304,29 @@ actual suspend fun saveTempImageUncompressed(image: ImageBitmap, asPng: Boolean)
ChatModel.filesToDelete.add(this) ChatModel.filesToDelete.add(this)
} }
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, "Util.kt saveTempImageUncompressed error: ${e.message}") Log.e(TAG, "Utils.android saveTempImageUncompressed error: ${e.message}")
null null
} }
} }
actual suspend fun getBitmapFromVideo(uri: URI, timestamp: Long?, random: Boolean): VideoPlayerInterface.PreviewAndDuration { actual suspend fun getBitmapFromVideo(uri: URI, timestamp: Long?, random: Boolean, withAlertOnException: Boolean): VideoPlayerInterface.PreviewAndDuration =
val mmr = MediaMetadataRetriever() try {
mmr.setDataSource(androidAppContext, uri.toUri()) val mmr = MediaMetadataRetriever()
val durationMs = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)?.toLong() mmr.setDataSource(androidAppContext, uri.toUri())
val image = when { val durationMs = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)?.toLong()
timestamp != null -> mmr.getFrameAtTime(timestamp * 1000, MediaMetadataRetriever.OPTION_CLOSEST) val image = when {
random -> mmr.frameAtTime timestamp != null -> mmr.getFrameAtTime(timestamp * 1000, MediaMetadataRetriever.OPTION_CLOSEST)
else -> mmr.getFrameAtTime(0) random -> mmr.frameAtTime
else -> mmr.getFrameAtTime(0)
}
mmr.release()
VideoPlayerInterface.PreviewAndDuration(image?.asImageBitmap(), durationMs, timestamp ?: 0)
} catch (e: Exception) {
Log.e(TAG, "Utils.android getBitmapFromVideo error: ${e.message}")
if (withAlertOnException) showVideoDecodingException()
VideoPlayerInterface.PreviewAndDuration(null, 0, 0)
} }
mmr.release()
return VideoPlayerInterface.PreviewAndDuration(image?.asImageBitmap(), durationMs, timestamp ?: 0)
}
actual fun ByteArray.toBase64StringForPassphrase(): String = Base64.encodeToString(this, Base64.DEFAULT) actual fun ByteArray.toBase64StringForPassphrase(): String = Base64.encodeToString(this, Base64.DEFAULT)
@@ -9,10 +9,12 @@ import dev.icerock.moko.resources.compose.painterResource
import dev.icerock.moko.resources.compose.stringResource import dev.icerock.moko.resources.compose.stringResource
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import chat.simplex.common.model.ChatModel import chat.simplex.common.model.ChatModel
import chat.simplex.common.model.RemoteHostInfo
import chat.simplex.res.MR import chat.simplex.res.MR
@Composable @Composable
actual fun ConnectViaLinkView(m: ChatModel, close: () -> Unit) { actual fun ConnectViaLinkView(m: ChatModel, rh: RemoteHostInfo?, close: () -> Unit) {
// TODO this should close if remote host changes in model
val selection = remember { val selection = remember {
mutableStateOf( mutableStateOf(
runCatching { ConnectViaLinkTab.valueOf(m.controller.appPrefs.connectViaLinkTab.get()!!) }.getOrDefault(ConnectViaLinkTab.SCAN) runCatching { ConnectViaLinkTab.valueOf(m.controller.appPrefs.connectViaLinkTab.get()!!) }.getOrDefault(ConnectViaLinkTab.SCAN)
@@ -31,10 +33,10 @@ actual fun ConnectViaLinkView(m: ChatModel, close: () -> Unit) {
Column(Modifier.weight(1f)) { Column(Modifier.weight(1f)) {
when (selection.value) { when (selection.value) {
ConnectViaLinkTab.SCAN -> { ConnectViaLinkTab.SCAN -> {
ScanToConnectView(m, close) ScanToConnectView(m, rh, close)
} }
ConnectViaLinkTab.PASTE -> { ConnectViaLinkTab.PASTE -> {
PasteToConnectView(m, close) PasteToConnectView(m, rh, close)
} }
} }
} }
@@ -1,5 +1,6 @@
package chat.simplex.common.views.newchat package chat.simplex.common.views.newchat
import android.Manifest
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.util.Log import android.util.Log
import android.view.ViewGroup import android.view.ViewGroup
@@ -19,6 +20,7 @@ import boofcv.android.ConvertCameraImage
import boofcv.factory.fiducial.FactoryFiducial import boofcv.factory.fiducial.FactoryFiducial
import boofcv.struct.image.GrayU8 import boofcv.struct.image.GrayU8
import chat.simplex.common.platform.TAG import chat.simplex.common.platform.TAG
import com.google.accompanist.permissions.rememberPermissionState
import com.google.common.util.concurrent.ListenableFuture import com.google.common.util.concurrent.ListenableFuture
import java.util.concurrent.* import java.util.concurrent.*
@@ -26,6 +28,10 @@ import java.util.concurrent.*
@Composable @Composable
actual fun QRCodeScanner(onBarcode: (String) -> Unit) { actual fun QRCodeScanner(onBarcode: (String) -> Unit) {
val cameraPermissionState = rememberPermissionState(permission = Manifest.permission.CAMERA)
LaunchedEffect(Unit) {
cameraPermissionState.launchPermissionRequest()
}
val context = LocalContext.current val context = LocalContext.current
val lifecycleOwner = LocalLifecycleOwner.current val lifecycleOwner = LocalLifecycleOwner.current
var preview by remember { mutableStateOf<Preview?>(null) } var preview by remember { mutableStateOf<Preview?>(null) }
@@ -4,16 +4,18 @@ import android.Manifest
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import chat.simplex.common.model.ChatModel import chat.simplex.common.model.ChatModel
import chat.simplex.common.model.RemoteHostInfo
import com.google.accompanist.permissions.rememberPermissionState import com.google.accompanist.permissions.rememberPermissionState
@Composable @Composable
actual fun ScanToConnectView(chatModel: ChatModel, close: () -> Unit) { actual fun ScanToConnectView(chatModel: ChatModel, rh: RemoteHostInfo?, close: () -> Unit) {
val cameraPermissionState = rememberPermissionState(permission = Manifest.permission.CAMERA) val cameraPermissionState = rememberPermissionState(permission = Manifest.permission.CAMERA)
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
cameraPermissionState.launchPermissionRequest() cameraPermissionState.launchPermissionRequest()
} }
ConnectContactLayout( ConnectContactLayout(
chatModel = chatModel, chatModel = chatModel,
rh = rh,
incognitoPref = chatModel.controller.appPrefs.incognito, incognitoPref = chatModel.controller.appPrefs.incognito,
close = close close = close
) )
@@ -7,10 +7,10 @@ import chat.simplex.common.model.ServerCfg
import com.google.accompanist.permissions.rememberPermissionState import com.google.accompanist.permissions.rememberPermissionState
@Composable @Composable
actual fun ScanProtocolServer(onNext: (ServerCfg) -> Unit) { actual fun ScanProtocolServer(rhId: Long?, onNext: (ServerCfg) -> Unit) {
val cameraPermissionState = rememberPermissionState(permission = Manifest.permission.CAMERA) val cameraPermissionState = rememberPermissionState(permission = Manifest.permission.CAMERA)
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
cameraPermissionState.launchPermissionRequest() cameraPermissionState.launchPermissionRequest()
} }
ScanProtocolServerLayout(onNext) ScanProtocolServerLayout(rhId, onNext)
} }
@@ -5,7 +5,7 @@
//#include <android/log.h> //#include <android/log.h>
// from the RTS // from the RTS
void hs_init(int * argc, char **argv[]); void hs_init_with_rtsopts(int * argc, char **argv[]);
// from android-support // from android-support
void setLineBuffering(void); void setLineBuffering(void);
@@ -32,15 +32,33 @@ Java_chat_simplex_common_platform_CoreKt_pipeStdOutToSocket(JNIEnv *env, __unuse
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_chat_simplex_common_platform_CoreKt_initHS(__unused JNIEnv *env, __unused jclass clazz) { Java_chat_simplex_common_platform_CoreKt_initHS(__unused JNIEnv *env, __unused jclass clazz) {
hs_init(NULL, NULL); int argc = 5;
char *argv[] = {
"simplex",
"+RTS", // requires `hs_init_with_rtsopts`
"-A16m", // chunk size for new allocations
"-H64m", // initial heap size
"-xn", // non-moving GC
NULL
};
char **pargv = argv;
hs_init_with_rtsopts(&argc, &pargv);
setLineBuffering(); setLineBuffering();
} }
// from simplex-chat // from simplex-chat
typedef long* chat_ctrl; typedef long* chat_ctrl;
/*
When you start using any new function from Haskell libraries,
you have to add the function name to the file libsimplex.dll.def in the root directory.
And do the same by adding it into flake.nix file in the root directory,
Otherwise, Windows and Android libraries cannot be built.
*/
extern char *chat_migrate_init(const char *path, const char *key, const char *confirm, chat_ctrl *ctrl); extern char *chat_migrate_init(const char *path, const char *key, const char *confirm, chat_ctrl *ctrl);
extern char *chat_send_cmd(chat_ctrl ctrl, const char *cmd); extern char *chat_send_cmd(chat_ctrl ctrl, const char *cmd);
extern char *chat_send_remote_cmd(chat_ctrl ctrl, const int rhId, const char *cmd);
extern char *chat_recv_msg(chat_ctrl ctrl); // deprecated extern char *chat_recv_msg(chat_ctrl ctrl); // deprecated
extern char *chat_recv_msg_wait(chat_ctrl ctrl, const int wait); extern char *chat_recv_msg_wait(chat_ctrl ctrl, const int wait);
extern char *chat_parse_markdown(const char *str); extern char *chat_parse_markdown(const char *str);
@@ -86,6 +104,14 @@ Java_chat_simplex_common_platform_CoreKt_chatSendCmd(JNIEnv *env, __unused jclas
return res; return res;
} }
JNIEXPORT jstring JNICALL
Java_chat_simplex_common_platform_CoreKt_chatSendRemoteCmd(JNIEnv *env, __unused jclass clazz, jlong controller, jint rhId, jstring msg) {
const char *_msg = (*env)->GetStringUTFChars(env, msg, JNI_FALSE);
jstring res = (*env)->NewStringUTF(env, chat_send_remote_cmd((void*)controller, rhId, _msg));
(*env)->ReleaseStringUTFChars(env, msg, _msg);
return res;
}
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_chat_simplex_common_platform_CoreKt_chatRecvMsg(JNIEnv *env, __unused jclass clazz, jlong controller) { Java_chat_simplex_common_platform_CoreKt_chatRecvMsg(JNIEnv *env, __unused jclass clazz, jlong controller) {
return (*env)->NewStringUTF(env, chat_recv_msg((void*)controller)); return (*env)->NewStringUTF(env, chat_recv_msg((void*)controller));
@@ -4,18 +4,34 @@
#include <stdint.h> #include <stdint.h>
// from the RTS // from the RTS
void hs_init(int * argc, char **argv[]); void hs_init_with_rtsopts(int * argc, char **argv[]);
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_chat_simplex_common_platform_CoreKt_initHS(JNIEnv *env, jclass clazz) { Java_chat_simplex_common_platform_CoreKt_initHS(JNIEnv *env, jclass clazz) {
hs_init(NULL, NULL); #ifdef _WIN32
int argc = 4;
char *argv[] = {"simplex", "+RTS", "-A16m", "-H64m", NULL}; // non-moving GC is broken on windows with GHC 9.4-9.6.3
#else
int argc = 5;
char *argv[] = {"simplex", "+RTS", "-A16m", "-H64m", "-xn", NULL}; // see android/simplex-api.c for details
#endif
char **pargv = argv;
hs_init_with_rtsopts(&argc, &pargv);
} }
// from simplex-chat // from simplex-chat
typedef long* chat_ctrl; typedef long* chat_ctrl;
/*
When you start using any new function from Haskell libraries,
you have to add the function name to the file libsimplex.dll.def in the root directory.
And do the same by adding it into flake.nix file in the root directory,
Otherwise, Windows and Android libraries cannot be built.
*/
extern char *chat_migrate_init(const char *path, const char *key, const char *confirm, chat_ctrl *ctrl); extern char *chat_migrate_init(const char *path, const char *key, const char *confirm, chat_ctrl *ctrl);
extern char *chat_send_cmd(chat_ctrl ctrl, const char *cmd); extern char *chat_send_cmd(chat_ctrl ctrl, const char *cmd);
extern char *chat_send_remote_cmd(chat_ctrl ctrl, const int rhId, const char *cmd);
extern char *chat_recv_msg(chat_ctrl ctrl); // deprecated extern char *chat_recv_msg(chat_ctrl ctrl); // deprecated
extern char *chat_recv_msg_wait(chat_ctrl ctrl, const int wait); extern char *chat_recv_msg_wait(chat_ctrl ctrl, const int wait);
extern char *chat_parse_markdown(const char *str); extern char *chat_parse_markdown(const char *str);
@@ -98,6 +114,14 @@ Java_chat_simplex_common_platform_CoreKt_chatSendCmd(JNIEnv *env, jclass clazz,
return res; return res;
} }
JNIEXPORT jstring JNICALL
Java_chat_simplex_common_platform_CoreKt_chatSendRemoteCmd(JNIEnv *env, jclass clazz, jlong controller, jint rhId, jstring msg) {
const char *_msg = encode_to_utf8_chars(env, msg);
jstring res = decode_to_utf8_string(env, chat_send_remote_cmd((void*)controller, rhId, _msg));
(*env)->ReleaseStringUTFChars(env, msg, _msg);
return res;
}
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_chat_simplex_common_platform_CoreKt_chatRecvMsg(JNIEnv *env, jclass clazz, jlong controller) { Java_chat_simplex_common_platform_CoreKt_chatRecvMsg(JNIEnv *env, jclass clazz, jlong controller) {
return decode_to_utf8_string(env, chat_recv_msg((void*)controller)); return decode_to_utf8_string(env, chat_recv_msg((void*)controller));

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