Compare commits

...

59 Commits

Author SHA1 Message Date
JRoberts
6f68840b3a 4.5.2: ios 125, Android 100 2023-02-10 11:43:14 +04:00
JRoberts
2eef858db1 ios: update core library 2023-02-10 11:10:35 +04:00
Evgeny Poberezkin
434315fb08 Merge branch 'stable' 2023-02-09 20:53:05 +00:00
Evgeny Poberezkin
9b495e576c readme: update groups 2023-02-09 20:52:44 +00:00
JRoberts
5405f44f54 core: 4.5.2.0 2023-02-09 16:34:44 +04:00
Stanislav Dmitrenko
53b05974c9 android: limit width + height in chat item view (#1920) 2023-02-09 12:00:33 +00:00
JRoberts
3530022152 ios, android: moderated item content types, CIDeleted type (#1919) 2023-02-09 15:10:35 +04:00
Stanislav Dmitrenko
dc6bab7ae6 android: fixed broken autoscroll when a new message is coming (#1917)
* android: fixed broken autoscroll when a new message is coming

* spelling
2023-02-08 23:10:56 +00:00
Stanislav Dmitrenko
c9b4ce457e android: prevent race when opening chat (#1914)
* android: prevent race when opening chat

* different way of doing things

* change

* change
2023-02-08 19:25:51 +00:00
JRoberts
bd3325a889 core: show/keep message as moderated for moderator (#1916) 2023-02-08 22:29:36 +04:00
JRoberts
9e347484eb core: avoid using wickAckMessage handler on messages leading to connection deletion (#1915) 2023-02-08 21:23:53 +04:00
ishi_sama
894af0602d docs: french (#1905)
* Lang subfolder ; SERVER_fr.md ; fix minor typos

* fix the fix

* fix img src

* CONTRIBUTING_fr

* SQL_fr ; fix rev date

* WEBRTC_fr.md ; rev date

* CLI_fr ; rev date

* fix table content link and sum img src

* fix

* fixing the fix

am i dumb?

* polishing...

* README_fr.md (save)

* Update README_fr.md

* README_fr ; starting SIMPLEX_FR ; link fix

* update README (en+fr)

* Blog README_fr ; translators link

* typo

* SIMPLEX_fr ; fixes

* last fixes

* rename folder

* rename files/links

* update line

* remove ...

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-02-08 14:03:52 +00:00
Stanislav Dmitrenko
aa6011a196 android: prevent race when changing active user (#1913) 2023-02-08 13:21:55 +00:00
Stanislav Dmitrenko
f24035a99d android: prevent showing system alert after start (Android 13+) (#1909)
* android: prevent showing system alert after start (Android 13+)

* refactor

* added comments and renamed function

* rename

* rename

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-02-08 10:48:19 +00:00
Stanislav Dmitrenko
c006b8150f ios: ask permission to open profiles (#1910) 2023-02-08 10:39:41 +00:00
Evgeny Poberezkin
9e4499de6d core: allow admins/owners delete member messages (#1869)
* core: allow admins/owners delete member messages

* allow message deletion to admins/owners

* deleted by types, schema

* check role

* fix test, view

* view, tests

* comment

* test timed deletion events

* refactor

* refactor

* refactor

---------

Co-authored-by: JRoberts <8711996+jr-simplex@users.noreply.github.com>
2023-02-08 11:08:53 +04:00
Evgeny Poberezkin
a018e4a581 docs: translation guide (#1911)
* docs: translations

* add doc

* add images, corrections

* spellcheck

* link to translation guide from readme

* change image

* images
2023-02-07 21:57:51 +00:00
Stanislav Dmitrenko
d29fd93ea7 docs: view files from private data directory of Android app (#1907)
* docs: view files from private data directory of Android app

* naming

* spelling

* spelling

* change
2023-02-07 15:17:10 +00:00
Stanislav Dmitrenko
b30c7af3a3 mobile: including fully localized languages only (#1908)
* mobile: including fully localized languages only

* better place for code

* ios: including fully localized languages only

* Revert "ios: including fully localized languages only"

This reverts commit 42a0334d83.
2023-02-07 15:16:34 +00:00
Stanislav Dmitrenko
2798671d22 android: show alert when decode exception happens (#1906) 2023-02-07 12:08:54 +00:00
Stanislav Dmitrenko
0339b399f7 ios: don't go back when system alert appears (#1903) 2023-02-06 16:33:45 +00:00
Stanislav Dmitrenko
d048962959 ios: Fixed screenshot size (#1902) 2023-02-06 16:00:29 +00:00
Stanislav Dmitrenko
4af91c4cae android: fixed size for exported QR code (#1901)
* android: fixed size for exported QR code

* border

* automatic version

* modifier

* make image instead of screenshot

* code folding

* don't use deprecated method

* function refactor

* dropped unneeded variable
2023-02-06 15:34:49 +00:00
Stanislav Dmitrenko
8a445ece90 ios: colored and clickable qr code with logo (#1885)
* ios: colored and clickable qr code with logo

* size of circle

* same padding as in android

* add padding to logo

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-02-06 08:45:56 +00:00
Stanislav Dmitrenko
5082f5b4a4 android: colored and clickable qr code with logo (#1884)
* android: colored and clickable qr code with logo

* save qr code as jpg for better quality

* bigger logo

* bigger logo (0.16f), low error correction (QR scans ok with up to 0.26f circle size)

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-02-06 08:45:40 +00:00
Evgeny Poberezkin
c8fae0ec43 blog: typo 2023-02-05 23:46:42 +00:00
Evgeny Poberezkin
d9a8d333f7 4.5.1: Android 99, iOS 124 2023-02-05 23:37:58 +00:00
Evgeny Poberezkin
73f8c543e3 translations (#1900)
* Translated using Weblate (Czech)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 26.7% (255 of 954 strings)

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

* Translated using Weblate (French)

Currently translated at 100.0% (954 of 954 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% (895 of 895 strings)

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

* Translated using Weblate (Japanese)

Currently translated at 8.5% (82 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 24.4% (219 of 895 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 1.8% (18 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 56.4% (538 of 953 strings)

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

* Translated using Weblate (Czech)

Currently translated at 1.6% (15 of 891 strings)

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

* Added translation using Weblate (Croatian)

* Added translation using Weblate (Croatian)

* Translated using Weblate (Dutch)

Currently translated at 63.6% (607 of 953 strings)

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

* Translated using Weblate (Czech)

Currently translated at 99.6% (950 of 953 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 66.1% (589 of 891 strings)

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

* 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/

* ios: import localizations

* ios: export localizations

---------

Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: xqhjay <137847720@qq.com>
Co-authored-by: Ophiushi <Ophiushi@users.noreply.hosted.weblate.org>
Co-authored-by: tomato potato <4ryo49@protonmail.com>
Co-authored-by: Albert Bob <vicdorke@gmail.com>
Co-authored-by: Bdd55oo <giggzuv9z.eofjx@aleeas.com>
Co-authored-by: John m <jvanmanen@gmail.com>
Co-authored-by: Mehmed <pajazetovicmeho@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
2023-02-05 22:36:52 +00:00
Evgeny Poberezkin
14945a9296 ios: update core library 2023-02-05 22:30:03 +00:00
Evgeny Poberezkin
155ffd16ec core: 4.5.1.0 2023-02-05 22:06:27 +00:00
sh
1eb1e52912 call.ts: include udp stun/turn (#1892)
* call.ts: include udp stun/turn

* update JS

* show protocol, support TURNS

* mobile: add turn via UDP, remove protocol from view

* remove enums for protocol strings in ICE candidates

* 0.2.3

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-02-05 21:57:50 +00:00
Evgeny Poberezkin
af173ee5c4 blog: v4.5 (#1886)
* blog: v4.5

* update post, images

* update readme, post
2023-02-05 13:53:41 +00:00
Evgeny Poberezkin
06a2f7e4da mobile: remove option "transfer images faster" (#1891) 2023-02-05 11:25:31 +00:00
Evgeny Poberezkin
958299784d core: update simplexmq (more strict transport host parser 2023-02-04 23:31:01 +00:00
Evgeny Poberezkin
49b6979ff0 core: update simplexmq (not to fail batch subscriptions), terminal: log contact errors with -c option (#1890) 2023-02-04 23:13:20 +00:00
Evgeny Poberezkin
3c493db613 mobile: use TCP for ICE requests of WebRTC calls (#1888)
* ios: support query string parameters in ICE server addresses

* android: support query params in ICE server address, add transport=TCP to default servers
2023-02-04 15:44:39 +00:00
Evgeny Poberezkin
86cc85b3a5 mobile: change default of "transfer images faster/inline" to off, mark as BETA (#1889)
* mobile: change default of "transfer images faster/inline" to off, mark as BETA

* ios: import localizations
2023-02-04 15:19:12 +00:00
Evgeny Poberezkin
0427d2e578 core: prevent failure to acknowledge a group message in case its parsing or saving fails (potential cause for stuck delivery) (#1887) 2023-02-04 12:25:11 +00:00
Evgeny Poberezkin
c90d911d2a 4.5.0: Android 98, iOS 123 2023-02-03 15:19:26 +00:00
Evgeny Poberezkin
2473d14baa core: 4.5.0.4, update simplexmq 2023-02-03 11:32:32 +00:00
Evgeny Poberezkin
a36f2147d8 mobile: current profile button in profile menu opens settings (#1882) 2023-02-03 11:22:17 +00:00
Evgeny Poberezkin
3837e92556 ios: fix advanced network config (#1881) 2023-02-03 11:17:56 +00:00
Evgeny Poberezkin
76505afff2 ios: import/export translations 2023-02-02 23:28:31 +00:00
Evgeny Poberezkin
89c9a01b20 mobile: translations (#1878)
* Translated using Weblate (Russian)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (German)

Currently translated at 98.5% (882 of 895 strings)

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

* Translated using Weblate (Russian)

Currently translated at 100.0% (895 of 895 strings)

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

* Translated using Weblate (French)

Currently translated at 98.5% (882 of 895 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 98.5% (882 of 895 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 42.1% (402 of 954 strings)

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

* Translated using Weblate (Czech)

Currently translated at 3.8% (37 of 954 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (954 of 954 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% (895 of 895 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% (954 of 954 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% (895 of 895 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 3.9% (38 of 954 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 100.0% (954 of 954 strings)

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

---------

Co-authored-by: John m <jvanmanen@gmail.com>
Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: random r <epsilin@yopmail.com>
Co-authored-by: mlanp <github@lang.xyz>
2023-02-02 23:21:08 +00:00
Evgeny Poberezkin
68517cf852 android: disable chat preferences when chat is stopped (#1877) 2023-02-02 21:27:22 +00:00
Stanislav Dmitrenko
fbbad55a0f android: Fix constraints of Compose that could crash the app (#1876)
* android: Fix constraints of Compose that could crash the app

* made constant
2023-02-02 19:46:33 +00:00
Stanislav Dmitrenko
bcca27bfdb ios: show notifications for different users (#1874)
* ios: show notifications for different users

* refactore

* terminate background taks on chat item update

* refactor

* refactor2

* refactor3

* refactor 4

* refactor5

* fix chat item update in Android

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-02-02 16:09:36 +00:00
Evgeny Poberezkin
c55a7692c5 4.5.0-beta.3: Android 97, iOS 122 2023-02-02 12:16:58 +00:00
Evgeny Poberezkin
a8aa829e4c android: what is new in v45, ios: update texts 2023-02-02 11:20:37 +00:00
Evgeny Poberezkin
d5af03ce18 ios: import/export localizations (#1873)
* ios: import localizations

* ios: export localizations
2023-02-02 10:43:18 +00:00
Evgeny Poberezkin
101ef7a81a translations: updates for user profiles, new languages (#1872)
* Added translation using Weblate (Spanish)

* Added translation using Weblate (Dutch)

* Added translation using Weblate (Dutch)

* Translated using Weblate (Russian)

Currently translated at 100.0% (936 of 936 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% (878 of 878 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 11.0% (103 of 936 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (936 of 936 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% (878 of 878 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 13.8% (130 of 936 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 14.9% (131 of 878 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 13.7% (129 of 936 strings)

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

* Added translation using Weblate (Japanese)

* Added translation using Weblate (Japanese)

* Added translation using Weblate (Hindi)

* Added translation using Weblate (Hindi)

* Added translation using Weblate (Czech)

* Added translation using Weblate (Czech)

* Added translation using Weblate (Polish)

* Added translation using Weblate (Polish)

* Added translation using Weblate (Portuguese (Brazil))

* Added translation using Weblate (Portuguese (Brazil))

* Added translation using Weblate (Spanish)

* Added translation using Weblate (Dutch)

* Added translation using Weblate (Dutch)

* Translated using Weblate (Russian)

Currently translated at 100.0% (936 of 936 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% (878 of 878 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 11.0% (103 of 936 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (936 of 936 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% (878 of 878 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 13.8% (130 of 936 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 14.9% (131 of 878 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 13.7% (129 of 936 strings)

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

* Added translation using Weblate (Japanese)

* Added translation using Weblate (Japanese)

* Added translation using Weblate (Hindi)

* Added translation using Weblate (Hindi)

* Added translation using Weblate (Czech)

* Added translation using Weblate (Czech)

* Added translation using Weblate (Polish)

* Added translation using Weblate (Polish)

* Added translation using Weblate (Portuguese (Brazil))

* Added translation using Weblate (Portuguese (Brazil))

* Translated using Weblate (French)

Currently translated at 100.0% (936 of 936 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% (878 of 878 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 17.3% (162 of 936 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 16.2% (143 of 878 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 15.7% (147 of 936 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (939 of 939 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% (878 of 878 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 21.9% (206 of 939 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 20.7% (182 of 878 strings)

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

* Translated using Weblate (French)

Currently translated at 100.0% (939 of 939 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 24.3% (229 of 939 strings)

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

* Translated using Weblate (Hindi)

Currently translated at 7.8% (74 of 939 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 31.2% (294 of 940 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (940 of 940 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% (940 of 940 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% (940 of 940 strings)

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

* Translated using Weblate (Hindi)

Currently translated at 12.6% (119 of 940 strings)

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

* Translated using Weblate (Hindi)

Currently translated at 13.5% (127 of 940 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 22.7% (214 of 940 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 21.7% (191 of 878 strings)

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

* Translated using Weblate (Japanese)

Currently translated at 2.5% (24 of 940 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 23.6% (222 of 940 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 24.3% (214 of 878 strings)

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

---------

Co-authored-by: sith-on-mars <groguko36@pm.me>
Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: John m <jvanmanen@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Ophiushi <Ophiushi@users.noreply.hosted.weblate.org>
Co-authored-by: random r <epsilin@yopmail.com>
Co-authored-by: Raman <translations.0l5zc@simplelogin.com>
Co-authored-by: tomato potato <4ryo49@protonmail.com>
2023-02-02 10:30:40 +00:00
Evgeny Poberezkin
71daeed81a ios: what is new in v4.5 2023-02-02 10:11:11 +00:00
Evgeny Poberezkin
d44324eb4d readme: update weblate link 2023-02-02 09:47:39 +00:00
Evgeny Poberezkin
93d2ef66cf readme: translations (#1871) 2023-02-02 09:41:53 +00:00
Evgeny Poberezkin
8a78943e94 blog: v4.5 release announcement page 2023-02-02 09:00:34 +00:00
Evgeny Poberezkin
d0f0013755 core: 4.5.0.3 2023-02-02 08:20:12 +00:00
Stanislav Dmitrenko
f22ee1a6cf mobile: prevent WebRTC call failure/hanging when webview "failed" state happens before 30 sec timeout (#1866)
* mobile: do not end calls

* better way of continue connection and end with timeout

* making data classes instead of classes for making logs informative

* refactor

* update webrtc package version

* refactor

* fix

* clear conneciton timeout on disconnection

* refactor

* v0.2.1

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-02-01 19:23:28 +00:00
Evgeny Poberezkin
4a58ca60ac core: split tests (#1870) 2023-02-01 17:21:13 +00:00
Evgeny Poberezkin
b206868730 core: add grop member role "observer" (#1868)
* core: add grop member role "observer"

* disable observer role until supported by most clients
2023-02-01 13:57:39 +00:00
141 changed files with 41682 additions and 6849 deletions

View File

@@ -1,3 +1,5 @@
| Updated 07.02.2023 | Languages: EN, [FR](/docs/lang/fr/README.md) |
<img src="images/simplex-chat-logo.svg" alt="SimpleX logo" width="100%">
# SimpleX - the first messaging platform that has no user identifiers of any kind - 100% private by design!
@@ -43,6 +45,7 @@
- [For developers](#for-developers)
- [Roadmap](#roadmap)
- [Join a user group](#join-a-user-group)
- [Translate the apps](#translate-the-apps)
- [Contribute](#contribute)
- [Help us with donations](#help-us-with-donations)
- [Disclaimers, Security contact, License](#disclaimers)
@@ -75,16 +78,18 @@ You can use SimpleX with your own servers and still communicate with people usin
## Frequently asked questions
1. _How SimpleX can deliver messages without any user identifiers?_ See [v2 release annoucement](./blog/20220511-simplex-chat-v2-images-files.md#the-first-messaging-platform-without-user-identifiers) explaining how SimpleX works.
1. _How SimpleX can deliver messages without any user identifiers?_ See [v2 release announcement](./blog/20220511-simplex-chat-v2-images-files.md#the-first-messaging-platform-without-user-identifiers) explaining how SimpleX works.
2. _Why should I not just use Signal?_ Signal is a centralised platform that uses phone numbers to identify its users and their contacts. It means that while the content of your messages on Signal is protected with robust end-to-end encryption, there is a large amount of meta-data visible to Signal - who you talk with and when.
2. _Why should I not just use Signal?_ Signal is a centralized platform that uses phone numbers to identify its users and their contacts. It means that while the content of your messages on Signal is protected with robust end-to-end encryption, there is a large amount of meta-data visible to Signal - who you talk with and when.
3. _How is it different from Matrix, Session, Ricochet, Cwtch, etc., that also don't require user identites?_ Although these platforms do not require a _real identity_, they do rely on anonymous user identities to deliver messages it can be, for example, an identity key or a random number. Using a persistent user identity, even anonymous, creates a risk that user's connection graph becomes known to the observers and/or service providers, and it can lead to de-anonymizing some users. If the same user profile is used to connect to two different people via any messenger other than SimpleX, these two people can confirm if they are connected to the same person - they would use the same user identifier in the messages. With SimpleX there is no meta-data in common between your conversations with different contacts - the quality that no other messaging platform has.
3. _How is it different from Matrix, Session, Ricochet, Cwtch, etc., that also don't require user identities?_ Although these platforms do not require a _real identity_, they do rely on anonymous user identities to deliver messages it can be, for example, an identity key or a random number. Using a persistent user identity, even anonymous, creates a risk that user's connection graph becomes known to the observers and/or service providers, and it can lead to de-anonymizing some users. If the same user profile is used to connect to two different people via any messenger other than SimpleX, these two people can confirm if they are connected to the same person - they would use the same user identifier in the messages. With SimpleX there is no meta-data in common between your conversations with different contacts - the quality that no other messaging platform has.
## News and updates
Recent updates:
[Feb 04, 2023. v4.5 released - with multiple user profiles, message draft, transport isolation and Italian interface](./blog/20230204-simplex-chat-v4-5-user-chat-profiles.md).
[Jan 03, 2023. v4.4 released - with disappearing messages, "live" messages, connection security verifications, GIFs and stickers and with French interface language](./blog/20230103-simplex-chat-v4.4-disappearing-messages.md).
[Dec 06, 2022. November reviews and v4.3 released - with instant voice messages, irreversible deletion of sent messages and improved server configuration](./blog/20221206-simplex-chat-v4.3-voice-messages.md).
@@ -93,8 +98,6 @@ Recent updates:
[Sep 28, 2022. v4.0: encrypted local chat database and many other changes](./blog/20220928-simplex-chat-v4-encrypted-database.md).
[Sep 1, 2022. v3.2: incognito mode, support .onion server hostnames, setting contact names, changing color scheme, etc. Implementation audit is arranged for October!](./blog/20220901-simplex-chat-v3.2-incognito-mode.md).
[All updates](./blog)
## Make a private connection
@@ -137,7 +140,7 @@ SimpleX Chat is a work in progress we are releasing improvements as they are
What is already implemented:
1. Instead of user profile identifiers used by all other platforms, even the most private ones, SimpleX uses pairwise per-queue identifiers (2 addresses for each unidirectional message queue, with an optional 3rd address for push notificaitons on iOS, 2 queues in each connection between the users). It makes observing the network graph on the application level more difficult, as for `n` users there can be up to `n * (n-1)` message queues.
1. Instead of user profile identifiers used by all other platforms, even the most private ones, SimpleX uses pairwise per-queue identifiers (2 addresses for each unidirectional message queue, with an optional 3rd address for push notifications on iOS, 2 queues in each connection between the users). It makes observing the network graph on the application level more difficult, as for `n` users there can be up to `n * (n-1)` message queues.
2. End-to-end encryption in each message queue using [NaCl cryptobox](https://nacl.cr.yp.to/box.html). This is added to allow redundancy in the future (passing each message via several servers), to avoid having the same ciphertext in different queues (that would only be visible to the attacker if TLS is compromised). The encryption keys used for this encryption are not rotated, instead we are planning to rotate the queues. Curve25519 keys are used for key negotiation.
3. [Double ratchet](https://signal.org/docs/specifications/doubleratchet/) end-to-end encryption in each conversation between two users (or group members). This is the same algorithm that is used in Signal and many other messaging apps; it provides OTR messaging with forward secrecy (each message is encrypted by its own ephemeral key), break-in recovery (the keys are frequently re-negotiated as part of the message exchange). Two pairs of Curve448 keys are used for the initial key agreement, initiating party passes these keys via the connection link, accepting side - in the header of the confirmation message.
4. Additional layer of encryption using NaCL cryptobox for the messages delivered from the server to the recipient. This layer avoids having any ciphertext in common between sent and received traffic of the server inside TLS (and there are no identifiers in common as well).
@@ -147,10 +150,11 @@ What is already implemented:
8. To protect against replay attacks SimpleX servers require [tlsunique channel binding](https://www.rfc-editor.org/rfc/rfc5929.html) as session ID in each client command signed with per-queue ephemeral key.
9. To protect your IP address all SimpleX Chat clients support accessing messaging servers via Tor - see [v3.1 release announcement](./blog/20220808-simplex-chat-v3.1-chat-groups.md) for more details.
10. Local database encryption with passphrase - your contacts, groups and all sent and received messages are stored encrypted. If you used SimpleX Chat before v4.0 you need to enable the encryption via the app settings.
11. Transport isolation - different TCP connections and Tor circuits are used for traffic of different user profiles, optionally - for different contacts and group member connections.
We plan to add soon:
1. Message queue rotation. Currently the queues created between two users are used until the contact is deleted, providing a long-term pairwise identifiers of the conversation. We are planning to add queue rotation to make these identifiers temporary and rotate based on some schedule TBC (e.g., every X messages, or every X hours/days).
1. Automatic message queue rotation. Currently the queues created between two users are used until the queue is manually changed by the user or contact is deleted. We are planning to add automatic queue rotation to make these identifiers temporary and rotate based on some schedule TBC (e.g., every X messages, or every X hours/days).
2. Local files encryption. Currently the images and files you send and receive are stored in the app unencrypted, you can delete them via `Settings / Database passphrase & export`.
3. Message "mixing" - adding latency to message delivery, to protect against traffic correlation by message time.
@@ -160,7 +164,7 @@ You can:
- use SimpleX Chat library to integrate chat functionality into your mobile apps.
- create chat bots and services in Haskell - see [simple](./apps/simplex-bot/) and more [advanced chat bot example](./apps/simplex-bot-advanced/).
- create chat bots and services in any language running SimpleX Chat terminal CLI as a local WebSocket server. See [TypeScript SimpleX Chat client](./packages/simplex-chat-client/) and [JavaScipt chat bot example](./packages/simplex-chat-client/typescript/examples/squaring-bot.js).
- create chat bots and services in any language running SimpleX Chat terminal CLI as a local WebSocket server. See [TypeScript SimpleX Chat client](./packages/simplex-chat-client/) and [JavaScript chat bot example](./packages/simplex-chat-client/typescript/examples/squaring-bot.js).
- run [simplex-chat terminal CLI](./docs/CLI.md) to execute individual chat commands, e.g. to send messages as part of shell script execution.
If you are considering developing with SimpleX platform please get in touch for any advice and support.
@@ -195,16 +199,19 @@ If you are considering developing with SimpleX platform please get in touch for
- ✅ Disappearing messages (with recipient opt-in per-contact).
- ✅ "Live" messages.
- ✅ Contact verification via a separate out-of-band channel.
- 🏗 Multiple user profiles in the same chat database.
- 🏗 Optionally avoid re-using the same TCP session for multiple connections.
- Multiple user profiles in the same chat database.
- Optionally avoid re-using the same TCP session for multiple connections.
- ✅ Preserve message drafts.
- 🏗 File server to optimize for efficient and private sending of large files.
- 🏗 Improved audio & video calls.
- 🏗 SMP queue redundancy and rotation (manual is supported).
- 🏗 Reduced battery and traffic usage in large groups.
- 🏗 Preserve message drafts.
- 🏗 Support older Android OS and 32-bit CPUs.
- Ephemeral/disappearing/OTR conversations with the existing contacts.
- Access password/pin (with optional alternative access password).
- Local app files encryption.
- Video messages.
- Improved navigation and search in the conversation (expand and scroll to quoted message, scroll to search results, etc.).
- Message delivery confirmation (with sender opt-in or opt-out per contact, TBC).
- Feeds/broadcasts.
- Web widgets for custom interactivity in the chats.
@@ -214,15 +221,13 @@ If you are considering developing with SimpleX platform please get in touch for
- Privacy-preserving identity server for optional DNS-based contact/group addresses to simplify connection and discovery, but not used to deliver messages:
- keep all your contacts and groups even if you lose the domain.
- the server doesn't have information about your contacts and groups.
- Channels server for large groups and broadcast channels.
- Hosting server for large groups, communities and public channels.
- Message delivery relay for senders (to conceal IP address from the recipients' servers and to reduce the traffic).
- High capacity multi-node SMP relays.
## Join a user group
You can join a general English-speaking group: [#SimpleX-Group](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FcIS0gu1h0Y8pZpQkDaSz7HZGSHcKpMB9%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAKzzWAJYrVt1zdgRp4pD3FBst6eK7233DJeNElENLJRA%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%228mazMhefXoM5HxWBfZnvwQ%3D%3D%22%7D). Just bear in mind that it has ~300 members now, and that it is fully decentralized, so sending a message and connecting to all members in this group will take some time, only join it if you:
- want to see how larger groups work.
- traffic is not a concern (sending each message is ~5mb).
You can also join a new and smaller English-speaking group if you want to ask questions without too much traffic: [#SimpleX-Group-2](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FQP8zaGjjmlXV-ix_Er4JgJ0lNPYGS1KX%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEApAgBkRZ3x12ayZ7sHrjHQWNMvqzZpWUgM_fFCUdLXwo%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xWpPXEZZsQp_F7vwAcAYDw%3D%3D%22%7D)
You can join an English-speaking group if you want to ask any questions: [#SimpleX-Group-2](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FQP8zaGjjmlXV-ix_Er4JgJ0lNPYGS1KX%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEApAgBkRZ3x12ayZ7sHrjHQWNMvqzZpWUgM_fFCUdLXwo%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xWpPXEZZsQp_F7vwAcAYDw%3D%3D%22%7D)
There are also several groups in languages other than English, that we have the apps interface translated into. These groups are for testing, and asking questions to other SimpleX Chat users. We do not always answer questions there, so please ask them in one of the English-speaking groups.
@@ -235,11 +240,24 @@ You can join these groups either by opening these links in the app or by opening
Join via the app to share what's going on and ask any questions!
## Translate the apps
Thanks to our users and [Weblate](https://hosted.weblate.org/engage/simplex-chat/), SimpleX Chat apps are translated to many other languages. Join our translators to help SimpleX grow faster!
Current interface languages:
- English (development language)
- German: [@mlanp](https://github.com/mlanp)
- French: [@ishi_sama](https://github.com/ishi-sama)
- Italian: [@unbranched](https://github.com/unbranched)
- Russian: project team
Languages in progress: Chinese, Hindi, Czech, Japanese, Dutch and [many others](https://hosted.weblate.org/projects/simplex-chat/#languages). We will be adding more languages as some of the already added are completed please suggest new languages, review the [translation guide](./docs/TRANSLATIONS.md) and get in touch with us!
## Contribute
We would love to have you join the development! You can contribute to SimpleX Chat with:
- translate UI to your language - we are using [Weblate](https://hosted.weblate.org/projects/simplex-chat/) to translate the interface, please get in touch if you want to contribute!
- translate website homepage - there is a lot of content we would like to share, it would help to bring the new users.
- writing a tutorial or recipes about hosting servers, chat bot automations, etc.
- developing features - please connect to us via chat so we can help you get started.

View File

@@ -11,8 +11,8 @@ android {
applicationId "chat.simplex.app"
minSdk 29
targetSdk 32
versionCode 96
versionName "4.5-beta.2"
versionCode 100
versionName "4.5.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk {
@@ -76,6 +76,11 @@ android {
}
jniLibs.useLegacyPackaging = compression_level != "0"
}
def isRelease = gradle.getStartParameter().taskNames.find({ it.toLowerCase().contains("release") }) != null
if (isRelease) {
// Comma separated list of languages that will be included in the apk
android.defaultConfig.resConfigs("en", "ru", "de", "fr", "it")
}
}
dependencies {

View File

@@ -22,10 +22,12 @@ var TransformOperation;
TransformOperation["Decrypt"] = "decrypt";
})(TransformOperation || (TransformOperation = {}));
let activeCall;
let answerTimeout = 30000;
const processCommand = (function () {
const defaultIceServers = [
{ urls: ["stun:stun.simplex.im:443"] },
{ urls: ["turn:turn.simplex.im:443"], username: "private", credential: "yleob6AVkiNI87hpR94Z" },
{ urls: ["turn:turn.simplex.im:443?transport=udp"], username: "private", credential: "yleob6AVkiNI87hpR94Z" },
{ urls: ["turn:turn.simplex.im:443?transport=tcp"], username: "private", credential: "yleob6AVkiNI87hpR94Z" },
];
function getCallConfig(encodedInsertableStreams, iceServers, relay) {
return {
@@ -100,9 +102,16 @@ const processCommand = (function () {
const iceCandidates = getIceCandidates(pc, config);
const call = { connection: pc, iceCandidates, localMedia: mediaType, localCamera, localStream, remoteStream, aesKey, useWorker };
await setupMediaStreams(call);
let connectionTimeout = setTimeout(connectionHandler, answerTimeout);
pc.addEventListener("connectionstatechange", connectionStateChange);
return call;
async function connectionStateChange() {
// "failed" means the second party did not answer in time (15 sec timeout in Chrome WebView)
// See https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/p2p/base/p2p_constants.cc;l=70)
if (pc.connectionState !== "failed")
connectionHandler();
}
async function connectionHandler() {
sendMessageToNative({
resp: {
type: "connection",
@@ -115,6 +124,7 @@ const processCommand = (function () {
},
});
if (pc.connectionState == "disconnected" || pc.connectionState == "failed") {
clearConnectionTimeout();
pc.removeEventListener("connectionstatechange", connectionStateChange);
if (activeCall) {
setTimeout(() => sendMessageToNative({ resp: { type: "ended" } }), 0);
@@ -122,6 +132,7 @@ const processCommand = (function () {
endCall();
}
else if (pc.connectionState == "connected") {
clearConnectionTimeout();
const stats = (await pc.getStats());
for (const stat of stats.values()) {
const { type, state } = stat;
@@ -141,6 +152,12 @@ const processCommand = (function () {
}
}
}
function clearConnectionTimeout() {
if (connectionTimeout) {
clearTimeout(connectionTimeout);
connectionTimeout = undefined;
}
}
}
function serialize(x) {
return LZString.compressToBase64(JSON.stringify(x));

View File

@@ -101,8 +101,19 @@ class SimplexApp: Application(), LifecycleEventObserver {
isAppOnForeground = true
if (chatModel.chatRunning.value == true) {
kotlin.runCatching {
val chats = chatController.apiGetChats()
chatModel.updateChats(chats)
val currentUserId = chatModel.currentUser.value?.userId
val chats = ArrayList(chatController.apiGetChats())
/** Active user can be changed in background while [ChatController.apiGetChats] is executing */
if (chatModel.currentUser.value?.userId == currentUserId) {
val currentChatId = chatModel.chatId.value
val oldStats = if (currentChatId != null) chatModel.getChat(currentChatId)?.chatStats else null
if (oldStats != null) {
val indexOfCurrentChat = chats.indexOfFirst { it.id == currentChatId }
/** Pass old chatStats because unreadCounter can be changed already while [ChatController.apiGetChats] is executing */
if (indexOfCurrentChat >= 0) chats[indexOfCurrentChat] = chats[indexOfCurrentChat].copy(chatStats = oldStats)
}
chatModel.updateChats(chats)
}
}.onFailure { Log.e(TAG, it.stackTraceToString()) }
}
}

View File

@@ -1257,6 +1257,8 @@ data class ChatItem (
is CIContent.SndGroupFeature -> showNtfDir
is CIContent.RcvChatFeatureRejected -> showNtfDir
is CIContent.RcvGroupFeatureRejected -> showNtfDir
is CIContent.SndModerated -> true
is CIContent.RcvModerated -> true
is CIContent.InvalidJSON -> false
}
@@ -1271,14 +1273,14 @@ data class ChatItem (
status: CIStatus = CIStatus.SndNew(),
quotedItem: CIQuote? = null,
file: CIFile? = null,
itemDeleted: Boolean = false,
itemDeleted: CIDeleted? = null,
itemEdited: Boolean = false,
itemTimed: CITimed? = null,
editable: Boolean = true
) =
ChatItem(
chatDir = dir,
meta = CIMeta.getSample(id, ts, text, status, itemDeleted, itemEdited, null, editable),
meta = CIMeta.getSample(id, ts, text, status, itemDeleted, itemEdited, itemTimed, editable),
content = CIContent.SndMsgContent(msgContent = MsgContent.MCText(text)),
quotedItem = quotedItem,
file = file
@@ -1293,7 +1295,7 @@ data class ChatItem (
) =
ChatItem(
chatDir = CIDirection.DirectRcv(),
meta = CIMeta.getSample(id, Clock.System.now(), text, CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
meta = CIMeta.getSample(id, Clock.System.now(), text, CIStatus.RcvRead()),
content = CIContent.RcvMsgContent(msgContent = MsgContent.MCFile(text)),
quotedItem = null,
file = CIFile.getSample(fileName = fileName, fileSize = fileSize, fileStatus = fileStatus)
@@ -1308,7 +1310,7 @@ data class ChatItem (
) =
ChatItem(
chatDir = dir,
meta = CIMeta.getSample(id, ts, text, status, itemDeleted = false, itemEdited = false, editable = false),
meta = CIMeta.getSample(id, ts, text, status),
content = CIContent.RcvDeleted(deleteMode = CIDeleteMode.cidmBroadcast),
quotedItem = null,
file = null
@@ -1317,7 +1319,7 @@ data class ChatItem (
fun getGroupInvitationSample(status: CIGroupInvitationStatus = CIGroupInvitationStatus.Pending) =
ChatItem(
chatDir = CIDirection.DirectRcv(),
meta = CIMeta.getSample(1, Clock.System.now(), "received invitation to join group team as admin", CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
meta = CIMeta.getSample(1, Clock.System.now(), "received invitation to join group team as admin", CIStatus.RcvRead()),
content = CIContent.RcvGroupInvitation(groupInvitation = CIGroupInvitation.getSample(status = status), memberRole = GroupMemberRole.Admin),
quotedItem = null,
file = null
@@ -1326,7 +1328,7 @@ data class ChatItem (
fun getGroupEventSample() =
ChatItem(
chatDir = CIDirection.DirectRcv(),
meta = CIMeta.getSample(1, Clock.System.now(), "group event text", CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
meta = CIMeta.getSample(1, Clock.System.now(), "group event text", CIStatus.RcvRead()),
content = CIContent.RcvGroupEventContent(rcvGroupEvent = RcvGroupEvent.MemberAdded(groupMemberId = 1, profile = Profile.sampleData)),
quotedItem = null,
file = null
@@ -1336,7 +1338,7 @@ data class ChatItem (
val content = CIContent.RcvChatFeature(feature = feature, enabled = enabled, param = null)
return ChatItem(
chatDir = CIDirection.DirectRcv(),
meta = CIMeta.getSample(1, Clock.System.now(), content.text, CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
meta = CIMeta.getSample(1, Clock.System.now(), content.text, CIStatus.RcvRead()),
content = content,
quotedItem = null,
file = null
@@ -1356,7 +1358,7 @@ data class ChatItem (
itemStatus = CIStatus.RcvRead(),
createdAt = Clock.System.now(),
updatedAt = Clock.System.now(),
itemDeleted = false,
itemDeleted = null,
itemEdited = false,
itemTimed = null,
itemLive = false,
@@ -1376,7 +1378,7 @@ data class ChatItem (
itemStatus = CIStatus.RcvRead(),
createdAt = Clock.System.now(),
updatedAt = Clock.System.now(),
itemDeleted = false,
itemDeleted = null,
itemEdited = false,
itemTimed = null,
itemLive = true,
@@ -1421,7 +1423,7 @@ data class CIMeta (
val itemStatus: CIStatus,
val createdAt: Instant,
val updatedAt: Instant,
val itemDeleted: Boolean,
val itemDeleted: CIDeleted?,
val itemEdited: Boolean,
val itemTimed: CITimed?,
val itemLive: Boolean?,
@@ -1446,7 +1448,7 @@ data class CIMeta (
companion object {
fun getSample(
id: Long, ts: Instant, text: String, status: CIStatus = CIStatus.SndNew(),
itemDeleted: Boolean = false, itemEdited: Boolean = false, itemTimed: CITimed? = null, itemLive: Boolean = false, editable: Boolean = true
itemDeleted: CIDeleted? = null, itemEdited: Boolean = false, itemTimed: CITimed? = null, itemLive: Boolean = false, editable: Boolean = true
): CIMeta =
CIMeta(
itemId = id,
@@ -1471,7 +1473,7 @@ data class CIMeta (
itemStatus = CIStatus.SndNew(),
createdAt = Clock.System.now(),
updatedAt = Clock.System.now(),
itemDeleted = false,
itemDeleted = null,
itemEdited = false,
itemTimed = null,
itemLive = false,
@@ -1506,6 +1508,12 @@ sealed class CIStatus {
@Serializable @SerialName("rcvRead") class RcvRead: CIStatus()
}
@Serializable
sealed class CIDeleted {
@Serializable @SerialName("deleted") class Deleted: CIDeleted()
@Serializable @SerialName("moderated") class Moderated(val byGroupMember: GroupMember): CIDeleted()
}
@Serializable
enum class CIDeleteMode(val deleteMode: String) {
@SerialName("internal") cidmInternal("internal"),
@@ -1541,6 +1549,8 @@ sealed class CIContent: ItemContent {
@Serializable @SerialName("sndGroupFeature") class SndGroupFeature(val groupFeature: GroupFeature, val preference: GroupPreference, val param: Int? = null): CIContent() { override val msgContent: MsgContent? get() = null }
@Serializable @SerialName("rcvChatFeatureRejected") class RcvChatFeatureRejected(val feature: ChatFeature): CIContent() { override val msgContent: MsgContent? get() = null }
@Serializable @SerialName("rcvGroupFeatureRejected") class RcvGroupFeatureRejected(val groupFeature: GroupFeature): CIContent() { override val msgContent: MsgContent? get() = null }
@Serializable @SerialName("sndModerated") object SndModerated: CIContent() { override val msgContent: MsgContent? get() = null }
@Serializable @SerialName("rcvModerated") object RcvModerated: CIContent() { override val msgContent: MsgContent? get() = null }
@Serializable @SerialName("invalidJSON") data class InvalidJSON(val json: String): CIContent() { override val msgContent: MsgContent? get() = null }
override val text: String get() = when (this) {
@@ -1565,6 +1575,8 @@ sealed class CIContent: ItemContent {
is SndGroupFeature -> featureText(groupFeature, preference.enable.text, param)
is RcvChatFeatureRejected -> "${feature.text}: ${generalGetString(R.string.feature_received_prohibited)}"
is RcvGroupFeatureRejected -> "${groupFeature.text}: ${generalGetString(R.string.feature_received_prohibited)}"
is SndModerated -> generalGetString(R.string.moderated_description)
is RcvModerated -> generalGetString(R.string.moderated_description)
is InvalidJSON -> "invalid data"
}

View File

@@ -44,11 +44,7 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference
private val msgNtfTimeoutMs = 30000L
init {
manager.createNotificationChannel(NotificationChannel(MessageChannel, generalGetString(R.string.ntf_channel_messages), NotificationManager.IMPORTANCE_HIGH))
manager.createNotificationChannel(callNotificationChannel(CallChannel, generalGetString(R.string.ntf_channel_calls)))
// Remove old channels since they can't be edited
manager.deleteNotificationChannel("chat.simplex.app.CALL_NOTIFICATION")
manager.deleteNotificationChannel("chat.simplex.app.LOCK_SCREEN_CALL_NOTIFICATION")
if (manager.areNotificationsEnabled()) createNtfChannelsMaybeShowAlert()
}
enum class NotificationAction {
@@ -156,7 +152,7 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference
.setGroup(MessageGroup)
.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_CHILDREN)
.setGroupSummary(true)
.setContentIntent(chatPendingIntent(ShowChatsAction, user.userId))
.setContentIntent(chatPendingIntent(ShowChatsAction, null))
.build()
with(NotificationManagerCompat.from(context)) {
@@ -250,7 +246,7 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference
}
}
private fun chatPendingIntent(intentAction: String, userId: Long, chatId: String? = null, broadcast: Boolean = false): PendingIntent {
private fun chatPendingIntent(intentAction: String, userId: Long?, chatId: String? = null, broadcast: Boolean = false): PendingIntent {
Log.d(TAG, "chatPendingIntent for $intentAction")
val uniqueInt = (System.currentTimeMillis() and 0xfffffff).toInt()
var intent = Intent(context, if (!broadcast) MainActivity::class.java else NtfActionReceiver::class.java)
@@ -268,6 +264,21 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference
}
}
/**
* This function creates notifications channels. On Android 13+ calling it for the first time will trigger system alert,
* The alert asks a user to allow or disallow to show notifications for the app. That's why it should be called only when the user
* already saw such alert or when you want to trigger showing the alert.
* On the first app launch the channels will be created after user profile is created. Subsequent calls will create new channels and delete
* old ones if needed
* */
fun createNtfChannelsMaybeShowAlert() {
manager.createNotificationChannel(NotificationChannel(MessageChannel, generalGetString(R.string.ntf_channel_messages), NotificationManager.IMPORTANCE_HIGH))
manager.createNotificationChannel(callNotificationChannel(CallChannel, generalGetString(R.string.ntf_channel_calls)))
// Remove old channels since they can't be edited
manager.deleteNotificationChannel("chat.simplex.app.CALL_NOTIFICATION")
manager.deleteNotificationChannel("chat.simplex.app.LOCK_SCREEN_CALL_NOTIFICATION")
}
/**
* Processes every action specified by [NotificationCompat.Builder.addAction] that comes with [NotificationAction]
* and [ChatInfo.id] as [ChatIdKey] in extra

View File

@@ -88,7 +88,6 @@ class AppPreferences(val context: Context) {
val webrtcIceServers = mkStrPreference(SHARED_PREFS_WEBRTC_ICE_SERVERS, null)
val privacyProtectScreen = mkBoolPreference(SHARED_PREFS_PRIVACY_PROTECT_SCREEN, true)
val privacyAcceptImages = mkBoolPreference(SHARED_PREFS_PRIVACY_ACCEPT_IMAGES, true)
val privacyTransferImagesInline = mkBoolPreference(SHARED_PREFS_PRIVACY_TRANSFER_IMAGES_INLINE, true)
val privacyLinkPreviews = mkBoolPreference(SHARED_PREFS_PRIVACY_LINK_PREVIEWS, true)
private val _simplexLinkMode = mkStrPreference(SHARED_PREFS_PRIVACY_SIMPLEX_LINK_MODE, SimplexLinkMode.default.name)
val simplexLinkMode: SharedPreference<SimplexLinkMode> = SharedPreference(
@@ -935,7 +934,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
return false
}
suspend fun apiReceiveFile(fileId: Long, inline: Boolean): AChatItem? {
suspend fun apiReceiveFile(fileId: Long, inline: Boolean? = null): AChatItem? {
val r = sendCmd(CC.ReceiveFile(fileId, inline))
return when (r) {
is CR.RcvFileAccepted -> r.chatItem
@@ -1424,8 +1423,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
}
suspend fun receiveFile(user: User, fileId: Long) {
val inline = appPrefs.privacyTransferImagesInline.get()
val chatItem = apiReceiveFile(fileId, inline)
val chatItem = apiReceiveFile(fileId)
if (chatItem != null) {
chatItemSimpleUpdate(user, chatItem)
}
@@ -1441,8 +1439,11 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
private suspend fun chatItemSimpleUpdate(user: User, aChatItem: AChatItem) {
val cInfo = aChatItem.chatInfo
val cItem = aChatItem.chatItem
if (!active(user) || chatModel.upsertChatItem(cInfo, cItem)) {
ntfManager.notifyMessageReceived(chatModel.currentUser.value!!, cInfo, cItem)
val notify = { ntfManager.notifyMessageReceived(user, cInfo, cItem) }
if (!active(user)) {
notify()
} else if (chatModel.upsertChatItem(cInfo, cItem)) {
notify()
}
}
@@ -1795,7 +1796,7 @@ sealed class CC {
class ApiRejectContact(val contactReqId: Long): CC()
class ApiChatRead(val type: ChatType, val id: Long, val range: ItemRange): CC()
class ApiChatUnread(val type: ChatType, val id: Long, val unreadChat: Boolean): CC()
class ReceiveFile(val fileId: Long, val inline: Boolean): CC()
class ReceiveFile(val fileId: Long, val inline: Boolean?): CC()
class ShowVersion(): CC()
val cmdString: String get() = when (this) {
@@ -1870,7 +1871,7 @@ sealed class CC {
is ApiCallStatus -> "/_call status @${contact.apiId} ${callStatus.value}"
is ApiChatRead -> "/_read chat ${chatRef(type, id)} from=${range.from} to=${range.to}"
is ApiChatUnread -> "/_unread chat ${chatRef(type, id)} ${onOff(unreadChat)}"
is ReceiveFile -> "/freceive $fileId inline=${onOff(inline)}"
is ReceiveFile -> if (inline == null) "/freceive $fileId" else "/freceive $fileId inline=${onOff(inline)}"
is ShowVersion -> "/version"
}

View File

@@ -21,8 +21,8 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import chat.simplex.app.*
import chat.simplex.app.R
import chat.simplex.app.SimplexService
import chat.simplex.app.model.ChatModel
import chat.simplex.app.model.Profile
import chat.simplex.app.ui.theme.*
@@ -116,6 +116,7 @@ fun createProfile(chatModel: ChatModel, displayName: String, fullName: String, c
if (chatModel.users.isEmpty()) {
chatModel.controller.startChat(user)
chatModel.onboardingStage.value = OnboardingStage.Step3_SetNotificationsMode
SimplexApp.context.chatModel.controller.ntfManager.createNtfChannelsMaybeShowAlert()
} else {
val users = chatModel.controller.listUsers()
chatModel.users.clear()

View File

@@ -297,10 +297,10 @@ fun CallInfoView(call: Call, alignment: Alignment.Horizontal) {
InfoText(call.contact.chatViewName, style = MaterialTheme.typography.h2)
InfoText(call.callState.text)
val connInfo =
if (call.connectionInfo == null) ""
else " (${call.connectionInfo.text})"
InfoText(call.encryptionStatus + connInfo)
val connInfo = call.connectionInfo
// val connInfoText = if (connInfo == null) "" else " (${connInfo.text}, ${connInfo.protocolText})"
val connInfoText = if (connInfo == null) "" else " (${connInfo.text})"
InfoText(call.encryptionStatus + connInfoText)
}
}
@@ -480,7 +480,10 @@ fun PreviewActiveCallOverlayVideo() {
callState = CallState.Negotiated,
localMedia = CallMediaType.Video,
peerMedia = CallMediaType.Video,
connectionInfo = ConnectionInfo(RTCIceCandidate(RTCIceCandidateType.Host), RTCIceCandidate(RTCIceCandidateType.Host))
connectionInfo = ConnectionInfo(
RTCIceCandidate(RTCIceCandidateType.Host, "tcp", null),
RTCIceCandidate(RTCIceCandidateType.Host, "tcp", null)
)
),
dismiss = {},
toggleAudio = {},
@@ -501,7 +504,10 @@ fun PreviewActiveCallOverlayAudio() {
callState = CallState.Negotiated,
localMedia = CallMediaType.Audio,
peerMedia = CallMediaType.Audio,
connectionInfo = ConnectionInfo(RTCIceCandidate(RTCIceCandidateType.Host), RTCIceCandidate(RTCIceCandidateType.Host))
connectionInfo = ConnectionInfo(
RTCIceCandidate(RTCIceCandidateType.Host, "udp", null),
RTCIceCandidate(RTCIceCandidateType.Host, "udp", null)
)
),
dismiss = {},
toggleAudio = {},

View File

@@ -1,9 +1,10 @@
package chat.simplex.app.views.call
import android.util.Log
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import chat.simplex.app.R
import chat.simplex.app.SimplexApp
import androidx.compose.ui.text.toUpperCase
import chat.simplex.app.*
import chat.simplex.app.model.Contact
import chat.simplex.app.model.User
import chat.simplex.app.views.helpers.generalGetString
@@ -11,6 +12,8 @@ import kotlinx.datetime.Instant
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import java.net.URI
import java.util.*
import kotlin.collections.ArrayList
data class Call(
val contact: Contact,
@@ -62,39 +65,39 @@ enum class CallState {
}
}
@Serializable class WVAPICall(val corrId: Int? = null, val command: WCallCommand)
@Serializable class WVAPIMessage(val corrId: Int? = null, val resp: WCallResponse, val command: WCallCommand? = null)
@Serializable data class WVAPICall(val corrId: Int? = null, val command: WCallCommand)
@Serializable data class WVAPIMessage(val corrId: Int? = null, val resp: WCallResponse, val command: WCallCommand? = null)
@Serializable
sealed class WCallCommand {
@Serializable @SerialName("capabilities") object Capabilities: WCallCommand()
@Serializable @SerialName("start") class Start(val media: CallMediaType, val aesKey: String? = null, val iceServers: List<RTCIceServer>? = null, val relay: Boolean? = null): WCallCommand()
@Serializable @SerialName("offer") class Offer(val offer: String, val iceCandidates: String, val media: CallMediaType, val aesKey: String? = null, val iceServers: List<RTCIceServer>? = null, val relay: Boolean? = null): WCallCommand()
@Serializable @SerialName("answer") class Answer (val answer: String, val iceCandidates: String): WCallCommand()
@Serializable @SerialName("ice") class Ice(val iceCandidates: String): WCallCommand()
@Serializable @SerialName("media") class Media(val media: CallMediaType, val enable: Boolean): WCallCommand()
@Serializable @SerialName("camera") class Camera(val camera: VideoCamera): WCallCommand()
@Serializable @SerialName("start") data class Start(val media: CallMediaType, val aesKey: String? = null, val iceServers: List<RTCIceServer>? = null, val relay: Boolean? = null): WCallCommand()
@Serializable @SerialName("offer") data class Offer(val offer: String, val iceCandidates: String, val media: CallMediaType, val aesKey: String? = null, val iceServers: List<RTCIceServer>? = null, val relay: Boolean? = null): WCallCommand()
@Serializable @SerialName("answer") data class Answer (val answer: String, val iceCandidates: String): WCallCommand()
@Serializable @SerialName("ice") data class Ice(val iceCandidates: String): WCallCommand()
@Serializable @SerialName("media") data class Media(val media: CallMediaType, val enable: Boolean): WCallCommand()
@Serializable @SerialName("camera") data class Camera(val camera: VideoCamera): WCallCommand()
@Serializable @SerialName("end") object End: WCallCommand()
}
@Serializable
sealed class WCallResponse {
@Serializable @SerialName("capabilities") class Capabilities(val capabilities: CallCapabilities): WCallResponse()
@Serializable @SerialName("offer") class Offer(val offer: String, val iceCandidates: String, val capabilities: CallCapabilities): WCallResponse()
@Serializable @SerialName("answer") class Answer(val answer: String, val iceCandidates: String): WCallResponse()
@Serializable @SerialName("ice") class Ice(val iceCandidates: String): WCallResponse()
@Serializable @SerialName("connection") class Connection(val state: ConnectionState): WCallResponse()
@Serializable @SerialName("connected") class Connected(val connectionInfo: ConnectionInfo): WCallResponse()
@Serializable @SerialName("capabilities") data class Capabilities(val capabilities: CallCapabilities): WCallResponse()
@Serializable @SerialName("offer") data class Offer(val offer: String, val iceCandidates: String, val capabilities: CallCapabilities): WCallResponse()
@Serializable @SerialName("answer") data class Answer(val answer: String, val iceCandidates: String): WCallResponse()
@Serializable @SerialName("ice") data class Ice(val iceCandidates: String): WCallResponse()
@Serializable @SerialName("connection") data class Connection(val state: ConnectionState): WCallResponse()
@Serializable @SerialName("connected") data class Connected(val connectionInfo: ConnectionInfo): WCallResponse()
@Serializable @SerialName("ended") object Ended: WCallResponse()
@Serializable @SerialName("ok") object Ok: WCallResponse()
@Serializable @SerialName("error") class Error(val message: String): WCallResponse()
@Serializable @SerialName("error") data class Error(val message: String): WCallResponse()
}
@Serializable class WebRTCCallOffer(val callType: CallType, val rtcSession: WebRTCSession)
@Serializable class WebRTCSession(val rtcSession: String, val rtcIceCandidates: String)
@Serializable class WebRTCExtraInfo(val rtcIceCandidates: String)
@Serializable class CallType(val media: CallMediaType, val capabilities: CallCapabilities)
@Serializable class RcvCallInvitation(val user: User, val contact: Contact, val callType: CallType, val sharedKey: String? = null, val callTs: Instant) {
@Serializable data class WebRTCCallOffer(val callType: CallType, val rtcSession: WebRTCSession)
@Serializable data class WebRTCSession(val rtcSession: String, val rtcIceCandidates: String)
@Serializable data class WebRTCExtraInfo(val rtcIceCandidates: String)
@Serializable data class CallType(val media: CallMediaType, val capabilities: CallCapabilities)
@Serializable data class RcvCallInvitation(val user: User, val contact: Contact, val callType: CallType, val sharedKey: String? = null, val callTs: Instant) {
val callTypeText: String get() = generalGetString(when(callType.media) {
CallMediaType.Video -> if (sharedKey == null) R.string.video_call_no_encryption else R.string.encrypted_video_call
CallMediaType.Audio -> if (sharedKey == null) R.string.audio_call_no_encryption else R.string.encrypted_audio_call
@@ -104,19 +107,32 @@ sealed class WCallResponse {
CallMediaType.Audio -> R.string.incoming_audio_call
})
}
@Serializable class CallCapabilities(val encryption: Boolean)
@Serializable class ConnectionInfo(private val localCandidate: RTCIceCandidate?, private val remoteCandidate: RTCIceCandidate?) {
val text: String @Composable get() = when {
localCandidate?.candidateType == RTCIceCandidateType.Host && remoteCandidate?.candidateType == RTCIceCandidateType.Host ->
stringResource(R.string.call_connection_peer_to_peer)
localCandidate?.candidateType == RTCIceCandidateType.Relay && remoteCandidate?.candidateType == RTCIceCandidateType.Relay ->
stringResource(R.string.call_connection_via_relay)
else ->
"${localCandidate?.candidateType?.value ?: "unknown"} / ${remoteCandidate?.candidateType?.value ?: "unknown"}"
@Serializable data class CallCapabilities(val encryption: Boolean)
@Serializable data class ConnectionInfo(private val localCandidate: RTCIceCandidate?, private val remoteCandidate: RTCIceCandidate?) {
val text: String @Composable get() {
val local = localCandidate?.candidateType
val remote = remoteCandidate?.candidateType
return when {
local == RTCIceCandidateType.Host && remote == RTCIceCandidateType.Host ->
stringResource(R.string.call_connection_peer_to_peer)
local == RTCIceCandidateType.Relay && remote == RTCIceCandidateType.Relay ->
stringResource(R.string.call_connection_via_relay)
else ->
"${local?.value ?: "unknown"} / ${remote?.value ?: "unknown"}"
}
}
val protocolText: String get() {
val local = localCandidate?.protocol?.uppercase(Locale.ROOT) ?: "unknown"
val localRelay = localCandidate?.relayProtocol?.uppercase(Locale.ROOT) ?: "unknown"
val remote = remoteCandidate?.protocol?.uppercase(Locale.ROOT) ?: "unknown"
val localText = if (localRelay == local || localCandidate?.relayProtocol == null) local else "$local ($localRelay)"
return if (local == remote) localText else "$localText / $remote"
}
}
// https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate
@Serializable class RTCIceCandidate(val candidateType: RTCIceCandidateType?)
@Serializable data class RTCIceCandidate(val candidateType: RTCIceCandidateType?, val protocol: String?, val relayProtocol: String?)
// https://developer.mozilla.org/en-US/docs/Web/API/RTCIceServer
@Serializable data class RTCIceServer(val urls: List<String>, val username: String? = null, val credential: String? = null)
@@ -151,7 +167,7 @@ enum class VideoCamera {
}
@Serializable
class ConnectionState(
data class ConnectionState(
val connectionState: String,
val iceConnectionState: String,
val iceGatheringState: String,
@@ -159,20 +175,22 @@ class ConnectionState(
)
// the servers are expected in this format:
// stun:stun.simplex.im:443
// turn:private:yleob6AVkiNI87hpR94Z@turn.simplex.im:443
// stun:stun.simplex.im:443?transport=tcp
// turn:private:yleob6AVkiNI87hpR94Z@turn.simplex.im:443?transport=tcp
fun parseRTCIceServer(str: String): RTCIceServer? {
var s = replaceScheme(str, "stun:")
s = replaceScheme(s, "turn:")
s = replaceScheme(s, "turns:")
val u = runCatching { URI(s) }.getOrNull()
if (u != null) {
val scheme = u.scheme
val host = u.host
val port = u.port
if (u.path == "" && (scheme == "stun" || scheme == "turn")) {
if (u.path == "" && (scheme == "stun" || scheme == "turn" || scheme == "turns")) {
val userInfo = u.userInfo?.split(":")
val query = if (u.query == null || u.query == "") "" else "?${u.query}"
return RTCIceServer(
urls = listOf("$scheme:$host:$port"),
urls = listOf("$scheme:$host:$port$query"),
username = userInfo?.getOrNull(0),
credential = userInfo?.getOrNull(1)
)

View File

@@ -674,10 +674,18 @@ private fun ScrollToBottom(chatId: ChatId, listState: LazyListState, chatItems:
.distinctUntilChanged()
.filter { listState.layoutInfo.visibleItemsInfo.firstOrNull()?.key != it }
.collect {
if (listState.firstVisibleItemIndex == 0) {
listState.animateScrollToItem(0)
} else {
listState.animateScrollBy(scrollDistance)
try {
if (listState.firstVisibleItemIndex == 0) {
listState.animateScrollToItem(0)
} else {
listState.animateScrollBy(scrollDistance)
}
} catch (e: CancellationException) {
/**
* When you tap and hold a finger on a lazy column with chatItems, and then you receive a message,
* this coroutine will be canceled with the message "Current mutation had a higher priority" because of animatedScroll.
* Which breaks auto-scrolling to bottom. So just ignoring the exception
* */
}
}
}

View File

@@ -174,14 +174,14 @@ fun CIFileView(
class ChatItemProvider: PreviewParameterProvider<ChatItem> {
private val sentFile = ChatItem(
chatDir = CIDirection.DirectSnd(),
meta = CIMeta.getSample(1, Clock.System.now(), "", CIStatus.SndSent(), itemDeleted = false, itemEdited = true, editable = false),
meta = CIMeta.getSample(1, Clock.System.now(), "", CIStatus.SndSent(), itemEdited = true),
content = CIContent.SndMsgContent(msgContent = MsgContent.MCFile("")),
quotedItem = null,
file = CIFile.getSample(fileStatus = CIFileStatus.SndComplete)
)
private val fileChatItemWtFile = ChatItem(
chatDir = CIDirection.DirectRcv(),
meta = CIMeta.getSample(1, Clock.System.now(), "", CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
meta = CIMeta.getSample(1, Clock.System.now(), "", CIStatus.RcvRead(), ),
content = CIContent.RcvMsgContent(msgContent = MsgContent.MCFile("")),
quotedItem = null,
file = null

View File

@@ -98,7 +98,7 @@ fun ChatItemView(
onDismissRequest = { showMenu.value = false },
Modifier.width(220.dp)
) {
if (!cItem.meta.itemDeleted && !live) {
if (cItem.meta.itemDeleted == null && !live) {
ItemAction(stringResource(R.string.reply_verb), Icons.Outlined.Reply, onClick = {
if (composeState.value.editing) {
composeState.value = ComposeState(contextItem = ComposeContextItem.QuotedItem(cItem), useLinkPreviews = useLinkPreviews)
@@ -140,7 +140,7 @@ fun ChatItemView(
showMenu.value = false
})
}
if (cItem.meta.itemDeleted && revealed.value) {
if (cItem.meta.itemDeleted != null && revealed.value) {
ItemAction(
stringResource(R.string.hide_verb),
Icons.Outlined.VisibilityOff,
@@ -178,10 +178,10 @@ fun ChatItemView(
@Composable
fun ContentItem() {
val mc = cItem.content.msgContent
if (cItem.meta.itemDeleted && !revealed.value) {
if (cItem.meta.itemDeleted != null && !revealed.value) {
MarkedDeletedItemView(cItem, cInfo.timedMessagesTTL, showMember = showMember)
MarkedDeletedItemDropdownMenu()
} else if (cItem.quotedItem == null && !cItem.meta.itemDeleted && !cItem.meta.isLive) {
} else if (cItem.quotedItem == null && cItem.meta.itemDeleted == null && !cItem.meta.isLive) {
if (mc is MsgContent.MCText && isShortEmoji(cItem.content.text)) {
EmojiItemView(cItem, cInfo.timedMessagesTTL)
MsgContentItemDropdownMenu()
@@ -238,6 +238,8 @@ fun ChatItemView(
is CIContent.SndGroupFeature -> CIChatFeatureView(cItem, c.groupFeature, c.preference.enable.iconColor)
is CIContent.RcvChatFeatureRejected -> CIChatFeatureView(cItem, c.feature, Color.Red)
is CIContent.RcvGroupFeatureRejected -> CIChatFeatureView(cItem, c.groupFeature, Color.Red)
is CIContent.SndModerated -> DeletedItem()
is CIContent.RcvModerated -> DeletedItem()
is CIContent.InvalidJSON -> CIInvalidJSONView(c.json)
}
}

View File

@@ -1,8 +1,7 @@
package chat.simplex.app.views.chat.item
import android.content.res.Configuration
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
import androidx.compose.runtime.Composable
@@ -19,9 +18,10 @@ import chat.simplex.app.ui.theme.SimpleXTheme
@Composable
fun DeletedItemView(ci: ChatItem, timedMessagesTTL: Int?, showMember: Boolean = false) {
val sent = ci.chatDir.sent
Surface(
shape = RoundedCornerShape(18.dp),
color = ReceivedColorLight,
color = if (sent) SentColorLight else ReceivedColorLight,
) {
Row(
Modifier.padding(horizontal = 12.dp, vertical = 6.dp),

View File

@@ -28,6 +28,7 @@ import chat.simplex.app.model.*
import chat.simplex.app.ui.theme.*
import chat.simplex.app.views.helpers.*
import kotlinx.datetime.Clock
import kotlin.math.min
val SentColorLight = Color(0x1E45B8FF)
val ReceivedColorLight = Color(0x20B1B0B5)
@@ -164,7 +165,7 @@ fun FramedItemView(
Box(contentAlignment = Alignment.BottomEnd) {
Column(Modifier.width(IntrinsicSize.Max)) {
PriorityLayout(Modifier, CHAT_IMAGE_LAYOUT_ID) {
if (ci.meta.itemDeleted) {
if (ci.meta.itemDeleted != null) {
FramedItemHeader(stringResource(R.string.marked_deleted_description), true, Icons.Outlined.Delete)
} else if (ci.meta.isLive) {
FramedItemHeader(stringResource(R.string.live), false)
@@ -241,6 +242,12 @@ fun CIMarkdownText(
}
const val CHAT_IMAGE_LAYOUT_ID = "chatImage"
/**
* Equal to [androidx.compose.ui.unit.Constraints.MaxFocusMask], which is 0x3FFFF - 1
* Other values make a crash `java.lang.IllegalArgumentException: Can't represent a width of 123456 and height of 9909 in Constraints`
* See [androidx.compose.ui.unit.Constraints.createConstraints]
* */
const val MAX_SAFE_WIDTH = 0x3FFFF - 1
@Composable
fun PriorityLayout(
@@ -248,6 +255,17 @@ fun PriorityLayout(
priorityLayoutId: String,
content: @Composable () -> Unit
) {
/**
* Limiting max value for height + width in order to not crash the app, see [androidx.compose.ui.unit.Constraints.createConstraints]
* */
fun maxSafeHeight(width: Int) = when { // width bits + height bits should be <= 31
width < 0x1FFF /*MaxNonFocusMask*/ -> 0x3FFFF - 1 /* MaxFocusMask */ // 13 bits width + 18 bits height
width < 0x7FFF /*MinNonFocusMask*/ -> 0xFFFF - 1 /* MinFocusMask */ // 15 bits width + 16 bits height
width < 0xFFFF /*MinFocusMask*/ -> 0x7FFF - 1 /* MinFocusMask */ // 16 bits width + 15 bits height
width < 0x3FFFF /*MaxFocusMask*/ -> 0x1FFF - 1 /* MaxNonFocusMask */ // 18 bits width + 13 bits height
else -> 0x1FFF // shouldn't happen since width is limited already
}
Layout(
content = content,
modifier = modifier
@@ -259,9 +277,11 @@ fun PriorityLayout(
if (it.layoutId == priorityLayoutId)
imagePlaceable!!
else
it.measure(constraints.copy(maxWidth = imagePlaceable?.width ?: constraints.maxWidth)) }
// Limit width for every other element to width of important element and height for a sum of all elements
layout(imagePlaceable?.measuredWidth ?: placeables.maxOf { it.width }, placeables.sumOf { it.height }) {
it.measure(constraints.copy(maxWidth = imagePlaceable?.width ?: min(MAX_SAFE_WIDTH, constraints.maxWidth))) }
// Limit width for every other element to width of important element and height for a sum of all elements.
val width = imagePlaceable?.measuredWidth ?: min(MAX_SAFE_WIDTH, placeables.maxOf { it.width })
val height = minOf(maxSafeHeight(width), placeables.sumOf { it.height })
layout(width, height) {
var y = 0
placeables.forEach {
it.place(0, y)

View File

@@ -14,6 +14,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import chat.simplex.app.R
import chat.simplex.app.model.CIDeleted
import chat.simplex.app.model.ChatItem
import chat.simplex.app.ui.theme.HighOrLowlight
import chat.simplex.app.ui.theme.SimpleXTheme
@@ -51,7 +52,7 @@ fun MarkedDeletedItemView(ci: ChatItem, timedMessagesTTL: Int?, showMember: Bool
fun PreviewMarkedDeletedItemView() {
SimpleXTheme {
DeletedItemView(
ChatItem.getSampleData(itemDeleted = true),
ChatItem.getSampleData(itemDeleted = CIDeleted.Deleted()),
null
)
}

View File

@@ -145,12 +145,12 @@ fun ChatPreviewView(
if (ci != null) {
val (text: CharSequence, inlineTextContent) = when {
chatModelDraftChatId == chat.id && chatModelDraft != null -> remember(chatModelDraft) { messageDraft(chatModelDraft) }
!ci.meta.itemDeleted -> ci.text to null
ci.meta.itemDeleted == null -> ci.text to null
else -> generalGetString(R.string.marked_deleted_description) to null
}
val formattedText = when {
chatModelDraftChatId == chat.id && chatModelDraft != null -> null
!ci.meta.itemDeleted -> ci.formattedText
ci.meta.itemDeleted == null -> ci.formattedText
else -> null
}
MarkdownText(

View File

@@ -97,8 +97,11 @@ fun UserPicker(chatModel: ChatModel, userPickerState: MutableStateFlow<AnimatedV
.background(MaterialTheme.colors.background, MaterialTheme.shapes.medium)
) {
Column(Modifier.weight(1f).verticalScroll(rememberScrollState())) {
users.forEachIndexed { i, u ->
UserProfilePickerItem(u.user, u.unreadCount) {
users.forEach { u ->
UserProfilePickerItem(u.user, u.unreadCount, openSettings = {
openSettings()
userPickerState.value = AnimatedViewState.GONE
}) {
userPickerState.value = AnimatedViewState.HIDING
if (!u.user.activeUser) {
chatModel.chats.clear()
@@ -113,12 +116,10 @@ fun UserPicker(chatModel: ChatModel, userPickerState: MutableStateFlow<AnimatedV
}
}
}
if (i != users.lastIndex) {
Divider(Modifier.requiredHeight(1.dp))
}
Divider(Modifier.requiredHeight(1.dp))
if (u.user.activeUser) Divider(Modifier.requiredHeight(0.5.dp))
}
}
Divider()
SettingsPickerItem {
openSettings()
userPickerState.value = AnimatedViewState.GONE
@@ -128,13 +129,13 @@ fun UserPicker(chatModel: ChatModel, userPickerState: MutableStateFlow<AnimatedV
}
@Composable
fun UserProfilePickerItem(u: User, unreadCount: Int = 0, onLongClick: () -> Unit = {}, onClick: () -> Unit) {
fun UserProfilePickerItem(u: User, unreadCount: Int = 0, onLongClick: () -> Unit = {}, openSettings: () -> Unit = {}, onClick: () -> Unit) {
Row(
Modifier
.fillMaxWidth()
.sizeIn(minHeight = 46.dp)
.combinedClickable(
onClick = if (!u.activeUser) onClick else { {} },
onClick = if (u.activeUser) openSettings else onClick,
onLongClick = onLongClick,
interactionSource = remember { MutableInteractionSource() },
indication = if (!u.activeUser) LocalIndication.current else null

View File

@@ -6,6 +6,7 @@ import android.content.*
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
import android.content.pm.PackageManager
import android.graphics.*
import android.graphics.ImageDecoder.DecodeException
import android.net.Uri
import android.provider.MediaStore
import android.util.Base64
@@ -205,21 +206,22 @@ fun GetImageBottomSheet(
val processPickedImage = { uri: Uri? ->
if (uri != null) {
val source = ImageDecoder.createSource(context.contentResolver, uri)
val bitmap = ImageDecoder.decodeBitmap(source)
imageBitmap.value = uri
onImageChange(bitmap)
}
}
val galleryLauncher = rememberLauncherForActivityResult(contract = PickFromGallery()) { processPickedImage(it) }
val galleryLauncherFallback = rememberGetContentLauncher { processPickedImage(it) }
val cameraLauncher = rememberCameraLauncher { uri: Uri? ->
if (uri != null) {
imageBitmap.value = uri
val source = ImageDecoder.createSource(SimplexApp.context.contentResolver, uri)
val bitmap = ImageDecoder.decodeBitmap(source)
onImageChange(bitmap)
try {
val bitmap = ImageDecoder.decodeBitmap(source)
imageBitmap.value = uri
onImageChange(bitmap)
} catch (e: DecodeException) {
Log.e(TAG, "Unable to decode the image: ${e.stackTraceToString()}")
AlertManager.shared.showAlertMsg(
title = generalGetString(R.string.image_decoding_exception_title),
text = generalGetString(R.string.image_decoding_exception_desc)
)
}
}
}
val galleryLauncher = rememberLauncherForActivityResult(contract = PickFromGallery(), processPickedImage)
val galleryLauncherFallback = rememberGetContentLauncher(processPickedImage)
val cameraLauncher = rememberCameraLauncher(processPickedImage)
val permissionLauncher = rememberPermissionLauncher { isGranted: Boolean ->
if (isGranted) {
cameraLauncher.launchWithFallback()

View File

@@ -1,5 +1,6 @@
package chat.simplex.app.views.helpers
import android.app.Application
import android.content.Context
import android.content.res.Resources
import android.graphics.*
@@ -374,6 +375,24 @@ fun saveAnimImage(context: Context, uri: Uri): String? {
}
}
fun saveTempImageUncompressed(image: Bitmap, asPng: Boolean): File? {
return try {
val ext = if (asPng) "png" else "jpg"
val tmpDir = SimplexApp.context.getDir("temp", Application.MODE_PRIVATE)
return File(tmpDir.absolutePath + File.separator + generateNewFileName(SimplexApp.context, "IMG", ext)).apply {
outputStream().use { out ->
image.compress(if (asPng) Bitmap.CompressFormat.PNG else Bitmap.CompressFormat.JPEG, 85, out)
out.flush()
}
deleteOnExit()
SimplexApp.context.chatModel.filesToDelete.add(this)
}
} catch (e: Exception) {
Log.e(TAG, "Util.kt saveTempImageUncompressed error: ${e.message}")
null
}
}
fun saveFileFromUri(context: Context, uri: Uri): String? {
return try {
val inputStream = context.contentResolver.openInputStream(uri)

View File

@@ -1,32 +1,100 @@
package chat.simplex.app.views.newchat
import android.graphics.Bitmap
import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.graphics.*
import androidx.compose.ui.platform.*
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import boofcv.alg.fiducial.qrcode.QrCodeEncoder
import boofcv.alg.fiducial.qrcode.QrCodeGeneratorImage
import androidx.core.graphics.*
import androidx.core.graphics.drawable.toBitmap
import boofcv.alg.drawing.FiducialImageEngine
import boofcv.alg.fiducial.qrcode.*
import boofcv.android.ConvertBitmap
import chat.simplex.app.R
import chat.simplex.app.SimplexApp
import chat.simplex.app.ui.theme.SimpleXTheme
import chat.simplex.app.views.helpers.*
import kotlinx.coroutines.launch
@Composable
fun QRCode(connReq: String, modifier: Modifier = Modifier) {
Image(
bitmap = qrCodeBitmap(connReq, 1024).asImageBitmap(),
contentDescription = stringResource(R.string.image_descr_qr_code),
modifier = modifier
)
fun QRCode(
connReq: String,
modifier: Modifier = Modifier,
tintColor: Color = Color(0xff062d56),
withLogo: Boolean = true
) {
val context = LocalContext.current
val scope = rememberCoroutineScope()
BoxWithConstraints {
val maxWidthInPx = with(LocalDensity.current) { maxWidth.roundToPx() }
val qr = remember(maxWidthInPx, connReq, tintColor, withLogo) {
qrCodeBitmap(connReq, maxWidthInPx).replaceColor(Color.Black.toArgb(), tintColor.toArgb())
.let { if (withLogo) it.addLogo() else it }
.asImageBitmap()
}
Image(
bitmap = qr,
contentDescription = stringResource(R.string.image_descr_qr_code),
modifier
.clickable {
scope.launch {
val image = qrCodeBitmap(connReq, 1024).replaceColor(Color.Black.toArgb(), tintColor.toArgb())
.let { if (withLogo) it.addLogo() else it }
val file = saveTempImageUncompressed(image, false)
if (file != null) {
shareFile(context, "", file.absolutePath)
}
}
}
)
}
}
fun qrCodeBitmap(content: String, size: Int): Bitmap {
val qrCode = QrCodeEncoder().addAutomatic(content).fixate()
val renderer = QrCodeGeneratorImage(5)
fun qrCodeBitmap(content: String, size: Int = 1024): Bitmap {
val qrCode = QrCodeEncoder().addAutomatic(content).setError(QrCode.ErrorLevel.L).fixate()
/** See [QrCodeGeneratorImage.initialize] and [FiducialImageEngine.configure] for size calculation */
val numModules = QrCode.totalModules(qrCode.version)
val borderModule = 1
// val calculatedFinalWidth = (pixelsPerModule * numModules) + 2 * (borderModule * pixelsPerModule)
// size = (x * numModules) + 2 * (borderModule * x)
// size / x = numModules + 2 * borderModule
// x = size / (numModules + 2 * borderModule)
val pixelsPerModule = size / (numModules + 2 * borderModule)
// + 1 to make it with better quality
val renderer = QrCodeGeneratorImage(pixelsPerModule + 1)
renderer.borderModule = borderModule
renderer.render(qrCode)
return ConvertBitmap.grayToBitmap(renderer.gray, Bitmap.Config.RGB_565)
return ConvertBitmap.grayToBitmap(renderer.gray, Bitmap.Config.RGB_565).scale(size, size)
}
fun Bitmap.replaceColor(from: Int, to: Int): Bitmap {
val pixels = IntArray(width * height)
getPixels(pixels, 0, width, 0, 0, width, height)
var i = 0
while (i < pixels.size) {
if (pixels[i] == from) {
pixels[i] = to
}
i++
}
setPixels(pixels, 0, width, 0, 0, width, height)
return this
}
fun Bitmap.addLogo(): Bitmap = applyCanvas {
val radius = (width * 0.16f) / 2
val paint = android.graphics.Paint()
paint.color = android.graphics.Color.WHITE
drawCircle(width / 2f, height / 2f, radius, paint)
val logo = SimplexApp.context.resources.getDrawable(R.mipmap.icon_foreground, null).toBitmap()
val logoSize = (width * 0.24).toInt()
translate((width - logoSize) / 2f, (height - logoSize) / 2f)
drawBitmap(logo, null, android.graphics.Rect(0, 0, logoSize, logoSize), null)
}
@Preview

View File

@@ -226,6 +226,48 @@ private val versionDescriptions: List<VersionDescription> = listOf(
icon = Icons.Outlined.VerifiedUser,
titleId = R.string.v4_4_verify_connection_security,
descrId = R.string.v4_4_verify_connection_security_desc
),
FeatureDescription(
icon = Icons.Outlined.Translate,
titleId = R.string.v4_4_french_interface,
descrId = R.string.v4_4_french_interface_descr
)
)
),
VersionDescription(
version = "v4.5",
features = listOf(
FeatureDescription(
icon = Icons.Outlined.ManageAccounts,
titleId = R.string.v4_5_multiple_chat_profiles,
descrId = R.string.v4_5_multiple_chat_profiles_descr
),
FeatureDescription(
icon = Icons.Outlined.EditNote,
titleId = R.string.v4_5_message_draft,
descrId = R.string.v4_5_message_draft_descr
),
FeatureDescription(
icon = Icons.Outlined.SafetyDivider,
titleId = R.string.v4_5_transport_isolation,
descrId = R.string.v4_5_transport_isolation_descr,
link = "https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation"
),
FeatureDescription(
icon = Icons.Outlined.Task,
titleId = R.string.v4_5_private_filenames,
descrId = R.string.v4_5_private_filenames_descr
),
FeatureDescription(
icon = Icons.Outlined.Battery2Bar,
titleId = R.string.v4_5_reduced_battery_usage,
descrId = R.string.v4_5_reduced_battery_usage_descr
),
FeatureDescription(
icon = Icons.Outlined.Translate,
titleId = R.string.v4_5_italian_interface,
descrId = R.string.v4_5_italian_interface_descr,
link = "https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps"
)
)
)

View File

@@ -9,6 +9,7 @@ import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
@@ -113,7 +114,7 @@ fun SharedPreferenceToggleWithIcon(
) {
val prefState = preferenceState ?: remember { mutableStateOf(preference.get()) }
Row(Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) {
Text(text, Modifier.padding(end = 4.dp))
Text(text, Modifier.padding(end = 4.dp), color = if (stopped) HighOrLowlight else Color.Unspecified)
Icon(
icon,
null,

View File

@@ -51,8 +51,6 @@ fun PrivacySettingsView(
SectionView(stringResource(R.string.settings_section_title_chats)) {
SettingsPreferenceItem(Icons.Outlined.Image, stringResource(R.string.auto_accept_images), chatModel.controller.appPrefs.privacyAcceptImages)
SectionDivider()
SettingsPreferenceItem(Icons.Outlined.ImageAspectRatio, stringResource(R.string.transfer_images_faster), chatModel.controller.appPrefs.privacyTransferImagesInline)
SectionDivider()
SettingsPreferenceItem(Icons.Outlined.TravelExplore, stringResource(R.string.send_link_previews), chatModel.controller.appPrefs.privacyLinkPreviews)
SectionDivider()
SectionItemView { SimpleXLinkOptions(chatModel.simplexLinkMode, onSelected = {

View File

@@ -141,13 +141,13 @@ fun SettingsLayout(
ProfilePreview(profile, stopped = stopped)
}
SectionDivider()
SettingsActionItem(Icons.Outlined.HowToReg, stringResource(R.string.your_chat_profiles), { withAuth { showSettingsModal { UserProfilesView(it) }() } }, disabled = stopped)
SettingsActionItem(Icons.Outlined.ManageAccounts, stringResource(R.string.your_chat_profiles), { withAuth { showSettingsModal { UserProfilesView(it) }() } }, disabled = stopped)
SectionDivider()
SettingsIncognitoActionItem(incognitoPref, incognito, stopped) { showModal { IncognitoView() }() }
SectionDivider()
SettingsActionItem(Icons.Outlined.QrCode, stringResource(R.string.your_simplex_contact_address), showModal { CreateLinkView(it, CreateLinkTab.LONG_TERM) }, disabled = stopped)
SectionDivider()
ChatPreferencesItem(showCustomModal)
ChatPreferencesItem(showCustomModal, stopped = stopped)
}
SectionSpacer()
@@ -270,17 +270,18 @@ fun MaintainIncognitoState(chatModel: ChatModel) {
}
}
@Composable fun ChatPreferencesItem(showCustomModal: ((@Composable (ChatModel, () -> Unit) -> Unit) -> (() -> Unit))) {
@Composable fun ChatPreferencesItem(showCustomModal: ((@Composable (ChatModel, () -> Unit) -> Unit) -> (() -> Unit)), stopped: Boolean) {
SettingsActionItem(
Icons.Outlined.ToggleOn,
stringResource(R.string.chat_preferences),
click = {
click = if (stopped) null else ({
withApi {
showCustomModal { m, close ->
PreferencesView(m, m.currentUser.value ?: return@showCustomModal, close)
}()
}
}
}),
disabled = stopped
)
}
@@ -438,7 +439,7 @@ fun SettingsPreferenceItemWithInfo(
pref: SharedPreference<Boolean>,
prefState: MutableState<Boolean>? = null
) {
SectionItemView(onClickInfo) {
SectionItemView(if (stopped) null else onClickInfo) {
Row(verticalAlignment = Alignment.CenterVertically) {
Icon(icon, text, tint = if (stopped) HighOrLowlight else iconTint)
Spacer(Modifier.padding(horizontal = 4.dp))

View File

@@ -24,6 +24,7 @@ fun VersionInfoView(info: CoreVersionInfo) {
Text(String.format(stringResource(R.string.app_version_code), BuildConfig.VERSION_CODE))
Text(String.format(stringResource(R.string.core_version), info.version))
Text(String.format(stringResource(R.string.core_build_timestamp), info.buildTimestamp))
Text(String.format(stringResource(R.string.core_simplexmq_version), info.simplexmqVersion, info.simplexmqCommit.substring(startIndex = 0, endIndex = 7)))
val simplexmqCommit = if (info.simplexmqCommit.length >= 7) info.simplexmqCommit.substring(startIndex = 0, endIndex = 7) else info.simplexmqCommit
Text(String.format(stringResource(R.string.core_simplexmq_version), info.simplexmqVersion, simplexmqCommit))
}
}

View File

@@ -0,0 +1,953 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="allow_voice_messages_only_if">Povolte hlasové zprávy, pouze pokud je váš kontakt povolí.</string>
<string name="allow_to_send_disappearing">Povolit odesílání mizejících zpráv.</string>
<string name="allow_to_send_voice">Povolit odesílání hlasových zpráv.</string>
<string name="v4_2_group_links_desc">Správci mohou vytvářet odkazy pro připojení ke skupinám.</string>
<string name="accept_contact_button">Přijmout</string>
<string name="smp_servers_preset_add">Přidejte přednastavené servery</string>
<string name="network_settings">Pokročilá nastavení sítě</string>
<string name="accept">Přijmout</string>
<string name="smp_servers_add">Přidat server…</string>
<string name="network_enable_socks_info">Přistupovat k serverům přes SOCKS proxy na portu 9050\? Před povolením této možnosti musí být spuštěna proxy.</string>
<string name="accept_feature">Přijmout</string>
<string name="allow_your_contacts_to_send_disappearing_messages">Umožněte svým kontaktům odesílat mizející zprávy.</string>
<string name="about_simplex_chat">O <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="smp_servers_add_to_another_device">Přidat do jiného zařízení</string>
<string name="accept_requests">Přijímat žádosti</string>
<string name="allow_verb">Povolit</string>
<string name="allow_voice_messages_question">Povolit hlasové zprávy\?</string>
<string name="about_simplex">O SimpleX</string>
<string name="a_plus_b">a + b</string>
<string name="accept_call_on_lock_screen">Přijmout</string>
<string name="chat_item_ttl_day">1 den</string>
<string name="group_member_role_admin">správce</string>
<string name="users_add">Přidat profil</string>
<string name="users_delete_all_chats_deleted">Všechny chaty a zprávy budou smazány tuto akci nelze vrátit zpět!</string>
<string name="allow_disappearing_messages_only_if">Povolte mizející zprávy, pouze pokud to váš kontakt povolí.</string>
<string name="v4_3_improved_server_configuration_desc">Přidejte servery skenováním QR kódů.</string>
<string name="chat_item_ttl_month">1 měsíc</string>
<string name="chat_item_ttl_week">1 týden</string>
<string name="callstatus_accepted">přijatý hovor</string>
<string name="accept_contact_incognito_button">Přijmout inkognito</string>
<string name="accept_connection_request__question">Přijmout žádost o připojení\?</string>
<string name="all_group_members_will_remain_connected">Všichni členové skupiny zůstanou připojeni.</string>
<string name="allow_irreversible_message_deletion_only_if">Povolte nevratné smazání zprávy pouze v případě, že vám to váš kontakt dovolí.</string>
<string name="allow_direct_messages">Povolit odesílání přímých zpráv členům.</string>
<string name="allow_to_delete_messages">Povolit nevratné smazání odeslaných zpráv.</string>
<string name="clear_chat_warning">Všechny zprávy budou smazány tuto akci nelze vrátit zpět! Zprávy budou smazány POUZE pro vás.</string>
<string name="allow_your_contacts_irreversibly_delete">Umožněte svým kontaktům nevratně odstranit odeslané zprávy.</string>
<string name="allow_your_contacts_to_send_voice_messages">Povolte svým kontaktům odesílání hlasových zpráv.</string>
<string name="button_create_group_link">Vytvořit odkaz</string>
<string name="delete_link_question">Smazat odkaz\?</string>
<string name="button_send_direct_message">Odeslat přímou zprávu</string>
<string name="member_info_section_title_member">ČLEN</string>
<string name="change_member_role_question">Změnit roli ve skupině\?</string>
<string name="info_row_connection">Připojení</string>
<string name="conn_level_desc_indirect">nepřímé (<xliff:g id="conn_level">%1$s</xliff:g>)</string>
<string name="conn_stats_section_title_servers">SERVERY</string>
<string name="receiving_via">Příjem prostřednictvím</string>
<string name="create_secret_group_title">Vytvoření tajné skupiny</string>
<string name="group_display_name_field">Zobrazení názvu skupiny:</string>
<string name="group_full_name_field">Úplný název skupiny:</string>
<string name="group_main_profile_sent">Váš profil v chatu bude zaslán členům skupiny</string>
<string name="group_profile_is_stored_on_members_devices">Profil skupiny je uložen v zařízeních členů, nikoli na serverech.</string>
<string name="network_options_save">Uložit</string>
<string name="update_network_settings_question">Aktualizovat nastavení sítě\?</string>
<string name="incognito">Inkognito</string>
<string name="incognito_random_profile">Váš náhodný profil</string>
<string name="incognito_random_profile_description">Vašemu kontaktu bude zaslán náhodný profil</string>
<string name="save_color">Uložit barvu</string>
<string name="reset_color">Obnovení barev</string>
<string name="color_primary">Akcent</string>
<string name="chat_preferences_you_allow">Povolíte</string>
<string name="chat_preferences_default">výchozí (%s)</string>
<string name="chat_preferences_yes">ano</string>
<string name="chat_preferences_no">ne</string>
<string name="chat_preferences_always">vždy</string>
<string name="set_group_preferences">Nastavení skupinových předvoleb</string>
<string name="your_preferences">Vaše preference</string>
<string name="timed_messages">Zmizení zpráv</string>
<string name="feature_enabled_for_contact">povoleno pro kontakt</string>
<string name="feature_received_prohibited">přijaté, zakázané</string>
<string name="both_you_and_your_contact_can_send_disappearing">Vy i váš kontakt můžete posílat mizející zprávy.</string>
<string name="only_your_contact_can_send_disappearing">Zmizelé zprávy může odesílat pouze váš kontakt.</string>
<string name="only_you_can_delete_messages">Nevratně mazat zprávy můžete pouze vy (váš kontakt je může označit ke smazání).</string>
<string name="message_deletion_prohibited">Nevratné mazání zpráv je v tomto chatu zakázáno.</string>
<string name="prohibit_direct_messages">Zakázat odesílání přímých zpráv členům.</string>
<string name="ttl_sec">%d sec</string>
<string name="ttl_s">%ds</string>
<string name="ttl_min">%d min</string>
<string name="ttl_hour">\"%d hodina</string>
<string name="feature_offered_item_with_param">offered %s: %2s</string>
<string name="v4_2_group_links">Odkazy na skupiny</string>
<string name="v4_3_voice_messages">Hlasové zprávy</string>
<string name="v4_3_irreversible_message_deletion_desc">Vaše kontakty mohou povolit úplné vymazání zpráv.</string>
<string name="v4_4_disappearing_messages">Zmizení zpráv</string>
<string name="v4_4_verify_connection_security_desc">Porovnejte bezpečnostní kódy se svými kontakty.</string>
<string name="app_name"><xliff:g id="appName">SimpleX</xliff:g></string>
<string name="thousand_abbreviation">k</string>
<string name="connect_via_contact_link">Připojit se přes kontaktní odkaz\?</string>
<string name="connect_via_invitation_link">Připojit se přes pozvánku\?</string>
<string name="connect_via_group_link">Připojit se přes odkaz skupiny\?</string>
<string name="profile_will_be_sent_to_contact_sending_link">Váš profil bude odeslán kontaktu, od kterého jste obdrželi tento odkaz.</string>
<string name="server_connected">připojeno</string>
<string name="server_error">chyba</string>
<string name="server_connecting">připojení</string>
<string name="trying_to_connect_to_server_to_receive_messages">Pokus o připojení k serveru používanému pro příjem zpráv od tohoto kontaktu.</string>
<string name="deleted_description">Smazáno</string>
<string name="invalid_chat">neplatný chat</string>
<string name="invalid_data">neplatné údaje</string>
<string name="connection_local_display_name">spojení <xliff:g id="connection ID" example="1">%1$d</xliff:g></string>
<string name="display_name_connection_established">spojení navázáno</string>
<string name="display_name_invited_to_connect">pozvánka k připojení</string>
<string name="display_name_connecting">připojení…</string>
<string name="description_you_shared_one_time_link">jste sdíleli jednorázové spojení</string>
<string name="description_you_shared_one_time_link_incognito">sdíleli jste jednorázový odkaz inkognito</string>
<string name="description_via_group_link">prostřednictvím skupinového odkazu</string>
<string name="description_via_contact_address_link">prostřednictvím odkazu na kontaktní adresu</string>
<string name="description_via_contact_address_link_incognito">inkognito přes odkaz na kontaktní adresu</string>
<string name="description_via_one_time_link">prostřednictvím jednorázového odkazu</string>
<string name="description_via_one_time_link_incognito">inkognito přes jednorázový odkaz</string>
<string name="simplex_link_contact">SimpleX kontaktní adresa</string>
<string name="simplex_link_invitation">Jednorázová pozvánka SimpleX</string>
<string name="simplex_link_group">Skupinový odkaz SimpleX</string>
<string name="simplex_link_connection">prostřednictvím <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g></string>
<string name="simplex_link_mode">Odkazy na SimpleX</string>
<string name="simplex_link_mode_description">Popis</string>
<string name="simplex_link_mode_full">Úplný odkaz</string>
<string name="simplex_link_mode_browser">Prostřednictvím prohlížeče</string>
<string name="simplex_link_mode_browser_warning">Otevření odkazu v prohlížeči může snížit soukromí a bezpečnost připojení. Nedůvěryhodné odkazy SimpleX budou červené.</string>
<string name="error_saving_smp_servers">Chyba při ukládání serverů SMP</string>
<string name="error_setting_network_config">Chyba při aktualizaci konfigurace sítě</string>
<string name="failed_to_parse_chat_title">Nepodařilo se načíst chat</string>
<string name="failed_to_parse_chats_title">Nepodařilo se načíst chaty</string>
<string name="contact_developers">Aktualizujte aplikaci a kontaktujte vývojáře.</string>
<string name="connection_timeout">Časový limit připojení</string>
<string name="connection_error">Chyba připojení</string>
<string name="network_error_desc">Zkontrolujte prosím své síťové připojení pomocí <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g> a zkuste to znovu.</string>
<string name="error_sending_message">Chyba při odesílání zprávy</string>
<string name="error_adding_members">Chyba při přidávání prutu(ů)</string>
<string name="contact_already_exists">Kontakt již existuje</string>
<string name="you_are_already_connected_to_vName_via_this_link">Jste již připojeni k <xliff:g id="contactName" example="Alice">%1$s!</xliff:g>.</string>
<string name="invalid_connection_link">Neplatný odkaz na spojení</string>
<string name="error_accepting_contact_request">Chyba příjmu požadavku od kontaktu</string>
<string name="error_changing_address">Chuba změny adresy</string>
<string name="settings_notifications_mode_title">Služba oznamování</string>
<string name="notifications_mode_service_desc">Služba na pozadí je spuštěna vždy - oznámení se zobrazí, jakmile jsou zprávy k dispozici.</string>
<string name="notification_preview_mode_message">Text zprávy</string>
<string name="notification_preview_mode_contact">Jméno kontaktu</string>
<string name="notification_preview_mode_hidden">Skryté</string>
<string name="notification_preview_mode_message_desc">Zobrazit kontakt a zprávu</string>
<string name="notification_contact_connected">Připojeno</string>
<string name="la_notice_title_simplex_lock">SimpleX Lock</string>
<string name="auth_log_in_using_credential">Přihlaste se pomocí svého pověření</string>
<string name="auth_enable_simplex_lock">Zapnutí zámku SimpleX</string>
<string name="reply_verb">Odpovězte na</string>
<string name="share_verb">Sdílet</string>
<string name="copy_verb">Kopírovat</string>
<string name="icon_descr_received_msg_status_unread">nepřečteno</string>
<string name="personal_welcome">Vítejte <xliff:g>%1$s</xliff:g>!</string>
<string name="welcome">Vítejte!</string>
<string name="this_text_is_available_in_settings">Tento text je k dispozici v nastavení</string>
<string name="icon_descr_sent_msg_status_send_failed">odeslání se nezdařilo</string>
<string name="share_file">Sdílet soubor…</string>
<string name="attach">Připojit</string>
<string name="icon_descr_context">Kontextová ikona</string>
<string name="image_decoding_exception_desc">Obrázek nelze dekódovat. Zkuste prosím použít jiný obrázek nebo kontaktujte vývojáře.</string>
<string name="image_descr">Obrázek</string>
<string name="icon_descr_waiting_for_image">Čekání na obrázek</string>
<string name="icon_descr_asked_to_receive">Požádáno o přijetí obrázku</string>
<string name="icon_descr_image_snd_complete">Obrázek odeslán</string>
<string name="waiting_for_image">Čekáme na obrázek</string>
<string name="image_will_be_received_when_contact_is_online">Obrázek bude přijat, až bude váš kontakt online, vyčkejte prosím nebo se podívejte později!</string>
<string name="contact_sent_large_file">Váš kontakt odeslal soubor, který je větší než aktuálně podporovaná maximální velikost (<xliff:g id="maxFileSize">%1$s</xliff:g>).</string>
<string name="maximum_supported_file_size">V současné době je maximální podporovaná velikost souboru <xliff:g id="maxFileSize">%1$s</xliff:g>.</string>
<string name="error_saving_file">Chyba při ukládání souboru</string>
<string name="voice_message">Hlasová zpráva</string>
<string name="voice_message_send_text">Hlasová zpráva…</string>
<string name="icon_descr_server_status_connected">Připojeno</string>
<string name="icon_descr_server_status_disconnected">Odpojeno</string>
<string name="icon_descr_server_status_error">Chyba</string>
<string name="switch_receiving_address_desc">Tato funkce je experimentální! Bude fungovat pouze v případě, že druhý klient má nainstalovanou verzi 4.2. Po dokončení změny adresy by se měla v konverzaci zobrazit zpráva - zkontrolujte, zda můžete od tohoto kontaktu (nebo člena skupiny) stále přijímat zprávy.</string>
<string name="switch_receiving_address_question">Přepnout přijímací adresu\?</string>
<string name="send_verb">Poslat</string>
<string name="you_need_to_allow_to_send_voice">Abyste mohli odesílat hlasové zprávy, musíte je povolit svému kontaktu.</string>
<string name="icon_descr_cancel_live_message">Zrušit živou zprávu</string>
<string name="back">Zpět</string>
<string name="cancel_verb">Zrušit</string>
<string name="reset_verb">Obnovit</string>
<string name="ok">OK</string>
<string name="no_details">bez podrobností</string>
<string name="add_contact">Jednorázový zvací odkaz</string>
<string name="copied">Zkopírováno do schránky</string>
<string name="add_contact_or_create_group">Začít novou konverzaci</string>
<string name="create_group">Vytvořit tajnou skupinu</string>
<string name="to_share_with_your_contact">(sdílet s kontaktem)</string>
<string name="only_stored_on_members_devices">(uloženo pouze členy skupiny)</string>
<string name="toast_permission_denied">Oprávnění zamítnuto!</string>
<string name="use_camera_button">Použít fotoaparát</string>
<string name="from_gallery_button">Z Galerie</string>
<string name="choose_file">Vybrat soubor</string>
<string name="to_start_a_new_chat_help_header">Pro zahájení nové konverzace</string>
<string name="chat_help_tap_button">Klepněte na tlačítko</string>
<string name="above_then_preposition_continuation">nad, potom:</string>
<string name="add_new_contact_to_create_one_time_QR_code"><b>Přidat nový kontakt</b>: vytvořit jednorázový kód QR.</string>
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>Skenovat QR kód</b>: připojení ke kontaktu, který vám ukáže QR kód.</string>
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 desktop: scan displayed QR code from the app, via <b>Scan QR code</b>.</string>
<string name="clear_chat_question">Vyčistit konverzaci\?</string>
<string name="clear_verb">Čistý</string>
<string name="mark_read">Označit přečtení</string>
<string name="mark_unread">Označit jako nepřečtené</string>
<string name="mute_chat">Ztlumit</string>
<string name="unmute_chat">Zrušit ztlumení</string>
<string name="you_invited_your_contact">Pozvali jste svůj kontakt</string>
<string name="contact_you_shared_link_with_wont_be_able_to_connect">Kontakt, se kterým jste tento odkaz sdíleli, se NEBUDE moci připojit!</string>
<string name="connection_you_accepted_will_be_cancelled">Připojení, které jste přijali, bude zrušeno!</string>
<string name="icon_descr_help">help</string>
<string name="icon_descr_simplex_team"><xliff:g id="appName">SimpleX</xliff:g> Tým</string>
<string name="icon_descr_address"><xliff:g id="appName">SimpleX</xliff:g> Adresa</string>
<string name="you_will_be_connected_when_group_host_device_is_online">Ke skupině budete připojeni, až bude zařízení hostitele skupiny online, vyčkejte prosím nebo se podívejte později!</string>
<string name="you_will_be_connected_when_your_connection_request_is_accepted">Budete připojeni, jakmile bude vaše žádost o připojení přijata, vyčkejte prosím nebo se podívejte později!</string>
<string name="connection_request_sent">Požadavek na připojení byl odeslán!</string>
<string name="your_profile_will_be_sent">Váš profil v chatu bude odeslán vašemu kontaktu</string>
<string name="create_one_time_link">Vytvořit jednorázovou pozvánku</string>
<string name="one_time_link">Vytvořit jednorázový zvací odkaz</string>
<string name="security_code">Bezpečnostní kód</string>
<string name="is_verified">\"%s je ověřeno</string>
<string name="chat_console">Konzola pro chat</string>
<string name="smp_servers">SMP servery</string>
<string name="smp_servers_preset_address">Přednastavená adresa serveru</string>
<string name="smp_servers_test_failed">Test serveru se nezdařil!</string>
<string name="smp_servers_test_some_failed">Některé servery neprošly testem:</string>
<string name="smp_servers_scan_qr">Naskenujte QR kód serveru</string>
<string name="smp_servers_enter_manually">Zadejte server ručně</string>
<string name="smp_servers_invalid_address">Neplatná adresa serveru!</string>
<string name="smp_servers_check_address">Zkontrolujte adresu serveru a zkuste to znovu.</string>
<string name="smp_servers_delete_server">Smazat server</string>
<string name="contribute">Přispějte na</string>
<string name="how_to">Jak na to</string>
<string name="how_to_use_your_servers">Jak používat servery</string>
<string name="your_ICE_servers">Vaše servery ICE</string>
<string name="configure_ICE_servers">Konfigurace serverů ICE</string>
<string name="network_settings_title">Nastavení sítě</string>
<string name="network_enable_socks">Použít proxy server SOCKS\?</string>
<string name="network_disable_socks">Použít přímé připojení k internetu\?</string>
<string name="network_use_onion_hosts_no">Ne</string>
<string name="network_use_onion_hosts_no_desc_in_alert">Onion hostitelé nebudou použiti.</string>
<string name="network_session_mode_user">Profil chatu</string>
<string name="network_session_mode_entity">Připojení</string>
<string name="core_simplexmq_version">simplexmq: v%s (%2s)</string>
<string name="create_address">Vytvořit adresu</string>
<string name="accept_automatically">Automaticky</string>
<string name="section_title_welcome_message">UVÍTACÍ ZPRÁVA</string>
<string name="save_and_notify_group_members">Uložit a upozornit členy skupiny</string>
<string name="exit_without_saving">Ukončit bez uložení</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">Platforma pro zasílání zpráv a aplikace chránící vaše soukromí a bezpečnost.</string>
<string name="create_profile">Vytvoření profilu</string>
<string name="profile_is_only_shared_with_your_contacts">Profil je sdílen pouze s vašimi kontakty.</string>
<string name="display_name_cannot_contain_whitespace">Zobrazované jméno nesmí obsahovat bílé znaky.</string>
<string name="bold">tučně</string>
<string name="callstatus_in_progress">probíhající hovor</string>
<string name="decentralized">Decentralizované</string>
<string name="how_it_works">Jak to funguje</string>
<string name="how_simplex_works">Jak funguje <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages">Pouze klientská zařízení ukládají uživatelské profily, kontakty, skupiny a zprávy odesílané pomocí <b>2vrstvého end-to-end šifrování</b>.</string>
<string name="onboarding_notifications_mode_title">Soukromá oznámení</string>
<string name="onboarding_notifications_mode_periodic">Pravidelný</string>
<string name="ignore">Ignorovat</string>
<string name="call_already_ended">Hovor již skončil!</string>
<string name="icon_descr_video_call">videohovor</string>
<string name="icon_descr_audio_call">audio hovor</string>
<string name="settings_audio_video_calls">Audio a video hovory</string>
<string name="call_on_lock_screen">Hovory na uzamčené obrazovce:</string>
<string name="open_simplex_chat_to_accept_call">Otevřete <xliff:g id="appNameFull">SimpleX Chat</xliff:g> pro přijetí hovoru</string>
<string name="allow_accepting_calls_from_lock_screen">Povolte volání ze zamčené obrazovky prostřednictvím Nastavení.</string>
<string name="open_verb">Otevřete stránku</string>
<string name="icon_descr_audio_on">Zvuk zapnut</string>
<string name="icon_descr_speaker_off">Reproduktor vypnut</string>
<string name="icon_descr_speaker_on">Zapnutý reproduktor</string>
<string name="icon_descr_call_progress">Probíhající hovor</string>
<string name="auto_accept_images">Automatické přijímání obrázků</string>
<string name="settings_section_title_settings">NASTAVENÍ</string>
<string name="settings_section_title_help">NÁPOVĚDA</string>
<string name="settings_section_title_device">ZAŘÍZENÍ</string>
<string name="settings_section_title_chats">CHATS</string>
<string name="settings_experimental_features">Experimentální funkce</string>
<string name="settings_section_title_socks">SOCKS PROXY</string>
<string name="settings_section_title_icon">IKONA APLIKACE</string>
<string name="settings_section_title_themes">TÉMATA</string>
<string name="settings_section_title_messages">ZPRÁVY</string>
<string name="settings_section_title_calls">VOLÁNÍ</string>
<string name="export_database">Export databáze</string>
<string name="import_database">Import databáze</string>
<string name="delete_database">Odstranění databáze</string>
<string name="error_exporting_chat_database">Chyba při exportu databáze chatu</string>
<string name="import_database_confirmation">Import</string>
<string name="restart_the_app_to_use_imported_chat_database">Restartujte aplikaci, abyste mohli používat importovanou databázi chatu.</string>
<string name="delete_chat_profile_question">Smazat profil chatu\?</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">Tuto akci nelze vzít zpět - váš profil, kontakty, zprávy a soubory budou nenávratně ztraceny.</string>
<string name="restart_the_app_to_create_a_new_chat_profile">Restartujte aplikaci a vytvořte nový profil chatu.</string>
<string name="you_must_use_the_most_recent_version_of_database">Nejnovější verzi databáze chatu musíte používat POUZE v jednom zařízení, jinak se může stát, že přestanete přijímat zprávy od některých kontaktů.</string>
<string name="stop_chat_to_enable_database_actions">Zastavte chat a povolte akce s databází.</string>
<string name="files_and_media_section">Soubory a média</string>
<string name="delete_files_and_media_question">Smazat soubory a média\?</string>
<string name="delete_messages">Odstranění zpráv</string>
<string name="remove_passphrase_from_keychain">Odstranit přístupovou frázi z úložiště klíčů\?</string>
<string name="notifications_will_be_hidden">Oznámení budou doručována pouze do doby, než se aplikace zastaví!</string>
<string name="remove_passphrase">Odstranit</string>
<string name="update_database">Aktualizovat</string>
<string name="current_passphrase">Aktuální přístupová fráze…</string>
<string name="update_database_passphrase">Aktualizovat přístupovou frázi databáze</string>
<string name="enter_correct_current_passphrase">Zadejte prosím správnou aktuální přístupovou frázi.</string>
<string name="database_is_not_encrypted">Váš databáze konverzace není zašifrována - nastavte přístupovou frázi pro její ochranu.</string>
<string name="keychain_is_storing_securely">K bezpečnému uložení heslové fráze slouží úložiště klíčů Android - umožňuje fungování služby oznámení.</string>
<string name="impossible_to_recover_passphrase"><b>Upozornění</b>: pokud přístupovou frázi ztratíte, NEBUDE možné ji obnovit ani změnit.</string>
<string name="database_will_be_encrypted_and_passphrase_stored">Databáze bude zašifrována a přístupová fráze bude uložena v úložišti klíčů.</string>
<string name="store_passphrase_securely">Heslo uložte bezpečně, v případě jeho ztráty jej NEBUDE možné změnit.</string>
<string name="file_with_path">Soubor: %s</string>
<string name="database_passphrase_is_required">Pro otevření chatu je vyžadována přístupová fráze databáze.</string>
<string name="unknown_error">Neznámá chyba</string>
<string name="open_chat">Otevřete chat</string>
<string name="restore_database">Obnovte zálohu databáze</string>
<string name="restore_database_alert_desc">Po obnovení zálohy databáze zadejte předchozí heslo. Tuto akci nelze vrátit zpět.</string>
<string name="chat_is_stopped_indication">Chat je zastaven</string>
<string name="chat_archive_header">Chat se archivuje</string>
<string name="delete_chat_archive_question">Smazat archiv chatu\?</string>
<string name="join_group_question">Připojit se ke skupině\?</string>
<string name="join_group_button">Připojte se na</string>
<string name="leave_group_button">Opustit</string>
<string name="icon_descr_add_members">Pozvat členy</string>
<string name="alert_title_no_group">Skupina nebyla nalezena!</string>
<string name="alert_title_cant_invite_contacts">Nelze pozvat kontakty!</string>
<string name="snd_group_event_changed_member_role">změnili jste roli %s na %s</string>
<string name="snd_group_event_changed_role_for_yourself">změnili jste svou roli na %s</string>
<string name="snd_group_event_member_deleted">odstranili jste <xliff:g id="profil člena" example="alice (Alice)">%1$s</xliff:g></string>
<string name="snd_group_event_user_left">odešli jste</string>
<string name="rcv_conn_event_switch_queue_phase_completed">změnila se vaše adresa</string>
<string name="icon_descr_expand_role">Rozšířit výběr rolí</string>
<string name="invite_prohibited">Nelze pozvat kontakt!</string>
<string name="failed_to_create_user_duplicate_desc">Již máte profil chatu se stejným zobrazovacím názvem. Zvolte prosím jiné jméno.</string>
<string name="smp_server_test_create_queue">Vytvořit frontu</string>
<string name="smp_server_test_secure_queue">Zabezpečit frontu</string>
<string name="service_notifications">Okamžitá oznámení!</string>
<string name="it_can_disabled_via_settings_notifications_still_shown"><b>V nastavení ji lze vypnout</b> - oznámení se budou zobrazovat pokud aplikace běží.</string>
<string name="turn_off_battery_optimization">Chcete-li ji používat, <b>vypněte optimalizaci baterie</b> pro <xliff:g id="appName">SimpleX</xliff:g> v dalším dialogu. V opačném případě budou oznámení vypnuta.</string>
<string name="periodic_notifications_desc">Aplikace pravidelně načítá nové zprávy - denně spotřebuje několik procent baterie. Aplikace nepoužívá push oznámení - data ze zařízení nejsou odesílána na servery.</string>
<string name="enter_passphrase_notification_title">Je vyžadována přístupová fráze</string>
<string name="enter_passphrase_notification_desc">Chcete-li dostávat oznámení, zadejte přístupovou frázi do databáze.</string>
<string name="database_initialization_error_title">Nelze inicializovat databázi</string>
<string name="hide_notification">Skrýt</string>
<string name="ntf_channel_calls">Volání SimpleX Chat</string>
<string name="notification_preview_new_message">nová zpráva</string>
<string name="notification_new_contact_request">Žádost o nový kontakt</string>
<string name="delete_message_cannot_be_undone_warning">Zpráva bude smazána - nelze to vzít zpět!</string>
<string name="confirm_verb">Potvrdit</string>
<string name="send_us_an_email">Pošlete nám e-mail</string>
<string name="chat_lock">Zámek SimpleX</string>
<string name="install_simplex_chat_for_terminal">Instalace <xliff:g id="appNameFull">SimpleX Chat</xliff:g> pro terminál</string>
<string name="star_on_github">Hvězda na GitHubu</string>
<string name="rate_the_app">Ohodnoťte aplikaci</string>
<string name="your_SMP_servers">Vaše servery SMP</string>
<string name="network_disable_socks_info">Pokud potvrdíte, budou servery pro zasílání zpráv vidět vaši IP adresu a váš poskytovatel - ke kterým serverům se připojujete.</string>
<string name="colored">barevné</string>
<string name="secret">secret</string>
<string name="callstatus_calling">volání…</string>
<string name="callstate_connected">připojeno</string>
<string name="callstate_ended">ukončeno</string>
<string name="next_generation_of_private_messaging">Nová generace soukromých zpráv</string>
<string name="people_can_connect_only_via_links_you_share">Lidé se s vámi mohou spojit pouze prostřednictvím odkazů, které sdílíte.</string>
<string name="integrity_msg_bad_hash">špatný hash zprávy</string>
<string name="chat_database_imported">Importovaná databáze chatu</string>
<string name="new_passphrase">Nová přístupová fráze…</string>
<string name="save_passphrase_and_open_chat">Uložte heslo a otevřete chat</string>
<string name="chat_archive_section">ARCHIV CHATU</string>
<string name="no_contacts_selected">Nebyl vybrán žádný kontakt</string>
<string name="invite_prohibited_description">Snažíte se pozvat kontakt, se kterým jste sdíleli inkognito profil, do skupiny, ve které používáte svůj hlavní profil</string>
<string name="info_row_group">Skupina</string>
<string name="network_options_revert">Vrátit</string>
<string name="updating_settings_will_reconnect_client_to_all_servers">Aktualizací nastavení se klient znovu připojí ke všem serverům.</string>
<string name="accept_feature_set_1_day">Nastavit 1 den</string>
<string name="connection_error_auth">Chyba spojení (AUTH)</string>
<string name="sender_may_have_deleted_the_connection_request">Odesílatel možná smazal požadavek připojení</string>
<string name="error_smp_test_server_auth">Server vyžaduje autorizaci pro vytváření front, zkontrolujte heslo</string>
<string name="smp_server_test_delete_queue">Odstranit frontu</string>
<string name="delete_group_menu_action">Smazat</string>
<string name="delete_pending_connection__question">Smazat čekající připojení\?</string>
<string name="icon_descr_settings">Nastavení</string>
<string name="image_descr_qr_code">QR kód</string>
<string name="show_QR_code_for_your_contact_to_scan_from_the_app__multiline">Váš kontakt může z aplikace naskenovat QR kód.</string>
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel">Pokud se nemůžete setkat osobně, ukažte <b>ve videohovoru QR kód</b> nebo sdílejte odkaz.</string>
<string name="scan_code">Skenovat kód</string>
<string name="incorrect_code">Nesprávný bezpečnostní kód!</string>
<string name="scan_code_from_contacts_app">Naskenujte bezpečnostní kód z aplikace vašeho kontaktu.</string>
<string name="mark_code_verified">Označit jako ověřený</string>
<string name="clear_verification">Zrušte ověření</string>
<string name="to_verify_compare">Chcete-li ověřit koncové šifrování u svého kontaktu, porovnejte (nebo naskenujte) kód na svých zařízeních.</string>
<string name="your_settings">Vaše nastavení</string>
<string name="your_simplex_contact_address">Vaše <xliff:g id="appName">Adresa kontaktu SimpleX</xliff:g></string>
<string name="database_passphrase_and_export">Databázová hesla a export</string>
<string name="your_chat_profiles">Vaše profily v chatu</string>
<string name="chat_with_the_founder">Zasílání otázek a nápadů</string>
<string name="smp_servers_test_server">Testovací server</string>
<string name="enter_one_ICE_server_per_line">Servery ICE (jeden na řádek)</string>
<string name="network_use_onion_hosts_required_desc">Pro připojení budou vyžadováni Onion hostitelé.</string>
<string name="update_network_session_mode_question">Aktualizovat režim izolace\?</string>
<string name="app_version_code">Sestavení aplikace: %s</string>
<string name="you_can_share_your_address_anybody_will_be_able_to_connect">Můžete sdílet svou adresu jako odkaz nebo jako QR kód - kdokoli se k vám bude moci připojit. O své kontakty nepřijdete, pokud ji později smažete.</string>
<string name="share_link">Sdílet odkaz</string>
<string name="delete_address">Odstranit adresu</string>
<string name="full_name__field">Celé jméno:</string>
<string name="your_current_profile">Váš současný profil</string>
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery">Pro zachování soukromí má aplikace místo push oznámení <b><xliff:g id="appName">SimpleX</xliff:g> službu na pozadí</b> - denně spotřebuje několik procent baterie.</string>
<string name="periodic_notifications">Pravidelná oznámení</string>
<string name="simplex_service_notification_title"><xliff:g id="appNameFull">SimpleX Chat</xliff:g> služba</string>
<string name="simplex_service_notification_text">Příjem zpráv…</string>
<string name="ntf_channel_messages">Zprávy SimpleX Chat</string>
<string name="settings_notification_preview_mode_title">Zobrazení náhledu</string>
<string name="settings_notification_preview_title">Náhled oznámení</string>
<string name="notifications_mode_off">Spustí se při otevření aplikace</string>
<string name="notifications_mode_periodic">Spouští se pravidelně</string>
<string name="notifications_mode_service">Vždy zapnuto</string>
<string name="notifications_mode_periodic_desc">Kontroluje nové zprávy každých 10 minut po dobu až 1 minuty</string>
<string name="notification_preview_mode_contact_desc">Zobrazit pouze kontakt</string>
<string name="notification_preview_somebody">Skrytý kontakt:</string>
<string name="la_notice_turn_on">Zapněte funkci</string>
<string name="auth_simplex_lock_turned_on">Zapnutý zámek SimpleX Lock</string>
<string name="auth_unlock">Odemknutí stránky</string>
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">Ověřování zařízení není povoleno. Jakmile povolíte ověřování zařízení, můžete zámek SimpleX Lock zapnout prostřednictvím Nastavení.</string>
<string name="auth_device_authentication_is_disabled_turning_off">Ověřování zařízení je zakázáno. Vypnutí zámku SimpleX Lock.</string>
<string name="edit_verb">Upravit</string>
<string name="delete_verb">Smazat</string>
<string name="for_everybody">Pro všechny</string>
<string name="icon_descr_sent_msg_status_sent">odesláno</string>
<string name="contact_connection_pending">připojení…</string>
<string name="images_limit_desc">Současně lze odeslat pouze 10 obrázků</string>
<string name="image_decoding_exception_title">Chyba dekódování</string>
<string name="image_saved">Obrázek uložen do galerie</string>
<string name="icon_descr_file">Soubor</string>
<string name="large_file">Velký soubor!</string>
<string name="file_will_be_received_when_contact_is_online">Soubor bude přijat, až bude váš kontakt online, vyčkejte prosím nebo se podívejte později!</string>
<string name="file_saved">Soubor uložen</string>
<string name="file_not_found">Soubor nebyl nalezen</string>
<string name="voice_message_with_duration">Hlasová zpráva (<xliff:g id="duration">%1$s</xliff:g>)</string>
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">Kontakt a všechny zprávy budou smazány - nelze to vzít zpět!</string>
<string name="button_delete_contact">Smazat kontakt</string>
<string name="text_field_set_contact_placeholder">Nastavení jména kontaktu…</string>
<string name="view_security_code">Zobrazení bezpečnostního kódu</string>
<string name="icon_descr_record_voice_message">Nahrát hlasovou zprávu</string>
<string name="voice_messages_prohibited">Hlasové zprávy jsou zakázány!</string>
<string name="ask_your_contact_to_enable_voice">Prosím, požádejte kontaktní osobu, aby umožnila odesílání hlasových zpráv.</string>
<string name="send_live_message_desc">Poslat živou zprávu - zpráva se bude aktualizovat pro příjemce během psaní.</string>
<string name="share_one_time_link">Vytvořit jednorázovou pozvánku</string>
<string name="scan_QR_code">Skenovat QR kód</string>
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">( skenovat nebo vložit ze schránky)</string>
<string name="edit_image">Upravit obrázek</string>
<string name="delete_image">Smazat obrázek</string>
<string name="callstatus_error">chyba volání</string>
<string name="opensource_protocol_and_code_anybody_can_run_servers">Protokol a kód s otevřeným zdrojovým kódem - servery může provozovat kdokoli.</string>
<string name="create_your_profile">Vytvořte si svůj profil</string>
<string name="make_private_connection">Vytvořte si soukromé připojení</string>
<string name="encrypted_video_call">Videohovor šifrovaný e2e</string>
<string name="encrypted_audio_call">e2e šifrovaný audio hovor</string>
<string name="status_contact_has_e2e_encryption">kontakt má šifrování e2e</string>
<string name="status_contact_has_no_e2e_encryption">kontakt nemá šifrování e2e</string>
<string name="call_connection_peer_to_peer">peer-to-peer</string>
<string name="call_connection_via_relay">přes relé</string>
<string name="icon_descr_hang_up">Zavěsit</string>
<string name="icon_descr_video_off">Video vypnuto</string>
<string name="icon_descr_video_on">Video zapnuto</string>
<string name="icon_descr_audio_off">Zvuk vypnutý</string>
<string name="integrity_msg_bad_id">špatné ID zprávy</string>
<string name="integrity_msg_duplicate">duplicitní zpráva</string>
<string name="alert_title_skipped_messages">Přeskočené zprávy</string>
<string name="privacy_and_security">Ochrana osobních údajů a zabezpečení</string>
<string name="your_privacy">Vaše soukromí</string>
<string name="protect_app_screen">Ochrana obrazovky aplikace</string>
<string name="send_link_previews">Odesílání náhledů odkazů</string>
<string name="full_backup">Zálohování dat aplikace</string>
<string name="confirm_new_passphrase">Potvrdit novou heslovou frázi…</string>
<string name="error_with_info">Chyba: %s</string>
<string name="leave_group_question">Opustit skupinu\?</string>
<string name="icon_descr_group_inactive">Skupina je neaktivní</string>
<string name="rcv_group_event_member_left">left</string>
<string name="clear_contacts_selection_button">Vymazat</string>
<string name="switch_verb">Přepnout</string>
<string name="member_role_will_be_changed_with_notification">Role bude změněna na \"%s\". Všichni ve skupině budou informováni.</string>
<string name="error_removing_member">Chyba při odebrání člena</string>
<string name="error_saving_group_profile">Chyba při ukládání profilu skupiny</string>
<string name="network_option_seconds_label">sec</string>
<string name="incognito_info_allows">Umožňuje mít v jednom profilu chatu mnoho anonymních spojení bez jakýchkoli sdílených údajů mezi nimi.</string>
<string name="incognito_info_share">Pokud s někým sdílíte inkognito profil, bude tento profil použit pro skupiny, do kterých vás pozve.</string>
<string name="theme_system">Systém</string>
<string name="voice_messages">Hlasové zprávy</string>
<string name="both_you_and_your_contacts_can_delete">Vy i váš kontakt můžete nevratně mazat odeslané zprávy.</string>
<string name="ttl_m">\"%dm</string>
<string name="ttl_mth">\"%dmth</string>
<string name="ttl_hours">\"%d hodin</string>
<string name="ttl_h">\"%dh</string>
<string name="ttl_d">\"%dd</string>
<string name="v4_2_security_assessment">Posouzení bezpečnosti</string>
<string name="v4_2_security_assessment_desc">Bezpečnost SimpleX Chat byla prověřena společností Trail of Bits.</string>
<string name="v4_3_irreversible_message_deletion">Nevratné mazání zpráv</string>
<string name="v4_3_improved_server_configuration">Vylepšená konfigurace serveru</string>
<string name="v4_3_improved_privacy_and_security">Vylepšená ochrana soukromí a zabezpečení</string>
<string name="v4_3_improved_privacy_and_security_desc">Skrytí obrazovky aplikace v posledních aplikacích.</string>
<string name="v4_4_disappearing_messages_desc">Odeslané zprávy se po uplynutí nastavené doby odstraní.</string>
<string name="v4_4_live_messages">Živé zprávy</string>
<string name="v4_4_live_messages_desc">Příjemci uvidí aktualizace během jejich psaní.</string>
<string name="v4_4_verify_connection_security">Ověření zabezpečení připojení</string>
<string name="v4_4_french_interface">Francouzské rozhraní</string>
<string name="v4_4_french_interface_descr">Díky uživatelům - přispívejte prostřednictvím Weblate!</string>
<string name="v4_5_multiple_chat_profiles">Více chatovacích profilů</string>
<string name="v4_5_multiple_chat_profiles_descr">Různá jména, avatary a dopravní izolace.</string>
<string name="v4_5_message_draft">Návrh zprávy</string>
<string name="v4_5_message_draft_descr">Zachování posledního návrhu zprávy s přílohami.</string>
<string name="v4_5_transport_isolation">Izolace transportu</string>
<string name="v4_5_transport_isolation_descr">Podle profilu chatu (výchozí) nebo podle připojení (BETA).</string>
<string name="you_will_join_group">Připojíte se ke skupině, na kterou tento odkaz odkazuje, a spojíte se s jejími členy.</string>
<string name="connect_via_link_verb">Připojení</string>
<string name="connected_to_server_to_receive_messages_from_contact">Jste připojeni k serveru, který se používá k přijímání zpráv od tohoto kontaktu.</string>
<string name="trying_to_connect_to_server_to_receive_messages_with_error">Pokoušíte se připojit k serveru používanému pro příjem zpráv od tohoto kontaktu (chyba: <xliff:g id="errorMsg">%1$s</xliff:g>).</string>
<string name="marked_deleted_description">označeno jako smazáno</string>
<string name="sending_files_not_yet_supported">Odesílání souborů zatím není podporováno</string>
<string name="receiving_files_not_yet_supported">přijímání souborů zatím není podporováno</string>
<string name="sender_you_pronoun">ty</string>
<string name="unknown_message_format">neznámý formát zprávy</string>
<string name="invalid_message_format">neplatný formát zprávy</string>
<string name="live">ŽIVĚ</string>
<string name="description_via_group_link_incognito">inkognito přes skupinový odkaz</string>
<string name="ensure_smp_server_address_are_correct_format_and_unique">Ujistěte se, že adresy serverů SMP jsou ve správném formátu, oddělené na řádcích a nejsou duplicitní.</string>
<string name="failed_to_create_user_title">Chyba při vytváření profilu!</string>
<string name="failed_to_create_user_duplicate_title">Duplicitní zobrazované jméno!</string>
<string name="failed_to_active_user_title">Chyba při přepínání profilu!</string>
<string name="error_joining_group">Chyba při připojování ke skupině</string>
<string name="cannot_receive_file">Nelze přijmout soubor</string>
<string name="sender_cancelled_file_transfer">Odesílatel zrušil přenos souboru.</string>
<string name="error_receiving_file">Chyba při příjmu souboru</string>
<string name="error_creating_address">Chyba při vytváření adresy</string>
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">Zkontrolujte, zda jste použili správný odkaz, nebo požádejte kontakt, aby vám poslal jiný.</string>
<string name="connection_error_auth_desc">Pokud váš kontakt spojení nesmazal nebo tento odkaz již byl použit, může se jednat o chybu - nahlaste ji prosím. Chcete-li se připojit, požádejte prosím svůj kontakt o vytvoření jiného odkazu pro připojení a zkontrolujte, zda máte stabilní připojení k síti.</string>
<string name="error_deleting_contact">Chyba mazání kontaktu</string>
<string name="error_deleting_group">Chyba mazání skupiny</string>
<string name="error_deleting_contact_request">Chyba mazání žádosti kontaktu</string>
<string name="error_deleting_pending_contact_connection">Chyba mazání probíhajícího připojení kontaktu</string>
<string name="error_smp_test_failed_at_step">Test selhal v kroku %s.</string>
<string name="error_smp_test_certificate">Je možné, že otisk certifikátu v adrese serveru je nesprávný.</string>
<string name="smp_server_test_connect">Připojit</string>
<string name="smp_server_test_disconnect">Odpojit</string>
<string name="error_deleting_user">Chyba mazání uživatelského profilu</string>
<string name="icon_descr_instant_notifications">Okamžitá oznámení</string>
<string name="service_notifications_disabled">Okamžitá oznámení jsou vypnutá!</string>
<string name="turning_off_service_and_periodic">Je aktivní optimalizace baterie, která vypíná službu na pozadí a pravidelné požadavky na nové zprávy. Můžete je znovu povolit prostřednictvím nastavení.</string>
<string name="periodic_notifications_disabled">Pravidelná oznámení jsou vypnuta!</string>
<string name="database_initialization_error_desc">Databáze nefunguje správně. Klepnutím na se dozvíte více</string>
<string name="notifications_mode_off_desc">Aplikace může přijímat oznámení pouze při svém spuštění, žádná služba na pozadí se nespustí</string>
<string name="notification_display_mode_hidden_desc">Skrýt kontakt a zprávu</string>
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">Chcete-li chránit své informace, zapněte zámek SimpleX Lock. Před zapnutím této funkce budete vyzváni k dokončení ověření.</string>
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">Při spuštění nebo obnovení aplikace po 30 sekundách na pozadí budete vyzváni k ověření.</string>
<string name="auth_disable_simplex_lock">Vypnutí zámku SimpleX</string>
<string name="auth_confirm_credential">Potvrďte své pověření</string>
<string name="auth_unavailable">Ověřování není k dispozici</string>
<string name="auth_stop_chat">Zastavení chatu</string>
<string name="auth_open_chat_console">Otevřete konzolu chatu</string>
<string name="message_delivery_error_title">Chyba doručení zprávy</string>
<string name="message_delivery_error_desc">Tento kontakt s největší pravděpodobností smazal spojení s vámi.</string>
<string name="save_verb">Uložit</string>
<string name="reveal_verb">Odhalit</string>
<string name="hide_verb">Skrýt</string>
<string name="delete_message__question">Smazat zprávu\?</string>
<string name="delete_message_mark_deleted_warning">Zpráva bude označena ke smazání. Příjemce (příjemci) bude moci tuto zprávu odhalit.</string>
<string name="for_me_only">Smazat pro mě</string>
<string name="icon_descr_edited">upraveno</string>
<string name="icon_descr_sent_msg_status_unauthorized_send">neautorizované odeslání</string>
<string name="group_preview_you_are_invited">jste pozváni do skupiny</string>
<string name="group_preview_join_as">připojit jako %s</string>
<string name="group_connection_pending">připojuje se…</string>
<string name="tap_to_start_new_chat">Klepnutím na zahájíte nový chat</string>
<string name="chat_with_developers">Chatujte s vývojáři</string>
<string name="you_have_no_chats">Nemáte žádné konverzace</string>
<string name="icon_descr_cancel_image_preview">Zrušit náhled obrázku</string>
<string name="share_message">Sdílet zprávu…</string>
<string name="share_image">Sdílet obrázek…</string>
<string name="icon_descr_cancel_file_preview">Zrušit náhled souboru</string>
<string name="images_limit_title">Příliš mnoho obrázků!</string>
<string name="waiting_for_file">Čekání na soubor</string>
<string name="notifications">Oznámení</string>
<string name="delete_contact_question">Smazat kontakt\?</string>
<string name="icon_descr_server_status_pending">Čeká na vyřízení</string>
<string name="verify_security_code">Ověření bezpečnostního kódu</string>
<string name="icon_descr_send_message">Odeslat zprávu</string>
<string name="only_group_owners_can_enable_voice">Pouze majitelé skupin mohou povolit zasílání hlasových zpráv.</string>
<string name="send_live_message">Odeslat živou zprávu</string>
<string name="live_message">Živé zprávy!</string>
<string name="connect_via_link_or_qr">Připojit se prostřednictvím odkazu / QR kódu</string>
<string name="thank_you_for_installing_simplex">Děkujeme za instalaci <xliff:g id="appNameFull">SimpleX Chat</xliff:g>!</string>
<string name="you_can_connect_to_simplex_chat_founder">Můžete se <font color="#0088ff">připojit k <xliff:g id="appNameFull">SimpleX Chat</xliff:g> vývojářům a položit jim případné dotazy a získat aktualizace</font>.</string>
<string name="to_connect_via_link_title">K připojení prostřednictvím odkazu</string>
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">Pokud jste dostal <xliff:g id="appName">SimpleX Chat</xliff:g> zvací odkaz, Můžete ho otevřít v prohlížeči:</string>
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">Pokud zvolíte odmítnutí, odesílatel NEBUDE upozorněn.</string>
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app">📱 mobilní telefon: tap <b>Otevřete v mobilní aplikaci</b>, potom klikněte <b>Připojit</b>.</string>
<string name="reject_contact_button">Odmítnout</string>
<string name="clear_chat_button">Čistá konverzace</string>
<string name="clear_chat_menu_action">Čistý</string>
<string name="delete_contact_menu_action">Smazat</string>
<string name="set_contact_name">Nastavit jméno kontaktu</string>
<string name="you_accepted_connection">Přijali jste spojení</string>
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">Aby se připojení dokončilo, musí být váš kontakt online. Toto připojení můžete zrušit a kontakt odebrat (a zkusit to později s novým odkazem).</string>
<string name="contact_wants_to_connect_with_you">Chce se s vámi spojit!</string>
<string name="icon_descr_profile_image_placeholder">Zástupce profilového obrázku</string>
<string name="image_descr_profile_image">profilový obrázek</string>
<string name="icon_descr_close_button">Tlačítko Zavřít</string>
<string name="alert_title_contact_connection_pending">Kontakt ještě není připojen!</string>
<string name="image_descr_link_preview">náhledový obrázek odkazu</string>
<string name="icon_descr_cancel_link_preview">Zrušit náhled odkazu</string>
<string name="image_descr_simplex_logo"><xliff:g id="appName">SimpleX</xliff:g> Logo</string>
<string name="icon_descr_email">E-mail</string>
<string name="icon_descr_more_button">Více na</string>
<string name="show_QR_code">Zobrazit QR kód</string>
<string name="invalid_QR_code">Neplatný QR kód</string>
<string name="this_QR_code_is_not_a_link">Tento QR kód není odkaz!</string>
<string name="invalid_contact_link">Neplatný odkaz!</string>
<string name="this_link_is_not_a_valid_connection_link">Tento odkaz není platným odkazem pro připojení!</string>
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">Pokud se nemůžete setkat osobně, můžete <b>skenovat QR kód ve videohovoru</b> nebo může váš kontakt sdílet pozvánku.</string>
<string name="connect_via_link">Připojte se prostřednictvím odkazu</string>
<string name="connect_button">Připojit</string>
<string name="paste_button">Vložit</string>
<string name="this_string_is_not_a_connection_link">Tento řetězec není odkazem na připojení!</string>
<string name="you_can_also_connect_by_clicking_the_link">Můžete se také připojit kliknutím na odkaz. Pokud se otevře v prohlížeči, klikněte na tlačítko <b>Otevřít v mobilní aplikaci</b>.</string>
<string name="is_not_verified">\"%s není ověřeno</string>
<string name="how_to_use_simplex_chat">Jak ji používat</string>
<string name="markdown_help">Nápověda k markdown</string>
<string name="smp_servers_save">Uložit servery</string>
<string name="markdown_in_messages">Markdown ve zprávách</string>
<string name="smp_servers_test_servers">Testovací servery</string>
<string name="smp_servers_preset_server">Přednastavený server</string>
<string name="smp_servers_your_server">Váš server</string>
<string name="smp_servers_your_server_address">Adresa vašeho serveru</string>
<string name="smp_servers_use_server">Použít server</string>
<string name="smp_servers_use_server_for_new_conn">Použít pro nová připojení</string>
<string name="smp_servers_per_user">Servery pro nová připojení vašeho aktuálního profilu chatu.</string>
<string name="use_simplex_chat_servers__question">Použít <xliff:g id="appNameFull">SimpleX Chat</xliff:g> servery\?</string>
<string name="using_simplex_chat_servers">Použití <xliff:g id="appNameFull">SimpleX Chat</xliff:g> serverů.</string>
<string name="saved_ICE_servers_will_be_removed">Uložené servery WebRTC ICE budou odstraněny.</string>
<string name="error_saving_ICE_servers">Chyba při ukládání serverů ICE</string>
<string name="ensure_ICE_server_address_are_correct_format_and_unique">Ujistěte se, že adresy serverů WebRTC ICE jsou ve správném formátu, oddělené na řádcích a nejsou duplicitní.</string>
<string name="save_servers_button">Uložit</string>
<string name="network_and_servers">Síť a servery</string>
<string name="network_socks_toggle">Použít proxy server SOCKS (port 9050)</string>
<string name="update_onion_hosts_settings_question">Aktualizovat nastavení hostitelů .onion\?</string>
<string name="network_use_onion_hosts">Použít hostitele .onion</string>
<string name="network_use_onion_hosts_prefer">Když je k dispozici</string>
<string name="network_use_onion_hosts_required">Povinné</string>
<string name="network_use_onion_hosts_prefer_desc">Onion hostitelé se použijí, pokud jsou k dispozici.</string>
<string name="network_use_onion_hosts_no_desc">Onion hostitelé nebudou použiti.</string>
<string name="network_use_onion_hosts_prefer_desc_in_alert">Onion hostitelé budou použiti, pokud budou k dispozici.</string>
<string name="network_use_onion_hosts_required_desc_in_alert">Pro připojení budou vyžadováni Onion hostitelé.</string>
<string name="network_session_mode_transport_isolation">Izolace přenosu</string>
<string name="network_session_mode_user_description">A separate TCP connection (and SOCKS credential) will be used <b>for each chat profile you have in the app</b>.</string>
<string name="network_session_mode_entity_description">Oddělit TCP připojení (a SOCKS pověření) bude použito <b>pro všechny kontakty a členy skupin</b>. <b>Upozornění</b>: Pokud máte mnoho připojení, může být spotřeba baterie a provoz podstatně vyšší a některá připojení mohou selhat.</string>
<string name="appearance_settings">Vzhled</string>
<string name="app_version_title">Verze aplikace</string>
<string name="app_version_name">Verze aplikace: v%s</string>
<string name="core_version">Verze jádra: v%s</string>
<string name="core_build_timestamp">Jádro sestaveno na: %s</string>
<string name="delete_address__question">Smazat adresu\?</string>
<string name="all_your_contacts_will_remain_connected">Všechny vaše kontakty zůstanou připojeny.</string>
<string name="contact_requests">Žádosti o kontakt</string>
<string name="display_name__field">Zobrazované jméno:</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Váš profil je uložen v zařízení a je sdílen pouze s vašimi kontakty. <xliff:g id="appName">SimpleX</xliff:g> servery váš profil nevidí.</string>
<string name="save_preferences_question">Uložit předvolby\?</string>
<string name="save_and_notify_contact">Uložit a upozornit kontakt</string>
<string name="save_and_notify_contacts">Uložit a upozornit kontakty</string>
<string name="you_control_your_chat">Chat máte pod kontrolou!</string>
<string name="we_do_not_store_contacts_or_messages_on_servers">Na serverech neukládáme žádné vaše kontakty ani zprávy (po doručení).</string>
<string name="your_profile_is_stored_on_your_device">Váš profil, kontakty a doručené zprávy jsou uloženy ve vašem zařízení.</string>
<string name="display_name">Zobrazované jméno</string>
<string name="full_name_optional__prompt">Celé jméno (volitelné)</string>
<string name="create_profile_button">Vytvořit</string>
<string name="how_to_use_markdown">Jak používat markdown</string>
<string name="you_can_use_markdown_to_format_messages__prompt">K formátování zpráv můžete použít markdown:</string>
<string name="italic">kurzíva</string>
<string name="strikethrough">přeškrtnout</string>
<string name="callstatus_missed">zmeškané volání</string>
<string name="callstatus_rejected">odmítnutý hovor</string>
<string name="callstatus_connecting">spojovací hovor…</string>
<string name="callstatus_ended">hovor ukončen <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
<string name="callstate_starting">začíná…</string>
<string name="callstate_waiting_for_answer">čeká na odpověď…</string>
<string name="callstate_waiting_for_confirmation">čekání na potvrzení…</string>
<string name="callstate_received_answer">obdržel odpověď…</string>
<string name="callstate_received_confirmation">obdržel potvrzení…</string>
<string name="callstate_connecting">připojení…</string>
<string name="privacy_redefined">Nové vymezení soukromí</string>
<string name="first_platform_without_user_ids">1. Platforma bez identifikátorů uživatelů - soukromá už od záměru.</string>
<string name="immune_to_spam_and_abuse">Odolná vůči spamu a zneužití</string>
<string name="to_protect_privacy_simplex_has_ids_for_queues">K ochraně soukromí, místo uživatelských ID používaných všemi ostatními platformami, <xliff:g id="appName">SimpleX</xliff:g> má identifikátory pro fronty zpráv, zvlášť pro každý z vašich kontaktů.</string>
<string name="many_people_asked_how_can_it_deliver">Mnoho lidí se ptalo: <i>if <xliff:g id="appName">SimpleX</xliff:g> nemá žádné identifikátory uživatelů, jak může doručovat zprávy\?</i></string>
<string name="you_control_servers_to_receive_your_contacts_to_send">Vy kontrolujete přez který server(y) <b>přijímat</b> zprávy, vaše kontakty - servery které používáte pro konverzaci.</string>
<string name="read_more_in_github">Další informace najdete v našem repozitáři GitHub.</string>
<string name="read_more_in_github_with_link">Další informace najdete v našem <font color="#0088ff">úložišti GitHub</font>.</string>
<string name="use_chat">Konverzovat</string>
<string name="onboarding_notifications_mode_subtitle">Lze změnit později v nastavení.</string>
<string name="onboarding_notifications_mode_off">Když je aplikace spuštěná</string>
<string name="onboarding_notifications_mode_service">Okamžitý</string>
<string name="onboarding_notifications_mode_off_desc"><b>Nejlepší pro baterii</b>. Budete přijímat oznámení pouze když aplikace běží, služba na pozadí NEBUDE použita.</string>
<string name="onboarding_notifications_mode_periodic_desc">&lt;Dobré pro baterii&lt;/b&gt;. Služba na pozadí kontroluje nové zprávy každých 10 minut. Můžete zmeškat hovory a naléhavé zprávy.</string>
<string name="onboarding_notifications_mode_service_desc"><b>Využívá více baterie</b>! Služba na pozadí je spuštěna vždy - oznámení se zobrazí, jakmile jsou zprávy k dispozici.</string>
<string name="paste_the_link_you_received">Vložení přijatého odkazu</string>
<string name="incoming_video_call">Příchozí videohovor</string>
<string name="incoming_audio_call">Příchozí zvukový hovor</string>
<string name="contact_wants_to_connect_via_call"><xliff:g id="contactName" example="Alice">%1$s</xliff:g> se s vámi chce spojit prostřednictvím</string>
<string name="video_call_no_encryption">videohovoru (nešifrovaného e2e).</string>
<string name="audio_call_no_encryption">zvukový hovor (nešifrovaný e2e)</string>
<string name="reject">Odmítnout</string>
<string name="your_calls">Vaše hovory</string>
<string name="connect_calls_via_relay">Spojení přes relé</string>
<string name="show_call_on_lock_screen">Zobrazit</string>
<string name="no_call_on_lock_screen">Zakázat</string>
<string name="your_ice_servers">Vaše servery ICE</string>
<string name="webrtc_ice_servers">WebRTC servery ICE</string>
<string name="status_no_e2e_encryption">bez šifrování e2e</string>
<string name="icon_descr_flip_camera">Flipová kamera</string>
<string name="icon_descr_call_pending_sent">Probíhající hovor</string>
<string name="icon_descr_call_missed">Zmeškaný hovor</string>
<string name="icon_descr_call_rejected">Odmítnutý hovor</string>
<string name="icon_descr_call_connecting">Spojení hovoru</string>
<string name="icon_descr_call_ended">Ukončený hovor</string>
<string name="answer_call">Přijmout hovor</string>
<string name="integrity_msg_skipped"><xliff:g id="connection ID" example="1">%1$d</xliff:g> přeskočená zpráva (zprávy)</string>
<string name="alert_text_skipped_messages_it_can_happen_when">Může se to stát, když: 1. Zprávy na serveru vyprší, pokud nebyly přijaty po dobu 30 dnů, 2. Server, který používáte pro příjem zpráv od tohoto kontaktu, byl aktualizován a restartován. 3. Spojení je narušeno. Připojte se k vývojářům prostřednictvím Nastavení, abyste mohli dostávat aktualizace o serverech. Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.</string>
<string name="settings_section_title_you">VY</string>
<string name="settings_section_title_support">PODPORA SIMPLEX CHAT</string>
<string name="settings_section_title_develop">DEVELOP</string>
<string name="settings_developer_tools">Nástroje pro vývojáře</string>
<string name="settings_section_title_incognito">Režim inkognito</string>
<string name="your_chat_database">Vaše chatovací databáze</string>
<string name="run_chat_section">SPUSTIT CHAT</string>
<string name="chat_is_running">Chat je spuštěn</string>
<string name="chat_is_stopped">Chat je zastaven</string>
<string name="chat_database_section">CHAT DATABÁZE</string>
<string name="database_passphrase">Heslo databáze</string>
<string name="new_database_archive">Archiv nové databáze</string>
<string name="old_database_archive">Archiv staré databáze</string>
<string name="error_starting_chat">Chyba při spuštění chatu</string>
<string name="stop_chat_question">Zastavit chat\?</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">Zastavení chatu pro export, import nebo smazání databáze chatu. Během zastavení chatu nebudete moci přijímat a odesílat zprávy.</string>
<string name="stop_chat_confirmation">Zastavit</string>
<string name="set_password_to_export">Nastavení přístupové fráze pro export</string>
<string name="set_password_to_export_desc">Databáze je šifrována pomocí náhodné přístupové fráze. Před exportem ji změňte.</string>
<string name="error_stopping_chat">Chyba při zastavení chatu</string>
<string name="import_database_question">Importovat databázi chatu\?</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">Vaše aktuální databáze chatu bude Smazána a Nahrazena importovanou databází. Tuto akci nelze vzít zpět - váš profil, kontakty, zprávy a soubory budou nenávratně ztraceny.</string>
<string name="error_deleting_database">Chyba při mazání databáze chatu</string>
<string name="error_importing_database">Chyba při importu databáze chatu</string>
<string name="chat_database_deleted">Databáze chatu odstraněna</string>
<string name="delete_files_and_media_for_all_users">Odstranění souborů pro všechny profily chatu</string>
<string name="delete_files_and_media_all">Odstranit všechny soubory</string>
<string name="delete_files_and_media_desc">Tuto akci nelze vrátit zpět - všechny přijaté a odeslané soubory a média budou smazány. Obrázky s nízkým rozlišením zůstanou zachovány.</string>
<string name="no_received_app_files">Žádné přijaté ani odeslané soubory</string>
<string name="total_files_count_and_size">%d soubor(ů) s celkovou velikostí %s</string>
<string name="chat_item_ttl_none">nikdy</string>
<string name="chat_item_ttl_seconds">\"%s vteřin(y)</string>
<string name="messages_section_title">Zprávy</string>
<string name="messages_section_description">Toto nastavení se vztahuje na zprávy ve vašem aktuálním profilu chatu.</string>
<string name="delete_messages_after">Smazat zprávy po</string>
<string name="enable_automatic_deletion_question">Povolit automatické mazání zpráv\?</string>
<string name="enable_automatic_deletion_message">Tuto akci nelze vzít zpět - zprávy odeslané a přijaté dříve, než bylo zvoleno, budou smazány. Může to trvat několik minut.</string>
<string name="error_changing_message_deletion">Chyba změny nastavení</string>
<string name="save_passphrase_in_keychain">Uložit přístupovou frázi do úložiště klíčů</string>
<string name="database_encrypted">Databáze zašifrována!</string>
<string name="error_encrypting_database">Chyba šifrování databáze</string>
<string name="encrypt_database">Šifrovat</string>
<string name="encrypted_with_random_passphrase">Databáze je zašifrována pomocí náhodné přístupové fráze, můžete ji změnit.</string>
<string name="keychain_allows_to_receive_ntfs">K bezpečnému uložení přístupové fráze se použije úložiště klíčů Android, po restartování aplikace nebo změně přístupové fráze - umožní přijímání oznámení.</string>
<string name="you_have_to_enter_passphrase_every_time">Musíte zadat přístupovou frázi při každém spuštění aplikace - není uložena v zařízení.</string>
<string name="encrypt_database_question">Šifrovat databázi\?</string>
<string name="change_database_passphrase_question">Změnit přístupovou frázi databáze\?</string>
<string name="database_will_be_encrypted">Databáze bude zašifrována.</string>
<string name="database_encryption_will_be_updated">Šifrovací heslová fráze databáze bude aktualizována a uložena do úložiště klíčů.</string>
<string name="database_passphrase_will_be_updated">Šifrovací heslová fráze databáze bude aktualizována.</string>
<string name="store_passphrase_securely_without_recover">Uložte prosím bezpečně přístupovou frázi, pokud ji ztratíte, NEBUDE možné přistupovat k chatu.</string>
<string name="wrong_passphrase">Špatná přístupová fráze k databázi</string>
<string name="encrypted_database">Zašifrovaná databáze</string>
<string name="database_error">Chyba databáze</string>
<string name="keychain_error">Chyba klíčenky</string>
<string name="passphrase_is_different">Databázová heslová fráze se liší od uložené v klíčence.</string>
<string name="cannot_access_keychain">Nelze získat přístup k úložišti klíčů pro uložení hesla k databázi.</string>
<string name="unknown_database_error_with_info">Neznámá chyba databáze: %s</string>
<string name="wrong_passphrase_title">Špatná přístupová fráze!</string>
<string name="enter_correct_passphrase">Zadejte správnou přístupovou frázi.</string>
<string name="enter_passphrase">Zadejte přístupovou frázi…</string>
<string name="database_backup_can_be_restored">Pokus o změnu přístupové fráze databáze nebyl dokončen.</string>
<string name="restore_database_alert_title">Obnovit zálohu databáze\?</string>
<string name="restore_database_alert_confirm">Obnovit</string>
<string name="database_restore_error">Chyba obnovení databáze</string>
<string name="restore_passphrase_not_found_desc">Heslo nebylo nalezeno v úložišti klíčů, zadejte jej prosím ručně. K této situaci mohlo dojít, pokud jste obnovili data aplikace pomocí zálohovacího nástroje. Pokud tomu tak není, obraťte se na vývojáře.</string>
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">Chat můžete spustit přes Nastavení aplikace / Databáze nebo restartováním aplikace.</string>
<string name="save_archive">Uložit archiv</string>
<string name="delete_archive">Smazat archiv</string>
<string name="group_invitation_item_description">pozvánka do skupiny <xliff:g id="group_name">%1$s</xliff:g></string>
<string name="archive_created_on_ts">Vytvořeno dne <xliff:g id="archive_ts">%1$s</xliff:g></string>
<string name="you_are_invited_to_group_join_to_connect_with_group_members">Jste zváni do skupiny. Připojte se a spojte se s členy skupiny.</string>
<string name="join_group_incognito_button">Připojte se inkognito</string>
<string name="joining_group">Připojení ke skupině</string>
<string name="youve_accepted_group_invitation_connecting_to_inviting_group_member">Připojili jste se k této skupině. Připojení k pozvání člena skupiny.</string>
<string name="you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved">Přestanete dostávat zprávy z této skupiny. Historie chatu bude zachována.</string>
<string name="alert_title_group_invitation_expired">Platnost pozvánky vypršela!</string>
<string name="alert_message_group_invitation_expired">Pozvánka do skupiny již není platná, byla odstraněna odesílatelem.</string>
<string name="alert_message_no_group">Tato skupina již neexistuje.</string>
<string name="alert_title_cant_invite_contacts_descr">Pro tuto skupinu používáte inkognito profil - abyste zabránili sdílení svého hlavního profilu, není pozvání kontaktů povoleno.</string>
<string name="you_sent_group_invitation">Odeslali jste pozvánku do skupiny</string>
<string name="you_are_invited_to_group">Jste pozváni do skupiny</string>
<string name="group_invitation_tap_to_join">Klepnutím se připojíte</string>
<string name="group_invitation_tap_to_join_incognito">Klepnutím se připojíte inkognito</string>
<string name="you_joined_this_group">Připojili jste se k této skupině</string>
<string name="you_rejected_group_invitation">Odmítli jste pozvánku do skupiny</string>
<string name="group_invitation_expired">Platnost pozvánky do skupiny vypršela</string>
<string name="rcv_group_event_member_added">pozvánka <xliff:g id="profil člena" example="alice (Alice)">%1$s</xliff:g></string>
<string name="rcv_group_event_member_connected">připojeno</string>
<string name="rcv_group_event_changed_member_role">změnil roli %s na %s</string>
<string name="rcv_group_event_changed_your_role">změnil svou roli na %s</string>
<string name="rcv_group_event_member_deleted">odstraněno <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="rcv_group_event_user_deleted">odstranil vás</string>
<string name="rcv_group_event_group_deleted">odstraněna skupina</string>
<string name="rcv_group_event_updated_group_profile">aktualizoval profil skupiny</string>
<string name="rcv_group_event_invited_via_your_group_link">pozváni prostřednictvím odkazu na vaši skupinu</string>
<string name="snd_group_event_group_profile_updated">profil skupiny aktualizován</string>
<string name="rcv_conn_event_switch_queue_phase_changing">změna adresy…</string>
<string name="snd_conn_event_switch_queue_phase_completed_for_member">jste změnili adresu pro %s</string>
<string name="snd_conn_event_switch_queue_phase_changing_for_member">změna adresy pro %s…</string>
<string name="snd_conn_event_switch_queue_phase_completed">změnili jste adresu</string>
<string name="snd_conn_event_switch_queue_phase_changing">změna adresy…</string>
<string name="group_member_role_member">člen</string>
<string name="group_member_role_owner">vlastník</string>
<string name="group_member_status_removed">odstraněno</string>
<string name="group_member_status_left">opustil</string>
<string name="group_member_status_group_deleted">skupina smazána</string>
<string name="group_member_status_invited">pozvánka</string>
<string name="group_member_status_introduced">připojující (zavedený)</string>
<string name="group_member_status_intro_invitation">připojení (pozvánka na představení)</string>
<string name="group_member_status_accepted">připojení (přijato)</string>
<string name="group_member_status_announced">připojení (oznámeno)</string>
<string name="group_member_status_connected">připojen</string>
<string name="group_member_status_complete">kompletní</string>
<string name="group_member_status_creator">tvůrce</string>
<string name="group_member_status_connecting">připojování</string>
<string name="no_contacts_to_add">Žádné kontakty k přidání</string>
<string name="new_member_role">Nová role člena</string>
<string name="invite_to_group_button">Pozvat do skupiny</string>
<string name="skip_inviting_button">Přeskočit pozvání členů</string>
<string name="select_contacts">Vybrat kontakty</string>
<string name="icon_descr_contact_checked">Zkontrolované kontakty</string>
<string name="num_contacts_selected"><xliff:g id="num_contacts">%1$s</xliff:g> kontakt(y) vybrán(y)</string>
<string name="button_add_members">Pozvat členy</string>
<string name="group_info_section_title_num_members"><xliff:g id="num_members">%1$s</xliff:g> MEMBERS</string>
<string name="group_info_member_you">vy: <xliff:g id="group_info_you">%1$s</xliff:g></string>
<string name="button_delete_group">Smazat skupinu</string>
<string name="delete_group_question">Smazat skupinu\?</string>
<string name="delete_group_for_all_members_cannot_undo_warning">Skupina bude smazána pro všechny členy - nelze to vzít zpět!</string>
<string name="delete_group_for_self_cannot_undo_warning">Skupina bude smazána pro vás - toto nelze vzít zpět!</string>
<string name="button_leave_group">Opustit skupinu</string>
<string name="button_edit_group_profile">Upravit profil skupiny</string>
<string name="group_link">Odkaz na skupinu</string>
<string name="create_group_link">Vytvořit odkaz na skupinu</string>
<string name="delete_link">Smazat odkaz</string>
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">Můžete sdílet odkaz nebo QR kód - ke skupině se bude moci připojit kdokoli. O členy skupiny nepřijdete, pokud ji později odstraníte.</string>
<string name="error_creating_link_for_group">Chyba při vytváření odkazu skupiny</string>
<string name="error_deleting_link_for_group">Chyba při odstraňování odkazu skupiny</string>
<string name="only_group_owners_can_change_prefs">Předvolby skupiny mohou měnit pouze vlastníci skupiny.</string>
<string name="section_title_for_console">PRO KONSOLE</string>
<string name="info_row_local_name">Místní název</string>
<string name="info_row_database_id">ID databáze</string>
<string name="button_remove_member">Odstranit člena</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">Člen bude odstraněn ze skupiny - toto nelze vzít zpět!</string>
<string name="remove_member_confirmation">Odstranit</string>
<string name="role_in_group">Role</string>
<string name="change_role">Změnit roli</string>
<string name="change_verb">Změnit</string>
<string name="member_role_will_be_changed_with_invitation">Role bude změněna na \"%s\". Člen obdrží novou pozvánku.</string>
<string name="error_changing_role">Chyba při změně role</string>
<string name="conn_level_desc_direct">přímo</string>
<string name="sending_via">Odesílání přes</string>
<string name="network_status">Stav sítě</string>
<string name="switch_receiving_address">Přepínač přijímací adresy</string>
<string name="group_is_decentralized">Skupina je plně decentralizovaná - je viditelná pouze pro členy.</string>
<string name="group_unsupported_incognito_main_profile_sent">Zde není podporován režim inkognito - členům skupiny bude zaslán váš hlavní profil.</string>
<string name="save_group_profile">Uložení profilu skupiny</string>
<string name="network_options_reset_to_defaults">Obnovení výchozího nastavení</string>
<string name="network_option_tcp_connection_timeout">Časový limit připojení TCP</string>
<string name="network_option_protocol_timeout">Časový limit protokolu</string>
<string name="network_option_ping_interval">Interval PING</string>
<string name="network_option_ping_count">Počet PING</string>
<string name="network_option_enable_tcp_keep_alive">Povolit TCP keep-alive</string>
<string name="update_network_settings_confirmation">Aktualizovat</string>
<string name="users_delete_question">Smazat profil chatu\?</string>
<string name="users_delete_profile_for">Smazat profil chatu pro</string>
<string name="users_delete_with_connections">Profil a připojení k serveru</string>
<string name="users_delete_data_only">Pouze lokální profilová data</string>
<string name="incognito_random_profile_from_contact_description">Náhodný profil bude zaslán kontaktu, od kterého jste obdrželi tento odkaz.</string>
<string name="incognito_info_protects">Režim inkognito chrání soukromí vašeho hlavního profilového jména a obrázku - pro každý nový kontakt je vytvořen nový náhodný profil.</string>
<string name="incognito_info_find">Chcete-li najít profil použitý pro inkognito připojení, klepněte na název kontaktu nebo skupiny v horní části chatu.</string>
<string name="theme_light">Světlo</string>
<string name="theme_dark">Tmavý</string>
<string name="theme">Téma</string>
<string name="chat_preferences_contact_allows">Kontakt povoluje</string>
<string name="chat_preferences_on">na</string>
<string name="chat_preferences_off">vypnuto</string>
<string name="chat_preferences">Předvolby chatu</string>
<string name="contact_preferences">Předvolby kontaktů</string>
<string name="group_preferences">Předvolby skupiny</string>
<string name="direct_messages">Přímé zprávy</string>
<string name="full_deletion">Smazat pro všechny</string>
<string name="feature_enabled">povoleno</string>
<string name="feature_enabled_for_you">povoleno pro vás</string>
<string name="feature_off">vypnuto</string>
<string name="prohibit_sending_disappearing_messages">Zakázat zasílání mizejících zpráv.</string>
<string name="contacts_can_mark_messages_for_deletion">Kontakty mohou označit zprávy ke smazání; vy je budete moci zobrazit.</string>
<string name="prohibit_sending_voice_messages">Zakázat odesílání hlasových zpráv.</string>
<string name="only_you_can_send_disappearing">Mizící zprávy můžete odesílat pouze vy.</string>
<string name="disappearing_prohibited_in_this_chat">Mizící zprávy jsou v tomto chatu zakázány.</string>
<string name="only_your_contact_can_delete">Nevratně mazat zprávy může pouze váš kontakt (vy je můžete označit ke smazání).</string>
<string name="both_you_and_your_contact_can_send_voice">Hlasové zprávy můžete posílat vy i váš kontakt.</string>
<string name="only_you_can_send_voice">Hlasové zprávy můžete posílat pouze vy.</string>
<string name="only_your_contact_can_send_voice">Hlasové zprávy může odesílat pouze váš kontakt.</string>
<string name="voice_prohibited_in_this_chat">Hlasové zprávy jsou v tomto chatu zakázány.</string>
<string name="prohibit_sending_disappearing">Zakázat posílání mizejících zpráv.</string>
<string name="prohibit_message_deletion">Zakázat nevratné mazání zpráv.</string>
<string name="prohibit_sending_voice">Zakázat odesílání hlasových zpráv.</string>
<string name="group_members_can_send_disappearing">Členové skupiny mohou posílat mizející zprávy.</string>
<string name="disappearing_messages_are_prohibited">Mizící zprávy jsou v této skupině zakázány.</string>
<string name="group_members_can_send_dms">Členové skupiny mohou posílat přímé zprávy.</string>
<string name="direct_messages_are_prohibited_in_chat">Přímé zprávy mezi členy jsou v této skupině zakázány.</string>
<string name="group_members_can_delete">Členové skupiny mohou nevratně mazat odeslané zprávy.</string>
<string name="message_deletion_prohibited_in_chat">Nevratné mazání zpráv je v této skupině zakázáno.</string>
<string name="group_members_can_send_voice">Členové skupiny mohou posílat hlasové zprávy.</string>
<string name="voice_messages_are_prohibited">Hlasové zprávy jsou v této skupině zakázány.</string>
<string name="delete_after">Smazat po</string>
<string name="ttl_month">\"%d měsíc</string>
<string name="ttl_months">\"%d měsíců</string>
<string name="ttl_day">\"%d den</string>
<string name="ttl_days">\"%d dnů</string>
<string name="ttl_week">\"%d týden</string>
<string name="ttl_weeks">\"%d týdnů</string>
<string name="ttl_w">\"%dw</string>
<string name="feature_offered_item">nabízeno %s</string>
<string name="feature_cancelled_item">zrušeno %s</string>
<string name="whats_new">Co je nového</string>
<string name="new_in_version">Novinky v %s</string>
<string name="v4_2_auto_accept_contact_requests">Automatické přijímání žádostí o kontakt</string>
<string name="v4_2_auto_accept_contact_requests_desc">S volitelnou uvítací zprávou.</string>
<string name="v4_3_voice_messages_desc">Max. 40 sekund, přijímá se okamžitě.</string>
<string name="v4_5_private_filenames">Soukromé názvy souborů</string>
<string name="v4_5_private_filenames_descr">Pro ochranu časového pásma, obrazové/hlasové soubory používají UTC.</string>
<string name="v4_5_reduced_battery_usage">Snížení spotřeby baterie</string>
<string name="v4_5_reduced_battery_usage_descr">Další vylepšení se chystají již brzy!</string>
<string name="v4_5_italian_interface">Italské rozhraní</string>
<string name="v4_5_italian_interface_descr">Díky uživatelům - přispívejte prostřednictvím Weblate!</string>
<string name="you_will_be_connected_when_your_contacts_device_is_online">Budete připojeni, až bude zařízení vašeho kontaktu online, vyčkejte prosím nebo se podívejte později!</string>
<string name="your_contact_address">Vaše kontaktní adresa</string>
<string name="your_chat_profile_will_be_sent_to_your_contact">Váš profil v chatu bude odeslán vašemu kontaktu</string>
<string name="your_chat_profiles_stored_locally">Vaše profily v chatu jsou uloženy lokálně, pouze ve vašem zařízení.</string>
<string name="your_chats">Vaše konverzace</string>
</resources>

View File

@@ -328,11 +328,12 @@
<string name="you_will_be_connected_when_your_contacts_device_is_online">Sie werden verbunden, sobald das Endgerät Ihres Kontakts online ist. Bitte warten oder schauen Sie später nochmal nach!</string>
<string name="show_QR_code_for_your_contact_to_scan_from_the_app__multiline">Zeigen Sie Ihrem Kontakt den QR-Code aus der App zum Scannen.</string>
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel">Wenn Sie sich nicht persönlich treffen können, können Sie <b>den QR-Code während eines Videoanrufs anzeigen</b> oder einen Einladungslink über einen anderen Kanal mit Ihrem Kontakt teilen.</string>
<string name="your_chat_profile_will_be_sent_to_your_contact">Ihr Chat-Profil wird\nan Ihren Kontakt gesendet.</string>
<string name="your_chat_profile_will_be_sent_to_your_contact">Ihr Chat-Profil wird
\nan Ihren Kontakt gesendet</string>
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">Wenn Sie sich nicht persönlich treffen können, können Sie <b>den QR-Code während eines Videoanrufs scannen</b> oder Ihr Kontakt kann einen Einladungslink über einen anderen Kanal mit Ihnen teilen.</string>
<string name="share_invitation_link">Einladungslink teilen</string>
<string name="paste_connection_link_below_to_connect">Fügen Sie den erhaltenen Link in das Feld unten ein, um sich mit Ihrem Kontakt zu verbinden.</string>
<string name="your_profile_will_be_sent">Ihr Chat-Profil wird an Ihren Kontakt gesendet.</string>
<string name="your_profile_will_be_sent">Ihr Chat-Profil wird an Ihren Kontakt gesendet</string>
<!-- PasteToConnect.kt -->
<string name="connect_via_link">Über einen Link verbinden</string>
<string name="connect_button">Verbinden</string>
@@ -426,7 +427,7 @@
<!-- User profile details - UserProfileView.kt -->
<string name="display_name__field">Angezeigter Name:</string>
<string name="full_name__field">"Vollständiger Name:</string>
<string name="your_current_profile">Mein Chat-Profil</string>
<string name="your_current_profile">Mein aktuelles Chat-Profil</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Ihr Profil wird auf Ihrem Gerät gespeichert und nur mit Ihren Kontakten geteilt.\n\n<xliff:g id="appName">SimpleX</xliff:g>-Server können Ihr Profil nicht sehen.</string>
<string name="edit_image">Bild bearbeiten</string>
<string name="delete_image">Bild löschen</string>
@@ -558,7 +559,6 @@
<string name="your_privacy">Meine Privatsphäre</string>
<string name="protect_app_screen">App-Bildschirm schützen</string>
<string name="auto_accept_images">Bilder automatisch akzeptieren</string>
<string name="transfer_images_faster">Bilder schneller übertragen</string>
<string name="send_link_previews">Link-Vorschau senden</string>
<string name="full_backup">App-Datensicherung</string>
<!-- Settings sections -->
@@ -598,14 +598,15 @@
<string name="error_stopping_chat">Fehler beim Beenden des Chats</string>
<string name="error_exporting_chat_database">Fehler beim Exportieren der Chat-Datenbank</string>
<string name="import_database_question">Chat-Datenbank importieren?</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">Ihre aktuelle Chat-Datenbank wird GELÖSCHT und durch die Importierte ERSETZT.\nDiese Aktion kann nicht rückgängig gemacht werden - Ihr Profil und Ihre Kontakte, Nachrichten und Dateien gehen unwiderruflich verloren.</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">Ihre aktuelle Chat-Datenbank wird GELÖSCHT und durch die Importierte ERSETZT.
\nDiese Aktion kann nicht rückgängig gemacht werden - Ihr Profil, Ihre Kontakte, Nachrichten und Dateien gehen unwiderruflich verloren.</string>
<string name="import_database_confirmation">Importieren</string>
<string name="error_deleting_database">Fehler beim Löschen der Chat-Datenbank</string>
<string name="error_importing_database">Fehler beim Importieren der Chat-Datenbank</string>
<string name="chat_database_imported">Chat-Datenbank importiert</string>
<string name="restart_the_app_to_use_imported_chat_database">Starten Sie die App neu, um die importierte Chat-Datenbank zu verwenden.</string>
<string name="delete_chat_profile_question">Chat-Profil löschen?</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">Diese Aktion kann nicht rückgängig gemacht werden - Ihr Profil und Ihre Kontakte, Nachrichten und Dateien gehen unwiderruflich verloren.</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">Diese Aktion kann nicht rückgängig gemacht werden - Ihr Profil, Ihre Kontakte, Nachrichten und Dateien gehen unwiderruflich verloren.</string>
<string name="chat_database_deleted">Chat-Datenbank gelöscht</string>
<string name="restart_the_app_to_create_a_new_chat_profile">Starten Sie die App neu, um ein neues Chat-Profil zu erstellen.</string>
<string name="you_must_use_the_most_recent_version_of_database">Sie dürfen die neueste Version Ihrer Chat-Datenbank NUR auf einem Gerät verwenden, andernfalls erhalten Sie möglicherweise keine Nachrichten mehr von einigen Ihrer Kontakte.</string>
@@ -991,4 +992,52 @@
<string name="feature_offered_item">beginne %s</string>
<string name="feature_offered_item_with_param">beginne %s: %2s</string>
<string name="feature_cancelled_item">beende %s</string>
<string name="core_simplexmq_version">simplexmq Version: v%s (%2s)</string>
<string name="delete_files_and_media_all">Alle Dateien löschen</string>
<string name="messages_section_title">Nachrichten</string>
<string name="app_version_code">App Build: %s</string>
<string name="app_version_title">App Version</string>
<string name="app_version_name">App Version: v%s</string>
<string name="core_build_timestamp">Core übersetzt am: %s</string>
<string name="core_version">Core Version: v%s</string>
<string name="users_add">Profil hinzufügen</string>
<string name="users_delete_all_chats_deleted">Alle Chats und Nachrichten werden gelöscht! Dies kann nicht rückgängig gemacht werden!</string>
<string name="users_delete_profile_for">Chat-Profil löschen für</string>
<string name="network_option_ping_count">PING Zähler</string>
<string name="update_network_session_mode_question">Transport-Isolations-Modus aktualisieren\?</string>
<string name="smp_servers_per_user">Server der neuen Verbindungen von Ihrem aktuellen Chat-Profil</string>
<string name="files_and_media_section">Dateien &amp; Medien</string>
<string name="network_session_mode_transport_isolation">Transport-Isolation</string>
<string name="users_delete_question">Chat-Profil löschen\?</string>
<string name="error_deleting_user">Fehler beim Löschen des Benutzerprofils</string>
<string name="your_chat_profiles">Meine Chat-Profile</string>
<string name="network_session_mode_entity">Verbindung</string>
<string name="network_session_mode_user">Chat-Profil</string>
<string name="delete_files_and_media_for_all_users">Dateien für alle Chat-Profile löschen</string>
<string name="network_session_mode_entity_description"><b>Für jeden Kontakt und jedes Gruppenmitglied</b> wird eine separate TCP-Verbindung (und SOCKS-Berechtigung) genutzt.
\n
\n<b>Bitte beachten Sie</b>: Wenn Sie viele Verbindung haben, kann der Batterieverbrauch und die Datennutzung wesentlich höher sein und einige Verbindungen können scheitern.</string>
<string name="network_session_mode_user_description"><b>Für jedes von Ihnen in der App genutzte Chat-Profil</b> wird eine separate TCP-Verbindung (und SOCKS-Berechtigung) genutzt.</string>
<string name="users_delete_data_only">Nur lokale Profildaten</string>
<string name="users_delete_with_connections">Profil und Serververbindungen</string>
<string name="messages_section_description">Diese Einstellung gilt für Nachrichten in Ihrem aktuellen Chat-Profil</string>
<string name="your_chat_profiles_stored_locally">Ihre Chat-Profile werden nur lokal auf Ihrem Endgerät gespeichert</string>
<string name="failed_to_create_user_duplicate_title">Doppelter Anzeigename!</string>
<string name="failed_to_create_user_title">Fehler beim Erstellen des Profils!</string>
<string name="failed_to_active_user_title">Fehler beim Umschalten des Profils!</string>
<string name="failed_to_create_user_duplicate_desc">Sie haben schon ein Chat-Profil mit dem gleichen Anzeigenamen. Bitte wählen Sie einen anderen Namen aus.</string>
<string name="v4_5_multiple_chat_profiles">Mehrere Chat-Profile</string>
<string name="v4_5_reduced_battery_usage">Reduzierter Batterieverbrauch</string>
<string name="v4_5_private_filenames">Neutrale Dateinamen</string>
<string name="v4_5_message_draft_descr">Den letzten Nachrichtenentwurf, auch mit seinen Anhängen, aufbewahren.</string>
<string name="v4_5_transport_isolation_descr">Per Chat-Profil (Voreinstellung) oder per Verbindung (BETA).</string>
<string name="v4_5_italian_interface">Italienische Bedienoberfläche</string>
<string name="v4_4_french_interface">Französische Bedienoberfläche</string>
<string name="v4_5_message_draft">Nachrichtenentwurf</string>
<string name="v4_5_reduced_battery_usage_descr">Weitere Verbesserungen sind bald verfügbar!</string>
<string name="v4_5_multiple_chat_profiles_descr">Unterschiedliche Namen, Avatare und Transport-Isolation.</string>
<string name="v4_5_transport_isolation">Transport-Isolation</string>
<string name="v4_5_italian_interface_descr">Dank der Nutzer - Tragen Sie per Weblate bei!</string>
<string name="v4_4_french_interface_descr">Dank der Nutzer - Tragen Sie per Weblate bei!</string>
<string name="v4_5_private_filenames_descr">Bild- und Sprachdateinamen enthalten UTC, um Informationen zur Zeitzone zu schützen.</string>
</resources>

View File

@@ -143,7 +143,7 @@
<string name="group_preview_join_as">rejoindre en tant que %s</string>
<string name="group_preview_you_are_invited">vous êtes invité·e au groupe</string>
<string name="chat_with_developers">Discuter avec les développeurs</string>
<string name="tap_to_start_new_chat">Appuyez pour commencer un nouveau chat</string>
<string name="tap_to_start_new_chat">Appuyez ici pour démarrer une nouvelle discussion</string>
<string name="you_have_no_chats">Vous n\'avez aucune discussion</string>
<string name="images_limit_title">Trop dimages !</string>
<string name="share_file">Partager le fichier…</string>
@@ -623,7 +623,6 @@
<string name="privacy_and_security">Vie privée et sécurité</string>
<string name="protect_app_screen">Protéger l\'écran de l\'app</string>
<string name="auto_accept_images">Images auto-acceptées</string>
<string name="transfer_images_faster">Transfert d\'images plus rapide</string>
<string name="full_backup">Sauvegarde des données de l\'app</string>
<string name="settings_section_title_you">VOUS</string>
<string name="settings_section_title_help">AIDE</string>
@@ -927,4 +926,44 @@
<string name="core_build_timestamp">Cœur compilé le : %s</string>
<string name="core_version">Version du cœur : v%s</string>
<string name="network_option_ping_count">Nombre de PING</string>
<string name="users_delete_all_chats_deleted">Toutes les discussions et tous les messages seront supprimés - il est impossible de revenir en arrière !</string>
<string name="delete_files_and_media_all">Effacer tous les fichiers</string>
<string name="users_delete_profile_for">Supprimer le profil de chat pour</string>
<string name="network_session_mode_user_description">Une connexion TCP distincte (et un identifiant SOCKS) sera utilisée <b>pour chaque profil de chat que vous avez dans l\'application</b>.</string>
<string name="users_delete_question">Supprimer le profil du chat \?</string>
<string name="files_and_media_section">Fichiers &amp; médias</string>
<string name="messages_section_title">Messages</string>
<string name="smp_servers_per_user">Les serveurs pour les nouvelles connexions de votre profil de chat actuel</string>
<string name="messages_section_description">Ce paramètre s\'applique aux messages de votre profil de chat actuel</string>
<string name="network_session_mode_entity">Connexion</string>
<string name="delete_files_and_media_for_all_users">Effacer les fichiers de tous les profils de chat</string>
<string name="users_delete_with_connections">Profil et connexions au serveur</string>
<string name="network_session_mode_transport_isolation">Isolement du transport</string>
<string name="update_network_session_mode_question">Mettre à jour le mode d\'isolation du transport \?</string>
<string name="your_chat_profiles_stored_locally">Vos profils de chat sont stockés localement, uniquement sur votre appareil</string>
<string name="network_session_mode_entity_description">Une connexion TCP distincte (et identifiant SOCKS) sera utilisée <b>pour chaque contact et membre de groupe</b>.
\n<b>Veuillez noter</b> : si vous avez de nombreuses connexions, votre consommation de batterie et de réseau peut être nettement plus élevée et certaines liaisons peuvent échouer.</string>
<string name="network_session_mode_user">Profil de chat</string>
<string name="users_add">Ajouter un profil</string>
<string name="users_delete_data_only">Données de profil local uniquement</string>
<string name="error_deleting_user">Erreur lors de la suppression du profil utilisateur</string>
<string name="your_chat_profiles">Vos profils de chat</string>
<string name="failed_to_active_user_title">Erreur lors du changement de profil !</string>
<string name="failed_to_create_user_title">Erreur lors de la création du profil !</string>
<string name="failed_to_create_user_duplicate_desc">Vous avez déjà un profil de chat avec ce même nom affiché. Veuillez choisir un autre nom.</string>
<string name="failed_to_create_user_duplicate_title">Nom d\'affichage en double !</string>
<string name="v4_4_french_interface">Interface en français</string>
<string name="v4_5_transport_isolation_descr">Par profil de chat (par défaut) ou par connexion (BETA).</string>
<string name="v4_5_italian_interface">Interface en italien</string>
<string name="v4_5_message_draft">Brouillon de message</string>
<string name="v4_5_reduced_battery_usage_descr">Plus d\'améliorations à venir !</string>
<string name="v4_5_multiple_chat_profiles">Différents profils de chat</string>
<string name="v4_5_message_draft_descr">Conserver le brouillon du dernier message, avec les pièces jointes.</string>
<string name="v4_5_reduced_battery_usage">Réduction de la consommation de batterie</string>
<string name="v4_5_private_filenames">Noms de fichiers privés</string>
<string name="v4_5_italian_interface_descr">Merci aux utilisateurs - contribuez via Weblate !</string>
<string name="v4_4_french_interface_descr">Merci aux utilisateurs - contribuez via Weblate !</string>
<string name="v4_5_private_filenames_descr">Pour préserver le fuseau horaire, les fichiers image/voix utilisent le système UTC.</string>
<string name="v4_5_transport_isolation">Isolation du transport</string>
<string name="v4_5_multiple_chat_profiles_descr">Différents noms, avatars et mode d\'isolation de transport.</string>
</resources>

View File

@@ -0,0 +1,147 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="share_image">चित्र साझा करें…</string>
<string name="chat_preferences_off">बंद</string>
<string name="accept_feature_set_1_day">1 दिन निर्धारित करें</string>
<string name="v4_3_improved_server_configuration_desc">क्यूआर संहिता स्कैन करके सर्वर जोड़ें।</string>
<string name="group_preview_you_are_invited">आपको समूह में आमंत्रित किया जाता है</string>
<string name="icon_descr_server_status_connected">जुड़े हुए</string>
<string name="use_camera_button">कैमरे का प्रयोग करें</string>
<string name="above_then_preposition_continuation">ऊपर,तब:</string>
<string name="accept_contact_button">स्वीकार करना</string>
<string name="connect_button">जुडिये</string>
<string name="your_contact_address">आपका संपर्क पता</string>
<string name="smp_servers_add_to_another_device">दूसरे उपकरण में जोड़ें</string>
<string name="bold">निडर</string>
<string name="answer_call">कॉल का उत्तर दें</string>
<string name="settings_section_title_you">तुम</string>
<string name="settings_section_title_settings">समायोजन</string>
<string name="chat_item_ttl_month">1 महीना</string>
<string name="rcv_group_event_member_connected">जुड़े हुए</string>
<string name="group_member_role_admin">व्यवस्थापक</string>
<string name="all_group_members_will_remain_connected">समूह के सभी सदस्य जुड़े रहेंगे।</string>
<string name="change_verb">परिवर्तन</string>
<string name="sending_via">माध्यम से भेजा जा रहा है</string>
<string name="feature_off">बंद</string>
<string name="whats_new">नया क्या है</string>
<string name="v4_2_group_links_desc">व्यवस्थापक समूहों में शामिल होने के लिए लिंक बना सकते हैं।</string>
<string name="chat_item_ttl_day">1 दिन</string>
<string name="chat_item_ttl_week">1 सप्ताह</string>
<string name="about_simplex">सिंपलएक्स के बारे में</string>
<string name="about_simplex_chat">बारे में <xliff:g id="appNameFull">सिंप्लेक्स चैट</xliff:g></string>
<string name="accept_call_on_lock_screen">स्वीकार करना</string>
<string name="accept">स्वीकार करना</string>
<string name="accept_feature">स्वीकार करना</string>
<string name="accept_connection_request__question">संबंध अनुरोध स्वीकार करें\?</string>
<string name="callstatus_accepted">स्वीकृत कॉल</string>
<string name="accept_contact_incognito_button">गुप्त स्वीकार करें</string>
<string name="accept_requests">निवेदन स्वीकार करो</string>
<string name="smp_servers_preset_add">पूर्वनिर्धारित सर्वर जोड़ें</string>
<string name="users_add">प्रोफ़ाइल जोड़ें</string>
<string name="smp_servers_add">सर्वर जोड़े…</string>
<string name="notifications_mode_service">हमेशा बने रहें</string>
<string name="attach">संलग्न करना</string>
<string name="network_settings">उन्नत संजाल समायोजन</string>
<string name="users_delete_all_chats_deleted">सभी बातचीत और संदेश हटा दिए जाएंगे - इसे पूर्ववत नहीं किया जा सकता!</string>
<string name="chat_preferences_always">हमेशा</string>
<string name="allow_verb">अनुमति देना</string>
<string name="appearance_settings">दिखावट</string>
<string name="cancel_verb">रद्द करना</string>
<string name="icon_descr_cancel_file_preview">फ़ाइल पूर्वावलोकन रद्द करें</string>
<string name="icon_descr_cancel_image_preview">छवि पूर्वावलोकन रद्द करें</string>
<string name="clear_verb">साफ़</string>
<string name="colored">रंगीन</string>
<string name="callstate_connected">जुड़े हुए</string>
<string name="smp_server_test_connect">जुडिये</string>
<string name="connect_via_link_verb">जुडिये</string>
<string name="server_connected">जुड़े हुए</string>
<string name="group_member_role_owner">स्वामी</string>
<string name="group_member_status_connected">जुड़े हुए</string>
<string name="notification_contact_connected">जुड़े हुए</string>
<string name="you_joined_this_group">आप इस समूह में शामिल हो गए</string>
<string name="group_info_member_you">तुम: <xliff:g id="group_info_you">%1$s</xliff:g></string>
<string name="you_are_invited_to_group">आपको समूह में आमंत्रित किया जाता है</string>
<string name="snd_conn_event_switch_queue_phase_completed">तुमने पता बदल लिया</string>
<string name="snd_group_event_user_left">आप चले गए</string>
<string name="unknown_error">अज्ञात त्रुटि</string>
<string name="chat_preferences_you_allow">आप आज्ञा दें</string>
<string name="welcome">स्वागत!</string>
<string name="la_notice_turn_on">चालू करो</string>
<string name="section_title_welcome_message">स्वागत संदेश</string>
<string name="unknown_message_format">अज्ञात संदेश प्रारूप</string>
<string name="personal_welcome">स्वागत <xliff:g>%1$s</xliff:g>!</string>
<string name="callstate_starting">शुरुआत</string>
<string name="send_verb">भेजना</string>
<string name="save_color">रंग बचाओ</string>
<string name="share_verb">साझा करना</string>
<string name="reject_contact_button">अस्वीकार</string>
<string name="network_use_onion_hosts_required">आवश्यक</string>
<string name="reject">अस्वीकार</string>
<string name="open_verb">खुला</string>
<string name="group_member_status_removed">निकाला गया</string>
<string name="rcv_group_event_member_deleted">निकाला गया <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="reply_verb">जवाब दे दो</string>
<string name="leave_group_button">छोड़ना</string>
<string name="mark_read">पढ़ा हुआ चिह्नित करें</string>
<string name="icon_descr_more_button">अधिक</string>
<string name="network_use_onion_hosts_no">नहीं</string>
<string name="chat_item_ttl_none">कभी नहीं</string>
<string name="group_member_status_invited">आमंत्रित</string>
<string name="delete_after">बाद मिटा दें</string>
<string name="display_name_invited_to_connect">जुड़ने के लिए आमंत्रित किया</string>
<string name="rcv_group_event_invited_via_your_group_link">आपके समूह लिंक के माध्यम से आमंत्रित किया गया</string>
<string name="rcv_group_event_member_added">आमंत्रित <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="icon_descr_add_members">सदस्यों को आमंत्रित करो</string>
<string name="v4_3_irreversible_message_deletion">अपरिवर्तनीय संदेश विलोपन</string>
<string name="button_add_members">सदस्यों को आमंत्रित करो</string>
<string name="invite_to_group_button">समूह में आमंत्रित करें</string>
<string name="message_deletion_prohibited_in_chat">इस समूह में अपरिवर्तनीय संदेश हटाना प्रतिबंधित है।</string>
<string name="italic">तिरछा</string>
<string name="join_group_button">जोड़ना</string>
<string name="join_group_incognito_button">गुप्त में शामिल हों</string>
<string name="joining_group">समूह में शामिल होना</string>
<string name="join_group_question">समूह में शामिल हों\?</string>
<string name="thousand_abbreviation"></string>
<string name="keychain_error">चाबी का गुच्छा त्रुटि</string>
<string name="button_leave_group">समूह छोड़ दें</string>
<string name="leave_group_question">समूह छोड़ दें</string>
<string name="rcv_group_event_member_left">बाएं</string>
<string name="group_member_status_left">बाएं</string>
<string name="theme_light">रोशनी</string>
<string name="info_row_local_name">स्थानीय नाम</string>
<string name="users_delete_data_only">केवल स्थानीय प्रोफ़ाइल डेटा</string>
<string name="auth_log_in_using_credential">अपने क्रेडेंशियल का उपयोग करके लॉग इन करें</string>
<string name="make_private_connection">एक निजी संबंध बनाओ</string>
<string name="marked_deleted_description">मिटाया हुआ चिह्नित किया गया</string>
<string name="mark_unread">अपठित को चिह्नित करें</string>
<string name="v4_3_voice_messages_desc">अधिकतम 40 सेकंड, तुरन्त प्राप्त हुआ।</string>
<string name="you_sent_group_invitation">आपने समूह आमंत्रण भेजा</string>
<string name="message_delivery_error_desc">सबसे अधिक संभावना है कि इस संपर्क ने आपके साथ संबंध हटा दिया है।</string>
<string name="mute_chat">मूक</string>
<string name="network_status">नेटवर्क की स्थिति</string>
<string name="notification_new_contact_request">नया संपर्क अनुरोध</string>
<string name="delete_files_and_media_all">सभी फाइलों को मिटा दें</string>
<string name="delete_archive">संग्रह हटाएं</string>
<string name="new_database_archive">नया डेटाबेस संग्रह</string>
<string name="new_member_role">नए सदस्य की भूमिका</string>
<string name="settings_notifications_mode_title">अधिसूचना सेवा</string>
<string name="notification_preview_new_message">नया सन्देश</string>
<string name="no_contacts_to_add">जोड़ने के लिए कोई संपर्क नहीं है</string>
<string name="chat_preferences_no">नहीं</string>
<string name="no_contacts_selected">कोई संपर्क नहीं चुना गया</string>
<string name="no_details">कोई विवरण नहीं</string>
<string name="settings_notification_preview_title">अधिसूचना पूर्वावलोकन</string>
<string name="notifications">सूचनाएं</string>
<string name="full_deletion">सभी के लिए हटाएं</string>
<string name="delete_chat_archive_question">चैट संग्रह मिटाएं\?</string>
<string name="delete_chat_profile_question">चैट प्रोफ़ाइल हटाएं\?</string>
<string name="users_delete_question">चैट प्रोफ़ाइल हटाएं\?</string>
<string name="users_delete_profile_for">के लिए चैट प्रोफ़ाइल हटाएं</string>
<string name="button_delete_contact">संपर्क मिटा दें</string>
<string name="deleted_description">हटाए गए</string>
<string name="delete_contact_question">संपर्क मिटा दें\?</string>
<string name="rcv_group_event_group_deleted">हटाए गए समूह</string>
<string name="delete_image">छवि हटाएं</string>
<string name="button_delete_group">समूह हटाएं</string>
<string name="for_me_only">मेरे लिए हटाएं</string>
</resources>

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

View File

@@ -663,7 +663,7 @@
<string name="section_title_welcome_message">MESSAGGIO DI BENVENUTO</string>
<string name="you_can_use_markdown_to_format_messages__prompt">Puoi usare il markdown per formattare i messaggi:</string>
<string name="you_control_your_chat">Sei tu a controllare la tua chat!</string>
<string name="your_current_profile">Il tuo profilo di chat</string>
<string name="your_current_profile">Il tuo profilo attuale</string>
<string name="your_profile_is_stored_on_your_device">Il tuo profilo, i contatti e i messaggi recapitati sono memorizzati sul tuo dispositivo.</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Il tuo profilo è memorizzato sul tuo dispositivo e condiviso solo con i tuoi contatti.
\n
@@ -742,7 +742,6 @@
<string name="settings_section_title_support">SUPPORTA SIMPLEX CHAT</string>
<string name="settings_section_title_themes">TEMI</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">Questa azione non può essere annullata: il tuo profilo, i contatti, i messaggi e i file andranno persi in modo irreversibile.</string>
<string name="transfer_images_faster">Trasferisci immagini più velocemente</string>
<string name="settings_section_title_you">TU</string>
<string name="your_chat_database">Il tuo database della chat</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">Il tuo attuale database di chat verrà ELIMINATO e SOSTITUITO con quello importato.
@@ -927,4 +926,44 @@
<string name="app_version_code">Build dell\'app: %s</string>
<string name="app_version_name">Versione app: v%s</string>
<string name="core_build_timestamp">Core compilato il: %s</string>
<string name="smp_servers_per_user">I server per le nuove connessioni del profilo di chat attuale</string>
<string name="users_add">Aggiungi profilo</string>
<string name="users_delete_question">Eliminare il profilo di chat\?</string>
<string name="network_session_mode_user_description">Verrà usata una connessione TCP separata (e le credenziali SOCKS) <b> per ogni profilo di chat presente nell\'app</b>.</string>
<string name="delete_files_and_media_all">Elimina tutti i file</string>
<string name="users_delete_data_only">Solo dati del profilo locale</string>
<string name="messages_section_title">Messaggi</string>
<string name="files_and_media_section">File e multimediali</string>
<string name="update_network_session_mode_question">Aggiornare la modalità di isolamento del trasporto\?</string>
<string name="users_delete_all_chats_deleted">Tutte le chat e i messaggi verranno eliminati. Non è reversibile!</string>
<string name="network_session_mode_user">Profilo di chat</string>
<string name="network_session_mode_entity_description">Verrà usata una connessione TCP separata (e le credenziali SOCKS) <b> per ogni contatto e membro del gruppo </b>.
\n<b> Nota: </b>: se hai molte connessioni, il consumo di batteria e traffico può essere notevolmente superiore e alcune connessioni potrebbero fallire.</string>
<string name="network_session_mode_entity">Connessione</string>
<string name="messages_section_description">Questa impostazione si applica ai messaggi del profilo di chat attuale</string>
<string name="network_session_mode_transport_isolation">Isolamento del trasporto</string>
<string name="users_delete_profile_for">Elimina il profilo di chat per</string>
<string name="delete_files_and_media_for_all_users">Elimina i file per tutti i profili di chat</string>
<string name="failed_to_active_user_title">Errore nel cambio di profilo!</string>
<string name="failed_to_create_user_title">Errore nella creazione del profilo!</string>
<string name="your_chat_profiles_stored_locally">I tuoi profili di chat sono memorizzati localmente, solo sul tuo dispositivo</string>
<string name="error_deleting_user">Errore nell\'eliminazione del profilo utente</string>
<string name="users_delete_with_connections">Profilo e connessioni al server</string>
<string name="your_chat_profiles">I tuoi profili di chat</string>
<string name="failed_to_create_user_duplicate_desc">Hai già un profilo chat con lo stesso nome da mostrare. Scegli un altro nome.</string>
<string name="failed_to_create_user_duplicate_title">Nome da mostrare doppio!</string>
<string name="v4_5_italian_interface_descr">Grazie agli utenti contribuite via Weblate!</string>
<string name="v4_4_french_interface">Interfaccia francese</string>
<string name="v4_5_italian_interface">Interfaccia italiana</string>
<string name="v4_5_message_draft">Bozza dei messaggi</string>
<string name="v4_5_message_draft_descr">Conserva la bozza dell\'ultimo messaggio, con gli allegati.</string>
<string name="v4_5_private_filenames">Nomi di file privati</string>
<string name="v4_5_transport_isolation_descr">Per profilo di chat (predefinito) o per connessione (BETA).</string>
<string name="v4_5_reduced_battery_usage_descr">Altri miglioramenti sono in arrivo!</string>
<string name="v4_5_multiple_chat_profiles">Profili di chat multipli</string>
<string name="v4_5_reduced_battery_usage">Consumo di batteria ridotto</string>
<string name="v4_4_french_interface_descr">Grazie agli utenti contribuite via Weblate!</string>
<string name="v4_5_transport_isolation">Isolamento del trasporto</string>
<string name="v4_5_private_filenames_descr">Per proteggere il fuso orario, i file immagine/vocali usano UTC.</string>
<string name="v4_5_multiple_chat_profiles_descr">Nomi e avatar diversi, isolamento del trasporto.</string>
</resources>

View File

@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="chat_item_ttl_day">1日</string>
<string name="chat_item_ttl_week">1週間</string>
<string name="callstatus_accepted">受けた通話</string>
<string name="smp_servers_preset_add">既存サーバを追加</string>
<string name="group_member_role_admin">管理者</string>
<string name="v4_2_group_links_desc">管理者はグループの参加リンクを発行できます。</string>
<string name="network_settings">ネットワーク詳細設定</string>
<string name="chat_item_ttl_month">1ヶ月</string>
<string name="about_simplex">SimpleXについて</string>
<string name="a_plus_b">a + b</string>
<string name="about_simplex_chat"><xliff:g id="appNameFull">SimpleX Chat</xliff:g>について</string>
<string name="color_primary">アクセント色</string>
<string name="accept_contact_button">承諾</string>
<string name="accept_connection_request__question">繋がりを承諾しますか?</string>
<string name="accept">承諾</string>
<string name="accept_feature">承諾</string>
<string name="accept_call_on_lock_screen">承諾</string>
<string name="accept_contact_incognito_button">シークレットモードで承諾</string>
<string name="v4_3_improved_server_configuration_desc">QRコードでサーバを追加</string>
<string name="smp_servers_add_to_another_device">別の端末に追加</string>
<string name="users_add">プロフィールを追加</string>
<string name="smp_servers_add">サーバを追加…</string>
<string name="network_enable_socks_info">SOCKSプロキシ(ポート9050)経由で接続しますか?(※設定する前にプロキシ起動が必要※)</string>
<string name="users_delete_all_chats_deleted">全チャットとメッセージが削除されます(※元に戻せません※)</string>
<string name="allow_your_contacts_to_send_voice_messages">送信相手からの音声メッセージを許可する。</string>
<string name="both_you_and_your_contact_can_send_voice">あなたと連絡相手が音声メッセージを送信できます。</string>
<string name="onboarding_notifications_mode_periodic_desc"><b>電池省エネに良い</b>バックグラウンド機能で10分毎に新着メッセージを確認します。通話と緊急メッセージを見逃す可能性があります。</string>
<string name="icon_descr_audio_off">音声オフ</string>
<string name="attach">添付する</string>
<string name="app_version_code">アプリ・ビルド番号: %s</string>
<string name="all_your_contacts_will_remain_connected">あなたの連絡先が繋がったまま継続します。</string>
<string name="accept_requests">リクエストを承諾</string>
<string name="accept_automatically">自動的に</string>
<string name="icon_descr_audio_on">音声オン</string>
<string name="integrity_msg_bad_hash">メッセージのハッシュ値問題</string>
<string name="integrity_msg_bad_id">メッセージIDの問題</string>
<string name="allow_verb">許可</string>
<string name="allow_voice_messages_question">音声メッセージを許可しますか?</string>
<string name="back">戻る</string>
<string name="appearance_settings">見た目</string>
<string name="app_version_title">アプリのバージョン</string>
<string name="app_version_name">アプリのバージョン: v%s</string>
<string name="network_session_mode_user_description"><b>アプリ内の各チャットプロフィールに、</b>.連絡先毎にそれぞれのTCP接続(とSOCKS資格情報)が使われます。</string>
<string name="network_session_mode_entity_description"><b>各連絡先とグループに、</b>それぞれのTCP接続(とSOCKS資格情報)が使われます。
\n<b>※注意※</b> 接続が多かったら、電池とデータの使用量が増えて、切断する可能性もあります。</string>
<string name="bold">太文字</string>
<string name="icon_descr_audio_call">音声通話</string>
<string name="settings_audio_video_calls">音声とビデオ通話</string>
<string name="impossible_to_recover_passphrase"><b>※注意※</b>:喪失したら、パスフレーズの回復・変更ができません。</string>
<string name="all_group_members_will_remain_connected">グループ全員の接続が継続します。</string>
<string name="allow_your_contacts_to_send_disappearing_messages">送信相手が消えるメッセージを送るのを許可する。</string>
<string name="allow_your_contacts_irreversibly_delete">送信相手が永久メッセージ削除するのを許可する。</string>
<string name="allow_voice_messages_only_if">送信相手も音声メッセージを許可する時のみに許可する。</string>
<string name="both_you_and_your_contact_can_send_disappearing">あなたと連絡相手が消えるメッセージを送信できます。</string>
<string name="v4_2_auto_accept_contact_requests">連絡先を自動的に承諾</string>
<string name="chat_preferences_always">常に</string>
<string name="notifications_mode_service">常にオン</string>
<string name="clear_chat_warning">全てのメッセージが削除されます(※注意:元に戻せません!※)。削除されるのは片方あなたのメッセージのみ</string>
<string name="allow_disappearing_messages_only_if">送信相手も消えるメッセージ機能を許可する時のみに許可する。</string>
<string name="allow_irreversible_message_deletion_only_if">送信相手も永久メッセージ削除を許可する時のみに許可する。</string>
<string name="allow_to_delete_messages">送信済みメッセージの永久削除を許可</string>
<string name="allow_to_send_disappearing">消えるメッセージの送信を許可</string>
<string name="allow_direct_messages">メンバーへのダイレクトメッセージを許可</string>
<string name="allow_to_send_voice">音声メッセージの送信を許可</string>
<string name="notifications_mode_off_desc">アクティブの時のみに通知が出ます。バックグラウンド通知サービスは起動されません。</string>
<string name="keychain_is_storing_securely">Androidキーストアはパスフレーズの保管に使われます。通知機能に必要です。</string>
<string name="keychain_allows_to_receive_ntfs">再起動時とパスフレーズ変更時にAndroidキーストアがパスフレーズの保管に使われます。通知機能に必要です。</string>
<string name="answer_call">通話に応答</string>
<string name="settings_section_title_icon">アプリのアイコン</string>
<string name="full_backup">アプリデータのバックアップ</string>
<string name="incognito_random_profile_from_contact_description">このリンクの送信元にランダムなプロフィール(ダミー)が送られます。</string>
<string name="incognito_random_profile_description">連絡先にランダムなプロフィール(ダミー)が送られます。</string>
<string name="audio_call_no_encryption">音声通話 (エンドツーエンド暗号化なし)</string>
<string name="icon_descr_asked_to_receive">画像受信を依頼しました。</string>
<string name="auth_unavailable">認証不可能</string>
<string name="auto_accept_images">画像を自動的に受信</string>
<string name="notifications_mode_service_desc">バックグラウンド機能が常にオンで、メッセージが到着次第に通知が出ます。</string>
<string name="add_new_contact_to_create_one_time_QR_code"><b>新しい連絡先を追加</b>使い捨てのQRコードを発行</string>
<string name="turning_off_service_and_periodic">電池省エネをオンに、バックグラウンド機能と定期的な受信依頼をオフにします。設定メニューにて変更できます。</string>
<string name="onboarding_notifications_mode_off_desc"><b>電池消費が最少</b>:アプリがアクティブ時のみに通知が出ます。</string>
<string name="it_can_disabled_via_settings_notifications_still_shown"><b>設定メニューにてオフにできます。</b> アプリがアクティブ時に通知が出ます。</string>
<string name="both_you_and_your_contacts_can_delete">あなたと連絡相手が送信済みメッセージを永久削除できます。</string>
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>QRコードを読み込み</b>連絡相手のQRコードをスキャンすると繋がります。</string>
</resources>

View File

@@ -0,0 +1,617 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="callstatus_error">oproepfout</string>
<string name="callstatus_calling">bellen…</string>
<string name="call_on_lock_screen">Oproepen op het vergrendelingsscherm:</string>
<string name="callstatus_in_progress">gesprek gaande</string>
<string name="icon_descr_call_progress">Gesprek gaande</string>
<string name="settings_section_title_calls">OPROEPEN</string>
<string name="cancel_verb">Annuleren</string>
<string name="icon_descr_cancel_file_preview">Bestandsvoorbeeld annuleren</string>
<string name="icon_descr_cancel_image_preview">Afbeeldingsvoorbeeld annuleren</string>
<string name="feature_cancelled_item">geannuleerd %s</string>
<string name="icon_descr_cancel_live_message">Live bericht annuleren</string>
<string name="snd_conn_event_switch_queue_phase_changing">veranderen van adres…</string>
<string name="notifications_mode_service">altijd aan</string>
<string name="icon_descr_asked_to_receive">Gevraagd om de afbeelding te ontvangen</string>
<string name="change_verb">Wijzig</string>
<string name="network_settings">Geavanceerde netwerkinstellingen</string>
<string name="network_enable_socks_info">Toegang tot de servers via SOCKS proxy op poort 9050\? De proxy moet worden gestart voordat u deze optie inschakelt.</string>
<string name="alert_title_cant_invite_contacts">Kan contacten niet uitnodigen</string>
<string name="allow_direct_messages">Directe berichten sturen naar leden toestaan.</string>
<string name="allow_to_delete_messages">Onherroepelijk wissen van verzonden berichten toestaan.</string>
<string name="allow_to_send_voice">Sta toe om spraakberichten te versturen.</string>
<string name="chat_is_running">Chat is aktief</string>
<string name="clear_chat_menu_action">Clear</string>
<string name="chat_database_section">CHAT DATABASE</string>
<string name="chat_archive_section">CHAT ARCHIEF</string>
<string name="chat_console">Chat console</string>
<string name="chat_database_imported">Chat database geïmporteerd</string>
<string name="chat_database_deleted">Chat database verwijderd</string>
<string name="chat_item_ttl_week">1 week</string>
<string name="a_plus_b">a + b</string>
<string name="accept_contact_button">Accepteer</string>
<string name="accept_call_on_lock_screen">Accepteer</string>
<string name="color_primary">Accent</string>
<string name="accept">Accepteer</string>
<string name="accept_connection_request__question">Verbindingsverzoek accepteren\?</string>
<string name="callstatus_accepted">aanvaarde oproep</string>
<string name="accept_contact_incognito_button">Accepteer incognito</string>
<string name="smp_servers_preset_add">Vooraf ingestelde servers toevoegen</string>
<string name="users_add">Profiel toevoegen</string>
<string name="smp_servers_add">Server toevoegen…</string>
<string name="smp_servers_add_to_another_device">Toevoegen aan een ander apparaat</string>
<string name="v4_2_group_links_desc">Admins kunnen de links naar groepen aanmaken.</string>
<string name="v4_3_improved_server_configuration_desc">Servers toevoegen door QR-codes te scannen.</string>
<string name="group_member_role_admin">admin</string>
<string name="all_group_members_will_remain_connected">Alle groepsleden blijven verbonden.</string>
<string name="allow_verb">"Sta toe."</string>
<string name="chat_item_ttl_day">1 dag</string>
<string name="accept_feature">Accepteer</string>
<string name="incognito_random_profile_from_contact_description">Een willekeurig profiel wordt gestuurd naar het contact waarvan u deze link heeft ontvangen.</string>
<string name="network_session_mode_entity_description">Er wordt een aparte TCP-verbinding (en SOCKS-credential) gebruikt <b>voor elk contact en groepslid</b>.
\n<b>Let op</b>: als u veel verbindingen hebt, kan uw batterij- en verkeersverbruik aanzienlijk hoger zijn en kunnen sommige verbindingen mislukken.</string>
<string name="icon_descr_audio_call">audio-oproep</string>
<string name="icon_descr_audio_on">Geluid aan</string>
<string name="settings_audio_video_calls">Audio- en videogesprekken</string>
<string name="auto_accept_images">Afbeeldingen automatisch accepteren</string>
<string name="auth_unavailable">Verificatie niet beschikbaar</string>
<string name="back">Terug</string>
<string name="v4_2_auto_accept_contact_requests">Automatisch contactverzoeken accepteren</string>
<string name="bold">vet</string>
<string name="incognito_random_profile_description">Een willekeurig profiel wordt naar uw contactpersoon gestuurd</string>
<string name="attach">Voeg toe</string>
<string name="allow_irreversible_message_deletion_only_if">Laat onomkeerbare verwijdering van berichten alleen toe als uw contactpersoon u dat toestaat.</string>
<string name="allow_to_send_disappearing">Laat verdwijnende berichten toe.</string>
<string name="allow_your_contacts_to_send_voice_messages">Laat uw contacten spraakberichten versturen.</string>
<string name="all_your_contacts_will_remain_connected">Al uw contacten blijven verbonden.</string>
<string name="allow_voice_messages_question">Spraakberichten toestaan\?</string>
<string name="onboarding_notifications_mode_periodic_desc"><b>Goed voor de batterij</b>. De achtergronddienst controleert elke 10 minuten op nieuwe berichten. U kunt oproepen en dringende berichten missen.</string>
<string name="integrity_msg_bad_hash">Onjuiste bericht-hash</string>
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>Scan QR code</b>: om verbinding te maken met uw contactpersoon die de QR code aan u toont.</string>
<string name="integrity_msg_bad_id">Onjuiste bericht-ID</string>
<string name="call_already_ended">De oproep is al beëindigd!</string>
<string name="chat_item_ttl_month">1 maand</string>
<string name="about_simplex">Over SimpleX</string>
<string name="about_simplex_chat">About <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="above_then_preposition_continuation">hierboven, dan:</string>
<string name="accept_requests">Verzoeken accepteren</string>
<string name="users_delete_all_chats_deleted">Alle chats en berichten worden verwijderd - dit kan niet ongedaan worden gemaakt!</string>
<string name="clear_chat_warning">Alle berichten worden verwijderd - dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd.</string>
<string name="allow_disappearing_messages_only_if">Laat verdwijnende berichten alleen toe als uw contact dat toestaat.</string>
<string name="allow_voice_messages_only_if">Sta spraakberichten alleen toe als uw contactpersoon ze toestaat.</string>
<string name="allow_your_contacts_irreversibly_delete">Laat uw contacten onherroepelijk verzonden berichten verwijderen.</string>
<string name="allow_your_contacts_to_send_disappearing_messages">Laat uw contacten verdwijnende berichten sturen.</string>
<string name="chat_preferences_always">altijd</string>
<string name="icon_descr_audio_off">Geluid uit</string>
<string name="full_backup">App gegevens back-up</string>
<string name="answer_call">Beantwoord de oproep</string>
<string name="keychain_is_storing_securely">Android Keystore wordt gebruikt om passphrase veilig op te slaan - het laat notificatiedienst werken.</string>
<string name="keychain_allows_to_receive_ntfs">Android Keystore wordt gebruikt om de passphrase veilig op te slaan nadat u de app opnieuw hebt opgestart of de passphrase hebt gewijzigd - hiermee kunt u meldingen ontvangen.</string>
<string name="app_version_code">App build: %s</string>
<string name="notifications_mode_off_desc">App kan alleen meldingen ontvangen als hij draait, er wordt geen achtergronddienst gestart.</string>
<string name="appearance_settings">Uiterlijk</string>
<string name="settings_section_title_icon">APP ICON</string>
<string name="app_version_title">App versie</string>
<string name="app_version_name">App-versie: v%s</string>
<string name="network_session_mode_user_description">Er wordt een aparte TCP-verbinding (en SOCKS-credential) gebruikt <b>voor elk chatprofiel dat u in de app hebt</b>.</string>
<string name="audio_call_no_encryption">audio oproep (niet e2e versleuteld)</string>
<string name="accept_automatically">Automatisch</string>
<string name="notifications_mode_service_desc">De achtergronddienst draait altijd - meldingen worden getoond zodra de berichten beschikbaar zijn.</string>
<string name="add_new_contact_to_create_one_time_QR_code"><b>Nieuw contact toevoegen</b>: om uw eenmalige QR-code voor uw contactpersoon aan te maken.</string>
<string name="icon_descr_call_ended">Oproep beëindigd</string>
<string name="turning_off_service_and_periodic">Batterijoptimalisatie is actief en schakelt de achtergronddienst en periodieke verzoeken om nieuwe berichten uit. U kunt ze opnieuw inschakelen via de instellingen.</string>
<string name="onboarding_notifications_mode_off_desc"><b>Beste voor de batterij</b>. U ontvangt alleen meldingen als de app draait, de achtergronddienst wordt NIET gebruikt.</string>
<string name="it_can_disabled_via_settings_notifications_still_shown"><b>Het kan worden uitgeschakeld via instellingen</b> - meldingen worden nog steeds getoond terwijl de app draait.</string>
<string name="both_you_and_your_contacts_can_delete">Zowel u als uw contactpersoon kunnen verzonden berichten onherroepelijk verwijderen.</string>
<string name="both_you_and_your_contact_can_send_disappearing">Zowel jij als je contact kunnen verdwijnende berichten sturen.</string>
<string name="both_you_and_your_contact_can_send_voice">Zowel u als uw contactpersoon kunnen spraakberichten versturen.</string>
<string name="impossible_to_recover_passphrase"><b>Let op</b>: u kunt de wachtwoordzin NIET herstellen of wijzigen als u deze verliest.</string>
<string name="onboarding_notifications_mode_service_desc"><b>Verbruikt meer batterij</b>! Achtergronddienst draait altijd - meldingen worden getoond zodra de berichten beschikbaar zijn.</string>
<string name="icon_descr_cancel_link_preview">link preview annuleren</string>
<string name="callstatus_ended">Oproep beëindigd <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
<string name="database_initialization_error_title">Kan de database niet initialiseren</string>
<string name="snd_conn_event_switch_queue_phase_changing_for_member">adres wijzigen voor %s…</string>
<string name="invite_prohibited">Kan contact niet uitnodigen!</string>
<string name="cannot_access_keychain">Kan geen toegang krijgen tot Keystore om database wachtwoord op te slaan</string>
<string name="cannot_receive_file">Kan het bestand niet ontvangen</string>
<string name="change_role">Rol wijzigen</string>
<string name="rcv_conn_event_switch_queue_phase_changing">veranderen van adres…</string>
<string name="rcv_conn_event_switch_queue_phase_completed">veranderd adres voor jou</string>
<string name="rcv_group_event_changed_member_role">rol van %s veranderd in %s</string>
<string name="change_member_role_question">Groepsrol wijzigen\?</string>
<string name="chat_is_stopped">Chat is gestopt</string>
<string name="notifications_mode_periodic_desc">Controleert nieuwe berichten elke 10 minuten gedurende maximaal 1 minuut</string>
<string name="rcv_group_event_changed_your_role">uw rol veranderd in %s</string>
<string name="chat_archive_header">Chat archief</string>
<string name="change_database_passphrase_question">Database wachtwoord wijzigen\?</string>
<string name="chat_is_stopped_indication">Chat is gestopt</string>
<string name="chat_preferences">Chat voorkeuren</string>
<string name="network_session_mode_user">Chat profiel</string>
<string name="settings_section_title_chats">CHATS</string>
<string name="chat_with_developers">Chat met de ontwikkelaars</string>
<string name="smp_servers_check_address">Controleer het serveradres en probeer het opnieuw.</string>
<string name="choose_file">Kies bestand</string>
<string name="clear_verb">Clear</string>
<string name="v4_4_verify_connection_security_desc">Vergelijk beveiligingscodes met je contacten.</string>
<string name="icon_descr_contact_checked">Contact gecontroleerd</string>
<string name="notification_contact_connected">Verbonden</string>
<string name="display_name_connecting">Verbinden…</string>
<string name="connection_local_display_name">verbinding <xliff:g id="connection ID" example="1">%1$d</xliff:g></string>
<string name="connection_error">Verbindingsfout</string>
<string name="group_member_status_introduced">verbinden (geïntroduceerd)</string>
<string name="group_member_status_intro_invitation">verbinden (introductie uitnodiging)</string>
<string name="display_name_connection_established">verbinding gemaakt</string>
<string name="connection_request_sent">Verbindingsverzoek verzonden!</string>
<string name="connection_timeout">Time-out verbinding</string>
<string name="share_one_time_link">"Maak een eenmalige uitnodigings link"</string>
<string name="create_address">Adres aanmaken</string>
<string name="create_group_link">Groeps link maken</string>
<string name="create_group">Maak een geheime groep aan</string>
<string name="database_will_be_encrypted">Database wordt versleuteld.</string>
<string name="group_member_status_creator">Starter</string>
<string name="delete_address__question">Adres verwijderen\?</string>
<string name="database_passphrase_and_export">Database wachtwoord zin &amp; exporteren</string>
<string name="passphrase_is_different">De wachtwoord zin van de database verschilt van de wachtwoord zin die is opgeslagen in de keystore.</string>
<string name="ttl_d">%dd</string>
<string name="delete_verb">Verwijderen</string>
<string name="delete_after">Verwijderen na</string>
<string name="connect_via_link_verb">Verbind</string>
<string name="server_connected">verbonden</string>
<string name="server_connecting">Verbinden</string>
<string name="connect_via_contact_link">Verbinden via contact link\?</string>
<string name="connect_via_group_link">Verbinden via groeps link\?</string>
<string name="connect_via_invitation_link">Verbinden via uitnodigings link\?</string>
<string name="notification_preview_mode_contact">Contact naam</string>
<string name="notification_preview_somebody">Contact verborgen:</string>
<string name="image_decoding_exception_title">Decodeerfout</string>
<string name="maximum_supported_file_size">De momenteel maximaal ondersteunde bestandsgrootte is <xliff:g id="maxFileSize">%1$s</xliff:g>.</string>
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">Contact en alle berichten worden verwijderd - dit kan niet ongedaan worden gemaakt!</string>
<string name="icon_descr_server_status_connected">Verbonden</string>
<string name="confirm_verb">Bevestigen</string>
<string name="connect_via_link_or_qr">Maak verbinding via link / QR-code</string>
<string name="copied">Gekopieerd naar het klembord</string>
<string name="contribute">Bijdragen</string>
<string name="configure_ICE_servers">ICE-servers configureren</string>
<string name="network_session_mode_entity">Verbinding</string>
<string name="core_build_timestamp">Core gebouwd op: %s</string>
<string name="core_version">Core versie: v%s</string>
<string name="callstate_connected">verbonden</string>
<string name="callstate_connecting">Verbinden…</string>
<string name="decentralized">Gedecentraliseerd</string>
<string name="create_your_profile">Maak je profiel aan</string>
<string name="ttl_day">%d dag</string>
<string name="ttl_days">%d dagen</string>
<string name="encrypted_with_random_passphrase">De database is versleuteld met een willekeurige wachtwoord zin, u kunt deze wijzigen.</string>
<string name="database_encryption_will_be_updated">De wachtwoord zin voor database codering wordt bijgewerkt en opgeslagen in de sleutel kluis.</string>
<string name="database_will_be_encrypted_and_passphrase_stored">De database wordt gecodeerd en de wachtwoord zin wordt opgeslagen in de Keystore.</string>
<string name="database_passphrase_will_be_updated">De wachtwoordzin voor databasecodering wordt bijgewerkt.</string>
<string name="database_error">Database fout</string>
<string name="database_passphrase_is_required">Databases wachtwoord zin is vereist om de chat te openen.</string>
<string name="contact_already_exists">Contact bestaat al</string>
<string name="icon_descr_call_connecting">Oproep verbinden</string>
<string name="button_create_group_link">Maak link</string>
<string name="smp_server_test_connect">Verbind</string>
<string name="connection_error_auth">Verbindingsfout (AUTH)</string>
<string name="smp_server_test_create_queue">Maak een wachtrij</string>
<string name="auth_confirm_credential">Bevestig uw inloggegevens</string>
<string name="contact_connection_pending">Verbinden…</string>
<string name="group_connection_pending">Verbinden…</string>
<string name="icon_descr_context">Context icon</string>
<string name="copy_verb">Kopiëren</string>
<string name="clear_chat_question">Wis gesprek</string>
<string name="icon_descr_close_button">Sluiten</string>
<string name="clear_chat_button">Chat wissen</string>
<string name="alert_title_contact_connection_pending">Contact is nog niet verbonden!</string>
<string name="delete_contact_menu_action">Verwijderen</string>
<string name="delete_group_menu_action">Verwijderen</string>
<string name="clear_verification">Verwijderd verificatie</string>
<string name="connect_button">Verbind</string>
<string name="connect_via_link">Maak verbinding via link</string>
<string name="create_one_time_link">Maak een eenmalige uitnodigings link</string>
<string name="colored">gekleurd</string>
<string name="callstatus_connecting">Oproep verbinden…</string>
<string name="contact_requests">Contact verzoeken</string>
<string name="create_profile_button">Maak</string>
<string name="create_profile">Maak een profiel aan</string>
<string name="delete_address">Adres verwijderen</string>
<string name="connect_calls_via_relay">Verbinden via relais</string>
<string name="status_contact_has_e2e_encryption">contact heeft e2e encryptie</string>
<string name="status_contact_has_no_e2e_encryption">contact heeft geen e2e-encryptie</string>
<string name="set_password_to_export_desc">De database is versleuteld met een willekeurige wachtwoordzin. Wijzig dit voordat u exporteert.</string>
<string name="database_passphrase">Database-wachtwoordzin</string>
<string name="confirm_new_passphrase">Bevestig nieuwe wachtwoordzin…</string>
<string name="current_passphrase">Huidige wachtwoordzin…</string>
<string name="database_encrypted">Database versleuteld!</string>
<string name="rcv_group_event_member_connected">verbonden</string>
<string name="archive_created_on_ts">Gemaakt op <xliff:g id="archive_ts">%1$s</xliff:g></string>
<string name="group_member_status_complete">compleet</string>
<string name="clear_contacts_selection_button">Duidelijk</string>
<string name="group_member_status_connected">verbonden</string>
<string name="group_member_status_connecting">Verbinden</string>
<string name="group_member_status_accepted">verbinden (geaccepteerd)</string>
<string name="group_member_status_announced">verbinden (aangekondigd)</string>
<string name="info_row_connection">Verbinding</string>
<string name="create_secret_group_title">Maak een geheime groep aan</string>
<string name="info_row_database_id">Database ID</string>
<string name="chat_preferences_contact_allows">Contact staat toe</string>
<string name="contact_preferences">Contact voorkeuren</string>
<string name="contacts_can_mark_messages_for_deletion">Contact personen kunnen berichten markeren voor verwijdering; u kunt ze wel bekijken.</string>
<string name="theme_dark">Donker</string>
<string name="chat_preferences_default">standaard (%s)</string>
<string name="delete_chat_archive_question">Chat archief verwijderen\?</string>
<string name="delete_archive">Archief verwijderen</string>
<string name="delete_contact_question">Verwijder contact\?</string>
<string name="delete_chat_profile_question">Chat profiel verwijderen\?</string>
<string name="full_deletion">Verwijderen voor iedereen</string>
<string name="delete_link">Link verwijderen</string>
<string name="conn_level_desc_direct">direct</string>
<string name="settings_section_title_develop">ONTWIKKELEN</string>
<string name="settings_section_title_device">APPARAAT</string>
<string name="delete_files_and_media_all">Verwijder alle bestanden</string>
<string name="delete_messages_after">Berichten verwijderen na</string>
<string name="direct_messages">Privéberichten</string>
<string name="ttl_month">%d maand</string>
<string name="delete_image">Verwijder afbeelding</string>
<string name="delete_database">Database verwijderen</string>
<string name="rcv_group_event_group_deleted">verwijderde groep</string>
<string name="delete_files_and_media_question">Bestanden en media verwijderen\?</string>
<string name="delete_group_question">Groep verwijderen\?</string>
<string name="delete_message__question">Verwijder bericht\?</string>
<string name="delete_messages">Verwijder berichten</string>
<string name="smp_server_test_delete_queue">Wachtrij verwijderen</string>
<string name="delete_files_and_media_for_all_users">Verwijder bestanden voor alle chatprofielen</string>
<string name="for_me_only">Verwijder voor mij</string>
<string name="button_delete_group">Groep verwijderen</string>
<string name="delete_link_question">Link verwijderen\?</string>
<string name="delete_pending_connection__question">Wachtende verbinding verwijderen\?</string>
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 desktop: scan weergegeven QR-code vanuit de app, via <b>Scan QR-code</b>.</string>
<string name="settings_developer_tools">Ontwikkel gereedschap</string>
<string name="auth_device_authentication_is_disabled_turning_off">Apparaatverificatie is uitgeschakeld. SimpleX Lock uitschakelen.</string>
<string name="display_name">Weergavenaam</string>
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">Apparaatverificatie is niet ingeschakeld. Je kunt SimpleX Lock inschakelen via Instellingen zodra je apparaatverificatie hebt ingeschakeld.</string>
<string name="direct_messages_are_prohibited_in_chat">Privéberichten tussen leden zijn in deze groep verboden.</string>
<string name="total_files_count_and_size">%d bestand(en) met een totale grootte van %s</string>
<string name="ttl_hour">%d uur</string>
<string name="no_call_on_lock_screen">Uitzetten</string>
<string name="v4_4_disappearing_messages">Verdwijnende berichten</string>
<string name="disappearing_prohibited_in_this_chat">Verdwijnende berichten zijn verboden in deze chat.</string>
<string name="auth_disable_simplex_lock">SimpleX Lock uitschakelen</string>
<string name="timed_messages">Verdwijnende berichten</string>
<string name="smp_server_test_disconnect">verbinding verbreken</string>
<string name="icon_descr_server_status_disconnected">verbinding verbroken</string>
<string name="display_name__field">Weergavenaam:</string>
<string name="display_name_cannot_contain_whitespace">Weergavenaam mag geen spatie bevatten.</string>
<string name="ttl_min">%d min</string>
<string name="ttl_months">%d maanden</string>
<string name="failed_to_create_user_title">Fout bij aanmaken van profiel!</string>
<string name="ttl_s">%ds</string>
<string name="button_delete_contact">Verwijder contact</string>
<string name="smp_servers_delete_server">Server verwijderen</string>
<string name="disappearing_messages_are_prohibited">Verdwijnende berichten zijn verboden in deze groep.</string>
<string name="ttl_sec">%d sec</string>
<string name="ttl_m">%dm</string>
<string name="ttl_mth">%dmth</string>
<string name="ttl_hours">%d uren</string>
<string name="ttl_h">%dh</string>
<string name="users_delete_question">Chat profiel verwijderen\?</string>
<string name="users_delete_profile_for">Chat profiel verwijderen voor</string>
<string name="deleted_description">verwijderd</string>
<string name="simplex_link_mode_description">Beschrijving</string>
<string name="error_receiving_file">Fout bij ontvangen van bestand</string>
<string name="error_joining_group">Fout bij lid worden van groep</string>
<string name="error_deleting_group">Fout bij verwijderen van groep</string>
<string name="error_deleting_contact">Fout bij het verwijderen van contact</string>
<string name="error_deleting_contact_request">Fout bij verwijderen van contact verzoek</string>
<string name="full_name__field">Volledige naam:</string>
<string name="error_importing_database">Fout bij het importeren van de chat database</string>
<string name="encrypt_database_question">Database versleutelen\?</string>
<string name="alert_title_no_group">Groep niet gevonden!</string>
<string name="group_display_name_field">Weergave naam groep:</string>
<string name="failed_to_create_user_duplicate_title">Dubbele weergavenaam!</string>
<string name="error_sending_message">Fout bij verzenden van bericht</string>
<string name="failed_to_active_user_title">Fout bij wisselen van profiel!</string>
<string name="error_changing_address">Fout bij wijzigen van adres</string>
<string name="error_deleting_pending_contact_connection">Fout bij het verwijderen van in behandeling zijnde contact verbinding</string>
<string name="error_deleting_user">Fout bij het verwijderen van gebruikers profiel</string>
<string name="auth_enable_simplex_lock">SimpleX Lock inschakelen</string>
<string name="hide_verb">Verbergen</string>
<string name="icon_descr_edited">bewerkt</string>
<string name="for_everybody">Voor iedereen</string>
<string name="icon_descr_server_status_error">Fout</string>
<string name="icon_descr_email">Email</string>
<string name="edit_image">Bewerk afbeelding</string>
<string name="exit_without_saving">Afsluiten zonder op te slaan</string>
<string name="full_name_optional__prompt">Volledige naam (optioneel)</string>
<string name="encrypted_video_call">e2e versleuteld videogesprek</string>
<string name="allow_accepting_calls_from_lock_screen">Schakel oproepen vanaf het vergrendelscherm in via Instellingen.</string>
<string name="icon_descr_hang_up">Ophangen</string>
<string name="settings_section_title_help">HELP</string>
<string name="settings_experimental_features">Experimentele functies</string>
<string name="error_starting_chat">Fout bij het starten van de chat</string>
<string name="export_database">Database exporteren</string>
<string name="error_deleting_database">Fout bij het verwijderen van de chat database</string>
<string name="error_exporting_chat_database">Fout bij het exporteren van de chat database</string>
<string name="error_stopping_chat">Fout bij het stoppen van de chat</string>
<string name="files_and_media_section">Bestanden en media</string>
<string name="error_changing_message_deletion">Fout bij wijzigen van instelling</string>
<string name="error_encrypting_database">Fout bij het versleutelen van de database</string>
<string name="file_with_path">Bestand: %s</string>
<string name="enter_passphrase">Voer wachtwoordzin in…</string>
<string name="icon_descr_group_inactive">Groep inactief</string>
<string name="alert_message_group_invitation_expired">Groeps uitnodiging is niet meer geldig, deze is verwijderd door de afzender.</string>
<string name="snd_group_event_group_profile_updated">groeps profiel bijgewerkt</string>
<string name="group_member_status_group_deleted">groep verwijderd</string>
<string name="icon_descr_expand_role">Vouw de rolselectie uit</string>
<string name="delete_group_for_all_members_cannot_undo_warning">Groep wordt verwijderd voor alle leden - dit kan niet ongedaan worden gemaakt!</string>
<string name="error_creating_link_for_group">Fout bij maken van groeps link</string>
<string name="error_deleting_link_for_group">Fout bij verwijderen groeps link</string>
<string name="group_link">Groeps link</string>
<string name="error_changing_role">Fout bij wisselen van rol</string>
<string name="error_removing_member">Fout bij verwijderen van lid</string>
<string name="info_row_group">Groep</string>
<string name="group_full_name_field">Volledige naam groep:</string>
<string name="group_preferences">Groeps voorkeuren</string>
<string name="feature_enabled">ingeschakeld</string>
<string name="feature_enabled_for_contact">ingeschakeld voor contact</string>
<string name="feature_enabled_for_you">voor u ingeschakeld</string>
<string name="group_members_can_delete">Groeps leden kunnen verzonden berichten onherroepelijk verwijderen.</string>
<string name="group_members_can_send_dms">Groeps leden kunnen directe berichten sturen.</string>
<string name="group_members_can_send_voice">Groeps leden kunnen spraak berichten verzenden.</string>
<string name="v4_5_transport_isolation_descr">Per chatprofiel (standaard) of per verbinding (BETA).</string>
<string name="v4_5_multiple_chat_profiles_descr">Verschillende namen, avatars en transportisolatie.</string>
<string name="v4_4_french_interface">Franse interface</string>
<string name="error_saving_group_profile">Fout bij opslaan van groeps profiel</string>
<string name="encrypted_audio_call">e2e versleutelde audio-oproep</string>
<string name="status_e2e_encrypted">e2e versleuteld</string>
<string name="edit_verb">Bewerk</string>
<string name="enable_automatic_deletion_question">Automatisch verwijderen van berichten aanzetten\?</string>
<string name="enter_correct_passphrase">Voer de juiste wachtwoordzin in.</string>
<string name="button_edit_group_profile">Groepsprofiel bewerken</string>
<string name="network_option_enable_tcp_keep_alive">Schakel TCP-keep-alive in</string>
<string name="encrypt_database">Versleutelen</string>
<string name="error_adding_members">Fout bij het toevoegen van lid (leden)</string>
<string name="smp_servers_enter_manually">Voer de server handmatig in</string>
<string name="error_accepting_contact_request">Fout bij het accepteren van een contactverzoek</string>
<string name="group_invitation_expired">Groeps uitnodiging verlopen</string>
<string name="icon_descr_file">Bestand</string>
<string name="section_title_for_console">VOOR CONSOLE</string>
<string name="group_profile_is_stored_on_members_devices">Groeps proces wordt opgeslagen op de apparaten van de leden, niet op de servers.</string>
<string name="notification_preview_mode_hidden">Verborgen</string>
<string name="delete_group_for_self_cannot_undo_warning">De groep wordt voor u verwijderd - dit kan niet ongedaan worden gemaakt!</string>
<string name="hide_notification">Verbergen</string>
<string name="server_error">fout</string>
<string name="file_will_be_received_when_contact_is_online">Het bestand wordt ontvangen wanneer uw contact persoon online is, even geduld a.u.b. of controleer later!</string>
<string name="error_saving_file">Fout bij opslaan van bestand</string>
<string name="file_not_found">Bestand niet gevonden</string>
<string name="file_saved">Bestand opgeslagen</string>
<string name="from_gallery_button">Van Galerij</string>
<string name="error_saving_ICE_servers">Fout bij opslaan van ICE-servers</string>
<string name="callstate_ended">geëindigd</string>
<string name="group_members_can_send_disappearing">Groeps leden kunnen verdwijnende berichten sturen.</string>
<string name="ttl_week">%d week</string>
<string name="ttl_w">%dw</string>
<string name="ttl_weeks">%d weken</string>
<string name="v4_2_group_links">Groeps links</string>
<string name="encrypted_database">Versleutelde database</string>
<string name="error_with_info">Fout: %s</string>
<string name="error_creating_address">Fout bij aanmaken van adres</string>
<string name="icon_descr_help">help</string>
<string name="icon_descr_flip_camera">Flip-camera</string>
<string name="error_saving_smp_servers">Fout bij opslaan van SMP-servers</string>
<string name="error_setting_network_config">Fout bij updaten van netwerk configuratie</string>
<string name="failed_to_parse_chat_title">Kan chat niet laden</string>
<string name="failed_to_parse_chats_title">Kan chats niet laden</string>
<string name="simplex_link_mode_full">Volledige link</string>
<string name="integrity_msg_duplicate">dubbel bericht</string>
<string name="invalid_connection_link">Ongeldige verbindingslink</string>
<string name="service_notifications_disabled">Onmiddelijke meldingen zijn uitgeschakeld!</string>
<string name="service_notifications">Onmiddellijke berichten!</string>
<string name="notification_preview_new_message">nieuw bericht</string>
<string name="icon_descr_image_snd_complete">Afbeelding verzonden</string>
<string name="live_message">Live bericht!</string>
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">Als je een uitnodigingslink voor <xliff:g id="appName">SimpleX Chat</xliff:g> hebt ontvangen, kun je deze in je browser openen:</string>
<string name="onboarding_notifications_mode_subtitle">Dit kan later worden gewijzigd via instellingen.</string>
<string name="join_group_question">Deelnemen aan groep\?</string>
<string name="icon_descr_add_members">Nodig leden uit</string>
<string name="no_contacts_selected">Geen contacten geselecteerd</string>
<string name="v4_4_live_messages">Live berichten</string>
<string name="icon_descr_instant_notifications">Onmiddellijke meldingen</string>
<string name="notification_new_contact_request">Nieuw contactverzoek</string>
<string name="auth_log_in_using_credential">Log in met uw inloggegevens</string>
<string name="message_delivery_error_desc">Hoogstwaarschijnlijk heeft dit contact de verbinding met jou verwijderd.</string>
<string name="delete_message_cannot_be_undone_warning">Bericht wordt verwijderd - dit kan niet ongedaan worden gemaakt!</string>
<string name="large_file">Groot bestand!</string>
<string name="mark_read">Markeer gelezen</string>
<string name="mark_unread">Markeer als ongelezen</string>
<string name="mute_chat">Stom</string>
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">Als u elkaar niet persoonlijk kunt ontmoeten, kunt u <b> de QR-code scannen in het videogesprek </b>, of uw contactpersoon kan een uitnodigingslink delen.</string>
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel">Als je elkaar niet persoonlijk kunt ontmoeten, <b>toon je de QR-code in het videogesprek</b> of deel je de link.</string>
<string name="invalid_QR_code">Ongeldige QR-code</string>
<string name="icon_descr_more_button">Meer</string>
<string name="incorrect_code">Onjuiste beveiligingscode!</string>
<string name="mark_code_verified">Markeer geverifieerd</string>
<string name="how_to_use_simplex_chat">Hoe te gebruiken</string>
<string name="markdown_help">Markdown-hulp</string>
<string name="markdown_in_messages">Markdown in berichten</string>
<string name="network_settings_title">Netwerkinstellingen</string>
<string name="how_to_use_markdown">Markdown gebruiken</string>
<string name="italic">cursief</string>
<string name="how_it_works">Hoe het werkt</string>
<string name="callstatus_missed">gemiste oproep</string>
<string name="how_simplex_works">Hoe <xliff:g id="appName">SimpleX</xliff:g> werkt</string>
<string name="many_people_asked_how_can_it_deliver">Veel mensen vroegen: <i>als <xliff:g id="appName">SimpleX</xliff:g> geen gebruikers-ID\'s heeft, hoe kan het dan berichten bezorgen\?</i></string>
<string name="incoming_audio_call">Inkomende audio-oproep</string>
<string name="incoming_video_call">Inkomend videogesprek</string>
<string name="ignore">Negeren</string>
<string name="status_no_e2e_encryption">geen e2e-encryptie</string>
<string name="import_database_question">Chatdatabase importeren\?</string>
<string name="chat_item_ttl_none">nooit</string>
<string name="no_received_app_files">Geen ontvangen of verzonden bestanden</string>
<string name="alert_title_group_invitation_expired">Uitnodiging verlopen!</string>
<string name="rcv_group_event_member_left">Verlaten</string>
<string name="group_member_status_left">Verlaten</string>
<string name="group_member_status_invited">uitgenodigd</string>
<string name="button_leave_group">Groep verlaten</string>
<string name="info_row_local_name">Lokale naam</string>
<string name="group_unsupported_incognito_main_profile_sent">Incognitomodus wordt hier niet ondersteund - uw hoofdprofiel wordt naar groepsleden verzonden</string>
<string name="users_delete_data_only">Alleen lokale profielgegevens</string>
<string name="message_deletion_prohibited_in_chat">Het onomkeerbaar verwijderen van berichten is verboden in deze groep.</string>
<string name="v4_3_improved_privacy_and_security_desc">App-scherm verbergen in de recente apps.</string>
<string name="settings_section_title_incognito">Incognito modus</string>
<string name="messages_section_title">Berichten</string>
<string name="new_passphrase">Nieuwe wachtwoordzin…</string>
<string name="keychain_error">Keychain fout</string>
<string name="join_group_button">Word lid van</string>
<string name="leave_group_question">Groep verlaten\?</string>
<string name="new_member_role">Nieuwe ledenrol</string>
<string name="no_contacts_to_add">Geen contacten om toe te voegen</string>
<string name="incognito_info_allows">Het maakt het mogelijk om veel anonieme verbindingen te hebben zonder enige gedeelde gegevens tussen hen in een enkel chatprofiel.</string>
<string name="theme_light">Licht</string>
<string name="chat_preferences_no">Nee</string>
<string name="v4_5_multiple_chat_profiles">Meerdere chatprofielen</string>
<string name="v4_5_italian_interface">Italiaanse interface</string>
<string name="v4_5_message_draft">Concept bericht</string>
<string name="v4_5_reduced_battery_usage_descr">Meer verbeteringen volgen snel!</string>
<string name="button_add_members">Nodig leden uit</string>
<string name="notification_display_mode_hidden_desc">Verberg contact en bericht</string>
<string name="turn_off_battery_optimization">Om het te gebruiken &lt;b xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\"&gt;batterijoptimalisatie uitschakelen&lt;/b&gt; voor &lt;xliff:g xmlns:xliff=\"urn:oasis: names:tc:xliff:document:1.2\" id=\"appName\"&gt;SimpleX&lt;/xliff:g&gt; in het volgende dialoogvenster. Anders worden de meldingen uitgeschakeld.</string>
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">Als u ervoor kiest om te weigeren, wordt de afzender NIET op de hoogte gesteld.</string>
<string name="onboarding_notifications_mode_service">Onmiddellijk</string>
<string name="rcv_group_event_member_added">uitgenodigd <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="group_invitation_item_description">uitnodiging voor groep <xliff:g id="group_name">%1$s</xliff:g></string>
<string name="invite_to_group_button">Uitnodigen voor groep</string>
<string name="join_group_incognito_button">Doe incognito mee</string>
<string name="group_preview_join_as">lid worden als %s</string>
<string name="alert_text_skipped_messages_it_can_happen_when">Het kan gebeuren wanneer:
\n1. De berichten op de server verlopen als ze 30 dagen niet zijn ontvangen,
\n2. De server die u gebruikt om de berichten van deze contactpersoon te ontvangen, is bijgewerkt en opnieuw opgestart.
\n3. De verbinding is verbroken.
\nMaak verbinding met de ontwikkelaars via Instellingen om de updates over de servers te ontvangen.
\nWe zullen serverredundantie toevoegen om verloren berichten te voorkomen.</string>
<string name="joining_group">Deel nemen aan groep</string>
<string name="leave_group_button">Verlaten</string>
<string name="group_member_role_member">lid</string>
<string name="image_descr_link_preview">link voorbeeldafbeelding</string>
<string name="member_info_section_title_member">LID</string>
<string name="settings_section_title_messages">BERICHTEN</string>
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app">📱 mobiel: tik op <b>Openen in mobiele app</b> en tik vervolgens op <b>Verbinden</b> in de app.</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">Lid wordt uit de groep verwijderd - dit kan niet ongedaan worden gemaakt!</string>
<string name="message_delivery_error_title">Fout bij bezorging van bericht</string>
<string name="delete_message_mark_deleted_warning">Bericht wordt gemarkeerd voor verwijdering. De ontvanger(s) kunnen dit bericht onthullen.</string>
<string name="network_status">Netwerk status</string>
<string name="image_descr">Afbeelding</string>
<string name="image_saved">Afbeelding opgeslagen in Galerij</string>
<string name="import_database_confirmation">Importeren</string>
<string name="import_database">Database importeren</string>
<string name="v4_3_improved_privacy_and_security">Verbeterde privacy en veiligheid</string>
<string name="image_will_be_received_when_contact_is_online">De afbeelding wordt ontvangen wanneer uw contact online is, even geduld a.u.b. of kijk later!</string>
<string name="incognito_info_protects">De incognitomodus beschermt de privacy van uw hoofdprofielnaam en -afbeelding - voor elk nieuw contact wordt een nieuw willekeurig profiel gemaakt.</string>
<string name="new_database_archive">Nieuw database-archief</string>
<string name="no_details">geen details</string>
<string name="conn_level_desc_indirect">indirect (<xliff:g id="conn_level">%1$s</xliff:g>)</string>
<string name="thousand_abbreviation">k</string>
<string name="notification_preview_mode_message">Bericht tekst</string>
<string name="settings_notification_preview_title">Meldingsvoorbeeld</string>
<string name="settings_notifications_mode_title">Meldingsservice</string>
<string name="notifications">Meldingen</string>
<string name="invalid_contact_link">Ongeldige link!</string>
<string name="smp_servers_invalid_address">Ongeldig serveradres!</string>
<string name="install_simplex_chat_for_terminal">Installeer <xliff:g id="appNameFull">SimpleX Chat</xliff:g> voor terminal</string>
<string name="how_to">Hoe</string>
<string name="how_to_use_your_servers">Hoe u uw servers gebruikt</string>
<string name="network_and_servers">Netwerk &amp; servers</string>
<string name="enter_one_ICE_server_per_line">ICE-servers (één per lijn)</string>
<string name="ensure_ICE_server_address_are_correct_format_and_unique">Zorg ervoor dat WebRTC ICE-serveradressen de juiste indeling hebben, regelgescheiden zijn en niet gedupliceerd zijn.</string>
<string name="network_disable_socks_info">Als u bevestigt, kunnen de berichtenservers uw IP-adres zien en uw provider - met welke servers u verbinding maakt.</string>
<string name="network_use_onion_hosts_no">Nee</string>
<string name="immune_to_spam_and_abuse">Immuun voor spam en misbruik</string>
<string name="make_private_connection">Maak een privéverbinding</string>
<string name="message_deletion_prohibited">Het onomkeerbaar verwijderen van berichten is verboden in deze chat.</string>
<string name="new_in_version">Nieuw in %s</string>
<string name="v4_3_voice_messages_desc">Max 40 seconden, direct ontvangen.</string>
<string name="v4_3_improved_server_configuration">Verbeterde serverconfiguratie</string>
<string name="v4_3_irreversible_message_deletion">Onomkeerbare berichtverwijdering</string>
<string name="rcv_group_event_invited_via_your_group_link">uitgenodigd via je groepslink</string>
<string name="incognito">Incognito</string>
<string name="icon_descr_call_missed">Gemiste oproep</string>
<string name="description_via_contact_address_link_incognito">incognito via link naar contactadres</string>
<string name="description_via_group_link_incognito">incognito via groepslink</string>
<string name="description_via_one_time_link_incognito">incognito via eenmalige link</string>
<string name="invalid_chat">ongeldige chat</string>
<string name="invalid_data">onjuiste data</string>
<string name="invalid_message_format">ongeldig berichtformaat</string>
<string name="display_name_invited_to_connect">uitgenodigd om te verbinden</string>
<string name="live">LIVE</string>
<string name="ensure_smp_server_address_are_correct_format_and_unique">Zorg ervoor dat SMP-serveradressen de juiste indeling hebben, regelgescheiden zijn en niet gedupliceerd zijn.</string>
<string name="marked_deleted_description">gemarkeerd als verwijderd</string>
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">Controleer of u de juiste link heeft gebruikt of vraag uw contactpersoon om u een andere te sturen.</string>
<string name="image_descr_profile_image">profielfoto</string>
<string name="privacy_redefined">Privacy opnieuw gedefinieerd</string>
<string name="privacy_and_security">Privacy en beveiliging</string>
<string name="network_error_desc">Controleer uw netwerkverbinding met <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g> en probeer het opnieuw.</string>
<string name="error_smp_test_certificate">Mogelijk is de certificaatvingerafdruk in het serveradres onjuist</string>
<string name="periodic_notifications">Periodieke meldingen</string>
<string name="auth_open_chat_console">Chatconsole openen</string>
<string name="toast_permission_denied">Geen toestemming!</string>
<string name="icon_descr_profile_image_placeholder">profielafbeelding tijdelijke aanduiding</string>
<string name="one_time_link">Eenmalige uitnodigingslink</string>
<string name="paste_button">Plakken</string>
<string name="smp_servers_preset_address">Vooraf ingesteld serveradres</string>
<string name="network_use_onion_hosts_no_desc_in_alert">Onion hosts worden niet gebruikt.</string>
<string name="onboarding_notifications_mode_title">Privé meldingen</string>
<string name="paste_the_link_you_received">Plak de ontvangen link</string>
<string name="onboarding_notifications_mode_periodic">Periodiek</string>
<string name="open_verb">Open</string>
<string name="open_simplex_chat_to_accept_call">Open <xliff:g id="appNameFull">SimpleX Chat</xliff:g> om de oproep te accepteren</string>
<string name="call_connection_peer_to_peer">peer-to-peer</string>
<string name="notifications_will_be_hidden">Meldingen worden alleen afgeleverd totdat de app stopt!</string>
<string name="restore_passphrase_not_found_desc">Wachtwoordzin niet gevonden in Keystore, voer deze handmatig in. Dit kan zijn gebeurd als u de gegevens van de app hebt hersteld met een back-uptool. Als dit niet het geval is, neem dan contact op met de ontwikkelaars.</string>
<string name="users_delete_with_connections">Profiel- en serververbindingen</string>
<string name="chat_preferences_off">uit</string>
<string name="chat_preferences_on">aan</string>
<string name="only_you_can_send_disappearing">Alleen jij kunt verdwijnende berichten verzenden.</string>
<string name="only_your_contact_can_send_disappearing">Alleen uw contactpersoon kan verdwijnende berichten verzenden.</string>
<string name="only_you_can_delete_messages">Alleen jij kunt berichten onomkeerbaar verwijderen (je contactpersoon kan ze markeren voor verwijdering).</string>
<string name="feature_offered_item_with_param">aangeboden %s: %2s</string>
<string name="old_database_archive">Oud database-archief</string>
<string name="enter_correct_current_passphrase">Voer de juiste huidige wachtwoordzin in.</string>
<string name="group_member_role_owner">eigenaar</string>
<string name="network_option_ping_count">PING-telling</string>
<string name="network_option_ping_interval">PING-interval</string>
<string name="v4_5_message_draft_descr">Bewaar het laatste berichtconcept, met bijlagen.</string>
<string name="v4_5_private_filenames">Privé bestandsnamen</string>
<string name="images_limit_desc">Er kunnen slechts 10 afbeeldingen tegelijk worden verzonden</string>
<string name="enter_passphrase_notification_title">Wachtwoordzin is nodig</string>
<string name="feature_off">uit</string>
<string name="add_contact">Eenmalige uitnodigingslink</string>
<string name="network_use_onion_hosts_required_desc_in_alert">Onion hosts zijn vereist voor verbinding.</string>
<string name="only_group_owners_can_change_prefs">Alleen groepseigenaren kunnen groepsvoorkeuren wijzigen.</string>
<string name="only_stored_on_members_devices">(alleen opgeslagen door groepsleden)</string>
<string name="paste_connection_link_below_to_connect">Plak de link die je hebt ontvangen in het vak hieronder om verbinding te maken met je contactpersoon.</string>
<string name="smp_servers_preset_server">Vooraf ingestelde server</string>
<string name="periodic_notifications_disabled">Periodieke meldingen zijn uitgeschakeld!</string>
<string name="icon_descr_server_status_pending">In behandeling</string>
<string name="only_group_owners_can_enable_voice">Alleen groepseigenaren kunnen spraakberichten inschakelen.</string>
<string name="ask_your_contact_to_enable_voice">Vraag uw contactpersoon om het verzenden van spraakberichten in te schakelen.</string>
<string name="ok">OK</string>
<string name="network_use_onion_hosts_required_desc">Onion hosts zijn vereist voor verbinding.</string>
<string name="network_use_onion_hosts_prefer_desc">Onion hosts worden gebruikt indien beschikbaar.</string>
<string name="network_use_onion_hosts_prefer_desc_in_alert">Onion hosts worden gebruikt indien beschikbaar.</string>
<string name="network_use_onion_hosts_no_desc">Onion hosts worden niet gebruikt.</string>
<string name="opensource_protocol_and_code_anybody_can_run_servers">Open-source protocol en code iedereen kan de servers draaien.</string>
<string name="people_can_connect_only_via_links_you_share">Mensen kunnen alleen verbinding met u maken via de links die u deelt.</string>
<string name="only_your_contact_can_delete">Alleen uw contactpersoon kan berichten onherroepelijk verwijderen (u kunt ze markeren voor verwijdering).</string>
<string name="only_you_can_send_voice">Alleen jij kunt spraakberichten verzenden.</string>
<string name="only_your_contact_can_send_voice">Alleen uw contactpersoon kan spraakberichten verzenden.</string>
<string name="prohibit_message_deletion">Verbied het onomkeerbaar verwijderen van berichten.</string>
<string name="feature_offered_item">aangeboden %s</string>
<string name="store_passphrase_securely_without_recover">Sla de wachtwoordzin veilig op. Als u deze kwijtraakt, heeft u GEEN toegang tot de chat.</string>
<string name="store_passphrase_securely">Bewaar de wachtwoordzin veilig, u kunt deze NIET wijzigen als u deze kwijtraakt.</string>
<string name="open_chat">Chat openen</string>
<string name="restore_database_alert_desc">Voer het vorige wachtwoord in na het herstellen van de databaseback-up. Deze actie kan niet ongedaan gemaakt worden.</string>
<string name="icon_descr_call_pending_sent">Oproep in behandeling</string>
<string name="simplex_link_mode_browser_warning">Het openen van de link in de browser kan de privacy en beveiliging van de verbinding verminderen. Niet-vertrouwde SimpleX-links worden rood weergegeven.</string>
<string name="contact_developers">Werk de app bij en neem contact op met de ontwikkelaars.</string>
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages">Alleen client-apparaten slaan gebruikersprofielen, contacten, groepen en berichten op die zijn verzonden met <b>2-laags end-to-end-codering</b>.</string>
</resources>

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

View File

@@ -423,7 +423,7 @@
<!-- User profile details - UserProfileView.kt -->
<string name="display_name__field">Имя профиля:</string>
<string name="full_name__field">"Полное имя:</string>
<string name="your_current_profile">Ваш профиль</string>
<string name="your_current_profile">Ваш активный профиль</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Ваш профиль хранится на вашем устройстве и отправляется только вашим контактам.\n\n<xliff:g id="appName">SimpleX</xliff:g> серверы не могут получить доступ к вашему профилю.</string>
<string name="edit_image">Поменять аватар</string>
<string name="delete_image">Удалить аватар</string>
@@ -560,7 +560,6 @@
<string name="your_privacy">Конфиденциальность</string>
<string name="protect_app_screen">Защитить экран приложения</string>
<string name="auto_accept_images">Автоприем изображений</string>
<string name="transfer_images_faster">Передавать изображения быстрее</string>
<string name="send_link_previews">Отправлять картинки ссылок</string>
<string name="full_backup">Резервная копия данных</string>
<!-- Settings sections -->
@@ -993,4 +992,50 @@
<string name="feature_offered_item">предложил(a) %s</string>
<string name="feature_offered_item_with_param">предложил(a) %s: %2s</string>
<string name="feature_cancelled_item">отменил(a) %s</string>
<string name="icon_descr_cancel_live_message">Отменить живое сообщение</string>
<string name="core_simplexmq_version">simplexmq: v%s (%2s)</string>
<string name="network_option_ping_count">Количество PING</string>
<string name="users_delete_with_connections">Профиль и соединения на сервере</string>
<string name="app_version_title">Версия приложения</string>
<string name="network_session_mode_user">Профиль чата</string>
<string name="network_session_mode_entity">Соединение</string>
<string name="users_add">Добавить профиль</string>
<string name="error_deleting_user">Ошибка удаления профиля пользователя</string>
<string name="files_and_media_section">Файлы и медиа</string>
<string name="users_delete_data_only">Только локальные данные профиля</string>
<string name="messages_section_title">Сообщения</string>
<string name="smp_servers_per_user">Серверы для новых соединений вашего текущего профиля чата</string>
<string name="your_chat_profiles_stored_locally">Ваши профили чата хранятся локально, только на вашем устройстве</string>
<string name="your_chat_profiles">Ваши профили чата</string>
<string name="users_delete_all_chats_deleted">Все чаты и сообщения будут удалены - это нельзя отменить!</string>
<string name="app_version_code">Сборка приложения: %s</string>
<string name="app_version_name">Версия приложения: v%s</string>
<string name="network_session_mode_entity_description">Отдельное TCP-соединение (и авторизация SOCKS) будет использоваться <b>для каждого контакта и члена группы</b>.
\n<b>Обратите внимание</b>: если у вас много контактов, потребление батареи и трафика может быть значительно выше, и некоторые соединения могут не работать.</string>
<string name="network_session_mode_user_description">Отдельное TCP-соединение (и авторизация SOCKS) будет использоваться <b>для каждого профиля чата, который вы имеете в приложении</b>.</string>
<string name="core_build_timestamp">Ядро скомпилировано: %s</string>
<string name="core_version">Версия ядра: v%s</string>
<string name="users_delete_question">Удалить профиль чата\?</string>
<string name="users_delete_profile_for">Удалить профиль чата для</string>
<string name="messages_section_description">Эта настройка применяется к сообщениям в вашем текущем профиле чата</string>
<string name="network_session_mode_transport_isolation">Отдельные сессии для</string>
<string name="update_network_session_mode_question">Обновить режим отдельных сессий\?</string>
<string name="failed_to_create_user_duplicate_title">Имя профиля уже используется</string>
<string name="failed_to_create_user_title">Ошибка создания профиля!</string>
<string name="failed_to_create_user_duplicate_desc">У вас уже есть профиль с таким именем. Пожалуйста, выберите другое имя.</string>
<string name="failed_to_active_user_title">Ошибка выбора профиля!</string>
<string name="v4_5_transport_isolation_descr">По профилю чата или по соединению (БЕТА)</string>
<string name="v4_4_french_interface_descr">Благодаря пользователям добавьте переводы через Weblate!</string>
<string name="v4_5_multiple_chat_profiles_descr">Разные имена, аватары и транспортные сессии.</string>
<string name="v4_5_italian_interface">Итальянский интерфейс</string>
<string name="v4_5_message_draft">Черновик сообщения</string>
<string name="v4_5_multiple_chat_profiles">Много профилей чата</string>
<string name="v4_5_message_draft_descr">Сохранить последний черновик, вместе с вложениями.</string>
<string name="v4_5_private_filenames">Защищенные имена файлов</string>
<string name="v4_5_italian_interface_descr">Благодаря пользователям добавьте переводы через Weblate!</string>
<string name="v4_5_private_filenames_descr">Чтобы защитить ваш часовой пояс, файлы картинок и голосовых сообщений используют UTC.</string>
<string name="v4_4_french_interface">Французский интерфейс</string>
<string name="v4_5_reduced_battery_usage_descr">Дополнительные улучшения скоро!</string>
<string name="v4_5_reduced_battery_usage">Уменьшенное потребление батареи</string>
<string name="v4_5_transport_isolation">Отдельные транспортные сессии</string>
</resources>

View File

@@ -3,9 +3,9 @@
<string name="a_plus_b">a + b</string>
<string name="chat_item_ttl_day">1天</string>
<string name="about_simplex">关于 SimpleX</string>
<string name="all_group_members_will_remain_connected">所有群组成员将保持连接</string>
<string name="all_group_members_will_remain_connected">所有群组成员将保持连接</string>
<string name="about_simplex_chat">关于 <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="above_then_preposition_continuation">关于, 然后:</string>
<string name="above_then_preposition_continuation">以上,然后</string>
<string name="accept_contact_button">接受</string>
<string name="accept_call_on_lock_screen">接受</string>
<string name="accept_feature">接受</string>
@@ -15,13 +15,13 @@
<string name="callstatus_accepted">已接受通话</string>
<string name="accept">接受</string>
<string name="network_enable_socks_info">通过 SOCKS 代理访问服务器在端口9050允许该选项前必须开始代理。</string>
<string name="smp_servers_add">添加服务器</string>
<string name="smp_servers_add">添加服务器</string>
<string name="smp_servers_add_to_another_device">添加另一设备</string>
<string name="group_member_role_admin">管理员</string>
<string name="v4_3_improved_server_configuration_desc">扫描二维码来添加服务器</string>
<string name="v4_3_improved_server_configuration_desc">扫描二维码来添加服务器</string>
<string name="network_settings">高级网络设置</string>
<string name="accept_connection_request__question">接受连接请求?</string>
<string name="accept_contact_incognito_button">接受无痕模式</string>
<string name="accept_contact_incognito_button">接受隐身聊天</string>
<string name="v4_2_group_links_desc">管理员可以创建链接以加入群组。</string>
<string name="accept_requests">接受请求</string>
<string name="smp_servers_preset_add">添加预设服务器</string>
@@ -33,12 +33,12 @@
<string name="contact_already_exists">联系人已存在</string>
<string name="connection_error_auth">连接错误AUTH</string>
<string name="answer_call">接听来电</string>
<string name="delete_chat_profile_question">删除聊天个人资料?</string>
<string name="delete_chat_profile_question">删除聊天资料?</string>
<string name="delete_files_and_media_all">删除所有文件</string>
<string name="messages_section_title">消息</string>
<string name="delete_messages_after">在此后删除消息</string>
<string name="settings_section_title_messages">消息</string>
<string name="users_add">添加个人资料</string>
<string name="users_add">添加资料</string>
<string name="users_delete_all_chats_deleted">所有聊天记录和消息将被删除——这一行为无法撤销!</string>
<string name="clear_chat_warning">所有聊天记录和消息将被删除——这一行为无法撤销!只有您的消息会被删除。</string>
<string name="allow_to_send_voice">允许发送语音消息。</string>
@@ -53,7 +53,7 @@
<string name="delete_files_and_media_question">删除文件和媒体文件?</string>
<string name="full_deletion">为所有人删除</string>
<string name="for_me_only">为我删除</string>
<string name="delete_files_and_media_for_all_users">为所有聊天个人资料删除文件</string>
<string name="delete_files_and_media_for_all_users">为所有聊天资料删除文件</string>
<string name="button_delete_group">删除群组</string>
<string name="delete_group_question">删除群组?</string>
<string name="delete_link">删除链接</string>
@@ -83,7 +83,7 @@
<string name="allow_to_send_disappearing">允许发送限时消息。</string>
<string name="delete_address">删除地址</string>
<string name="delete_chat_archive_question">删除聊天档案?</string>
<string name="users_delete_question">删除聊天个人资料?</string>
<string name="users_delete_question">删除聊天资料?</string>
<string name="button_delete_contact">删除联系人</string>
<string name="delete_contact_question">删除联系人?</string>
<string name="rcv_group_event_group_deleted">已删除群组</string>
@@ -91,8 +91,169 @@
<string name="allow_disappearing_messages_only_if">仅有您的联系人许可后才允许限时消息。</string>
<string name="allow_irreversible_message_deletion_only_if">仅有您的联系人许可后才允许不可撤回消息移除。</string>
<string name="allow_to_delete_messages">允许不可撤回地删除已发送消息。</string>
<string name="users_delete_profile_for">为此删除聊天个人资料</string>
<string name="users_delete_profile_for">为此删除聊天资料</string>
<string name="delete_database">删除数据库</string>
<string name="keychain_allows_to_receive_ntfs">在您重启应用程序或者更换密码后安卓密钥库系统用来安全地保存密码——来确保收到消息提醒</string>
<string name="keychain_is_storing_securely">安卓密钥库系统用来安全地保存密码——来确保消息提醒服务运作。</string>
<string name="keychain_allows_to_receive_ntfs">在您重启应用程序或者更换密码后安卓密钥库系统用来安全地保存密码——来确保收到通知</string>
<string name="keychain_is_storing_securely">安卓密钥库系统用来安全地保存密码——来确保通知服务运作。</string>
<string name="appearance_settings">外观</string>
<string name="app_version_title">应用程序版本</string>
<string name="full_backup">应用程序数据备份</string>
<string name="settings_section_title_icon">应用程序图标</string>
<string name="incognito_random_profile_from_contact_description">一个随机资料将被发送到收到您链接的联系人那里</string>
<string name="app_version_name">应用程序版本v%s</string>
<string name="notifications_mode_off_desc">仅在运行时应用程序可以接受通知,不会启动后台服务</string>
<string name="incognito_random_profile_description">一个随机资料将发送给您的联系人</string>
<string name="auth_unavailable">身份验证不可用</string>
<string name="auto_accept_images">自动接受图像</string>
<string name="attach">附件</string>
<string name="icon_descr_audio_call">语音通话</string>
<string name="audio_call_no_encryption">语音通话(非端到端加密)</string>
<string name="v4_2_auto_accept_contact_requests">自动接受联系人请求</string>
<string name="integrity_msg_bad_hash">错误消息散列</string>
<string name="integrity_msg_bad_id">错误消息 ID</string>
<string name="settings_audio_video_calls">语音和视频通话</string>
<string name="accept_automatically">自动地</string>
<string name="turning_off_service_and_periodic">激活电池优化,关闭了后台服务和新消息的定期请求。您可以通过设置重新启用它们。</string>
<string name="notifications_mode_service_desc">后台服务一直在运行——一旦有消息,就会显示通知。</string>
<string name="icon_descr_audio_off">关闭音频</string>
<string name="icon_descr_audio_on">开启音频</string>
<string name="icon_descr_asked_to_receive">已要求接收图片</string>
<string name="network_session_mode_user_description">一个单独的TCP连接和SOCKS凭证将被用于<b>,用于您在应用程序中的每个聊天资料</b></string>
<string name="network_session_mode_entity_description">每个联系人和群组成员&lt;/b&gt; 将使用单独的 TCP 连接(和 SOCKS 凭证)&lt;b&gt;
\n&lt;b&gt;请注意&lt;/b&gt;:如果您有很多连接,您的电池和流量消耗可能会大大增加,并且某些连接可能会失败。</string>
<string name="back">返回</string>
<string name="add_new_contact_to_create_one_time_QR_code"><b>添加新联系人</b>:为您的联系人创建一次性二维码。</string>
<string name="onboarding_notifications_mode_off_desc"><b> 最适合电池 </b>。您只会在应用程序运行时收到通知,不会使用后台服务。</string>
<string name="onboarding_notifications_mode_periodic_desc"><b> 适合于电池 </b>。后台服务每 10 分钟检查一次新消息。您可能会错过来电和紧急信息。</string>
<string name="bold">加粗</string>
<string name="both_you_and_your_contacts_can_delete">您和您的联系人都可以不可逆转地删除已发送的消息。</string>
<string name="both_you_and_your_contact_can_send_disappearing">您和您的联系人都可以发送限时消息。</string>
<string name="both_you_and_your_contact_can_send_voice">您和您的联系人都可以发送语音消息。</string>
<string name="it_can_disabled_via_settings_notifications_still_shown"><b> 可以通过设置禁用它 </b> - 应用程序运行时仍会显示通知。</string>
<string name="onboarding_notifications_mode_service_desc"><b> 使用更多电池 </b>!后台服务一直在运行——一旦收到消息,就会显示通知。</string>
<string name="impossible_to_recover_passphrase"><b>请注意</b>:如果您丢失密码,您将无法恢复或者更改密码。</string>
<string name="call_already_ended">通话已经结束!</string>
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>扫描二维码</b> :与向您展示二维码的联系人联系。</string>
<string name="alert_title_cant_invite_contacts">无法邀请联系人!</string>
<string name="invite_prohibited">无法邀请联系人!</string>
<string name="cancel_verb">取消</string>
<string name="callstatus_ended">通话结束 <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
<string name="change_verb">更换</string>
<string name="icon_descr_call_ended">通话结束</string>
<string name="change_database_passphrase_question">更改数据库密码?</string>
<string name="callstatus_error">通话错误</string>
<string name="rcv_conn_event_switch_queue_phase_completed">为您更改地址</string>
<string name="callstatus_in_progress">通话中</string>
<string name="icon_descr_call_progress">通话进行中</string>
<string name="callstatus_calling">呼叫中…</string>
<string name="icon_descr_cancel_live_message">取消实时消息</string>
<string name="settings_section_title_calls">通话</string>
<string name="call_on_lock_screen">在锁定屏幕上通话:</string>
<string name="icon_descr_cancel_image_preview">取消图片预览</string>
<string name="feature_cancelled_item">已取消 %s</string>
<string name="icon_descr_cancel_file_preview">取消文件预览</string>
<string name="cannot_access_keychain">无法访问密钥库来保存数据库密码</string>
<string name="cannot_receive_file">无法接收文件</string>
<string name="database_initialization_error_title">无法初始化数据库</string>
<string name="rcv_group_event_changed_member_role">将 %s 的角色更改为 %s</string>
<string name="rcv_group_event_changed_your_role">将您的角色更改为 %s</string>
<string name="change_role">改变角色</string>
<string name="change_member_role_question">更改群组角色?</string>
<string name="icon_descr_cancel_link_preview">取消链接预览</string>
<string name="snd_conn_event_switch_queue_phase_changing_for_member">为 %s 更改地址…</string>
<string name="rcv_conn_event_switch_queue_phase_changing">更改地址…</string>
<string name="snd_conn_event_switch_queue_phase_changing">更改地址…</string>
<string name="create_your_profile">创建您的资料</string>
<string name="chat_database_deleted">聊天数据库已删除</string>
<string name="chat_database_imported">聊天数据库已导入</string>
<string name="keychain_error">钥匙串错误</string>
<string name="chat_archive_section">聊天档案</string>
<string name="chat_archive_header">聊天档案</string>
<string name="chat_console">聊天控制台</string>
<string name="chat_database_section">聊天数据库</string>
<string name="chat_is_stopped_indication">聊天已停止</string>
<string name="chat_is_running">聊天进行中</string>
<string name="chat_is_stopped">聊天已停止</string>
<string name="contact_preferences">联系人偏好设置</string>
<string name="your_preferences">您的偏好设置</string>
<string name="group_preferences">群组偏好设置</string>
<string name="only_group_owners_can_change_prefs">只有群主可以改变群组偏好设置。</string>
<string name="save_preferences_question">保存偏好设置?</string>
<string name="set_group_preferences">设置群组偏好设置</string>
<string name="privacy_redefined">重新定义隐私</string>
<string name="v4_3_improved_privacy_and_security">改进的隐私和安全</string>
<string name="incognito">隐身聊天</string>
<string name="joining_group">加入群组</string>
<string name="join_group_incognito_button">加入隐身聊天</string>
<string name="settings_section_title_incognito">隐身聊天模式</string>
<string name="group_unsupported_incognito_main_profile_sent">这里不支持隐身聊天模式——您的主要资料将被发送给群组成员</string>
<string name="tap_to_start_new_chat">点击开始一个新聊天</string>
<string name="incognito_random_profile">您的随机资料</string>
<string name="description_via_contact_address_link_incognito">通过联系人地址链接隐身聊天</string>
<string name="description_via_group_link_incognito">通过群组链接隐身聊天</string>
<string name="description_you_shared_one_time_link_incognito">您分享了一次性链接隐身聊天</string>
<string name="group_invitation_tap_to_join_incognito">点击以加入隐身聊天</string>
<string name="group_main_profile_sent">您的聊天资料将被发送给群组成员</string>
<string name="invite_prohibited_description">您正在尝试邀请与您共享隐身聊天资料的联系人加入您使用主要资料的群组</string>
<string name="incognito_info_protects">隐身聊天模式可以保护您的主要资料名和头像的隐私——为每个新联系人创建一个新的随机资料。</string>
<string name="alert_title_cant_invite_contacts_descr">您正在为该群组使用隐身聊天资料——为防止共享您的主要资料,邀请联系人是不允许的</string>
<string name="your_profile_will_be_sent">您的聊天资料将被发送给您的联系人</string>
<string name="description_via_one_time_link_incognito">通过一次性链接隐身聊天</string>
<string name="only_group_owners_can_enable_voice">只有群主可以启用语音信息。</string>
<string name="your_privacy">您的隐私设置</string>
<string name="privacy_and_security">隐私和安全</string>
<string name="smp_servers_save">保存服务器</string>
<string name="incognito_info_allows">它允许在一个聊天资料中有多个匿名连接,而它们之间没有任何共享数据。</string>
<string name="incognito_info_find">要查找用于隐身聊天连接的资料,点击聊天顶部的联系人或群组名。</string>
<string name="incognito_info_share">当您与某人共享隐身聊天资料时,该资料将用于他们邀请您加入的群组。</string>
<string name="v4_3_improved_server_configuration">改进的服务器配置</string>
<string name="icon_descr_email">电邮</string>
<string name="edit_image">编辑图片</string>
<string name="button_edit_group_profile">编辑群组资料</string>
<string name="error_encrypting_database">加密数据库错误</string>
<string name="error_exporting_chat_database">导出聊天数据库错误</string>
<string name="error_importing_database">导入聊天数据库错误</string>
<string name="error_joining_group">加入群组错误</string>
<string name="error_deleting_user">删除用户资料错误</string>
<string name="passphrase_is_different">数据库密码不同于保存在密钥库中的密码。</string>
<string name="database_encryption_will_be_updated">数据库加密密码将被更新并存储在密钥库中。</string>
<string name="database_will_be_encrypted_and_passphrase_stored">数据库将被加密,密码存储在密钥库中。</string>
<string name="restore_passphrase_not_found_desc">在密匙库中没有找到密码,请手动输入。如果你使用备份工具恢复了应用程序的数据,可能会发生这种情况。如果不是这种情况,请联系开发者。</string>
<string name="remove_passphrase_from_keychain">从密钥库中删除密码?</string>
<string name="save_passphrase_in_keychain">在密钥库中保存密码</string>
<string name="simplex_service_notification_title"><xliff:g id="appNameFull">SimpleX Chat</xliff:g> 服务</string>
<string name="settings_notifications_mode_title">通知服务</string>
<string name="confirm_new_passphrase">确认新口令…</string>
<string name="group_member_status_complete">完整的</string>
<string name="group_member_status_connected">连接的</string>
<string name="chat_preferences">聊天偏好</string>
<string name="settings_section_title_chats">聊天</string>
<string name="clear_verb">清空</string>
<string name="clear_chat_menu_action">清空</string>
<string name="clear_chat_button">清除聊天记录</string>
<string name="clear_chat_question">清除聊天记录?</string>
<string name="chat_with_developers">与开发者聊天</string>
<string name="clear_contacts_selection_button">清除</string>
<string name="colored">有色</string>
<string name="callstate_connected">连接的</string>
<string name="connect_button">连接</string>
<string name="connect_via_link_verb">连接</string>
<string name="choose_file">选择文件</string>
<string name="network_session_mode_user">聊天资料</string>
<string name="v4_5_transport_isolation_descr">按聊天资料默认或按连接BETA</string>
<string name="smp_servers_check_address">检查服务器地址并再试一次。</string>
<string name="clear_verification">清晰的验证</string>
<string name="icon_descr_close_button">关闭键</string>
<string name="configure_ICE_servers">配置ICE服务器</string>
<string name="confirm_verb">确认</string>
<string name="auth_confirm_credential">确认您的证书</string>
<string name="server_connected">连接的</string>
<string name="icon_descr_server_status_connected">连接的</string>
<string name="smp_server_test_connect">连接</string>
<string name="notification_contact_connected">连接的</string>
<string name="server_connecting">连接的</string>
<string name="group_member_status_connecting">连接的</string>
<string name="notifications_mode_periodic_desc">每10分钟检查一次新消息最长1分钟</string>
<string name="rcv_group_event_member_connected">连接的</string>
<string name="v4_4_verify_connection_security_desc">与你的联系人比较安全码</string>
</resources>

View File

@@ -1,2 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="chat_item_ttl_week">1 個星期</string>
<string name="accept_requests">接受請求</string>
<string name="a_plus_b">a + b</string>
<string name="about_simplex">關於 SimpleX</string>
<string name="accept_call_on_lock_screen">接受</string>
<string name="accept_feature">接受</string>
<string name="chat_item_ttl_day">1 天</string>
<string name="chat_item_ttl_month">1 個月</string>
<string name="accept_contact_button">接受</string>
<string name="about_simplex_chat">關於<xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="accept_connection_request__question">接受新連線要求\?</string>
<string name="callstatus_accepted">已接受電話</string>
<string name="network_enable_socks_info">要在端口 9050 啟動 SOCKS 代理伺服器嗎\? 在啟用這個選項之前,必須先啟動代理伺服器。</string>
<string name="group_member_role_admin">管理員</string>
<string name="above_then_preposition_continuation">以上,然後:</string>
<string name="smp_servers_preset_add">加入預設伺服器</string>
<string name="smp_servers_add">新增伺服器…</string>
<string name="accept">接受</string>
</resources>

View File

@@ -28,6 +28,7 @@
<string name="unknown_message_format">unknown message format</string>
<string name="invalid_message_format">invalid message format</string>
<string name="live">LIVE</string>
<string name="moderated_description">moderated</string>
<string name="invalid_chat">invalid chat</string>
<string name="invalid_data">invalid data</string>
@@ -673,7 +674,6 @@
<string name="your_privacy">Your privacy</string>
<string name="protect_app_screen">Protect app screen</string>
<string name="auto_accept_images">Auto-accept images</string>
<string name="transfer_images_faster">Transfer images faster</string>
<string name="send_link_previews">Send link previews</string>
<string name="full_backup">App data backup</string>
@@ -1119,4 +1119,18 @@
<string name="v4_4_live_messages_desc">Recipients see updates as you type them.</string>
<string name="v4_4_verify_connection_security">Verify connection security</string>
<string name="v4_4_verify_connection_security_desc">Compare security codes with your contacts.</string>
<string name="v4_4_french_interface">French interface</string>
<string name="v4_4_french_interface_descr">Thanks to the users contribute via Weblate!</string>
<string name="v4_5_multiple_chat_profiles">Multiple chat profiles</string>
<string name="v4_5_multiple_chat_profiles_descr">Different names, avatars and transport isolation.</string>
<string name="v4_5_message_draft">Message draft</string>
<string name="v4_5_message_draft_descr">Preserve the last message draft, with attachments.</string>
<string name="v4_5_transport_isolation">Transport isolation</string>
<string name="v4_5_transport_isolation_descr">By chat profile (default) or by connection (BETA).</string>
<string name="v4_5_private_filenames">Private filenames</string>
<string name="v4_5_private_filenames_descr">To protect timezone, image/voice files use UTC.</string>
<string name="v4_5_reduced_battery_usage">Reduced battery usage</string>
<string name="v4_5_reduced_battery_usage_descr">More improvements are coming soon!</string>
<string name="v4_5_italian_interface">Italian interface</string>
<string name="v4_5_italian_interface_descr">Thanks to the users contribute via Weblate!</string>
</resources>

View File

@@ -1,3 +1,4 @@
<paths>
<files-path name="my_files" path="/"/>
<files-path name="app_temp" path="../app_temp"/>
</paths>

View File

@@ -64,7 +64,9 @@ struct ContentView: View {
alertManager.showAlert(laNoticeAlert())
} else if !chatModel.showCallView && CallController.shared.activeCallInvitation == nil {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
showWhatsNew = shouldShowWhatsNew()
if !showWhatsNew {
showWhatsNew = shouldShowWhatsNew()
}
}
}
prefShowLANotice = true

View File

@@ -133,7 +133,7 @@ func imageHasAlpha(_ img: UIImage) -> Bool {
context.draw(cgImage, in: CGRect(x: 0, y: 0, width: cgImage.width, height: cgImage.height))
if let data = context.data {
let data = data.assumingMemoryBound(to: UInt8.self)
let size = cgImage.width * cgImage.height
let size = cgImage.width * cgImage.height * 4
var i = 0
while i < size {
if data[i] < 255 { return true }
@@ -203,3 +203,51 @@ func dropImagePrefix(_ s: String) -> String {
private func dropPrefix(_ s: String, _ prefix: String) -> String {
s.hasPrefix(prefix) ? String(s.dropFirst(prefix.count)) : s
}
extension UIImage {
func replaceColor(_ from: UIColor, _ to: UIColor) -> UIImage {
if let cgImage = cgImage {
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedFirst.rawValue)
if let context = CGContext(data: nil, width: cgImage.width, height: cgImage.height, bitsPerComponent: 8, bytesPerRow: cgImage.width * 4, space: colorSpace, bitmapInfo: bitmapInfo.rawValue) {
context.draw(cgImage, in: CGRect(x: 0, y: 0, width: cgImage.width, height: cgImage.height))
if let data = context.data {
var fromAlpha: CGFloat = 0
var fromRed: CGFloat = 0
var fromGreen: CGFloat = 0
var fromBlue: CGFloat = 0
var toAlpha: CGFloat = 0
var toRed: CGFloat = 0
var toGreen: CGFloat = 0
var toBlue: CGFloat = 0
from.getRed(&fromRed, green: &fromGreen, blue: &fromBlue, alpha: &fromAlpha)
to.getRed(&toRed, green: &toGreen, blue: &toBlue, alpha: &toAlpha)
let fAlpha = UInt8(UInt8(fromAlpha * 255))
let fRed = UInt8(fromRed * 255)
let fGreen = UInt8(fromGreen * 255)
let fBlue = UInt8(fromBlue * 255)
let tAlpha = UInt8(toAlpha * 255)
let tRed = UInt8(toRed * 255)
let tGreen = UInt8(toGreen * 255)
let tBlue = UInt8(toBlue * 255)
let data = data.assumingMemoryBound(to: UInt8.self)
let size = cgImage.width * cgImage.height * 4
var i = 0
while i < size {
if data[i] == fAlpha && data[i + 1] == fRed && data[i + 2] == fGreen && data[i + 3] == fBlue {
data[i + 0] = tAlpha
data[i + 1] = tRed
data[i + 2] = tGreen
data[i + 3] = tBlue
}
i += 4
}
}
if let img = context.makeImage() {
return UIImage(cgImage: img)
}
}
}
return self
}
}

View File

@@ -86,15 +86,22 @@ class NtfManager: NSObject, UNUserNotificationCenterDelegate, ObservableObject {
if UIApplication.shared.applicationState == .active {
switch content.categoryIdentifier {
case ntfCategoryMessageReceived:
let recent = recentInTheSameChat(content)
if model.chatId == nil {
// in the chat list
return recentInTheSameChat(content) ? [] : [.sound, .list]
// in the chat list...
if model.currentUser?.userId == (content.userInfo["userId"] as? Int64) {
// ... of the current user
return recent ? [] : [.sound, .list]
} else {
// ... of different user
return recent ? [.banner] : [.sound, .banner, .list]
}
} else if model.chatId == content.targetContentIdentifier {
// in the current chat
return recentInTheSameChat(content) ? [] : [.sound, .list]
return recent ? [] : [.sound, .list]
} else {
// in another chat
return recentInTheSameChat(content) ? [.banner, .list] : [.sound, .banner, .list]
return recent ? [.banner, .list] : [.sound, .banner, .list]
}
// this notification is deliverd from the notifications server
// when the app is in foreground it does not need to be shown

View File

@@ -635,14 +635,13 @@ func apiChatUnread(type: ChatType, id: Int64, unreadChat: Bool) async throws {
try await sendCommandOkResp(.apiChatUnread(type: type, id: id, unreadChat: unreadChat))
}
func receiveFile(fileId: Int64) async {
let inline = privacyTransferImagesInlineGroupDefault.get()
if let chatItem = await apiReceiveFile(fileId: fileId, inline: inline) {
DispatchQueue.main.async { chatItemSimpleUpdate(chatItem) }
func receiveFile(user: User, fileId: Int64) async {
if let chatItem = await apiReceiveFile(fileId: fileId) {
DispatchQueue.main.async { chatItemSimpleUpdate(user, chatItem) }
}
}
func apiReceiveFile(fileId: Int64, inline: Bool) async -> AChatItem? {
func apiReceiveFile(fileId: Int64, inline: Bool? = nil) async -> AChatItem? {
let r = await chatSendCmd(.receiveFile(fileId: fileId, inline: inline))
let am = AlertManager.shared
if case let .rcvFileAccepted(_, chatItem) = r { return chatItem }
@@ -1025,6 +1024,8 @@ func processReceivedMsg(_ res: ChatResponse) async {
m.updateContact(contact)
m.dismissConnReqView(contact.activeConn.id)
m.removeChat(contact.activeConn.id)
}
if contact.directOrUsed {
NtfManager.shared.notifyContactConnected(user, contact)
}
m.setContactNetworkStatus(contact, .connected)
@@ -1080,16 +1081,13 @@ func processReceivedMsg(_ res: ChatResponse) async {
}
}
case let .newChatItem(user, aChatItem):
if !active(user) {
if case .rcvNew = aChatItem.chatItem.meta.itemStatus, aChatItem.chatInfo.ntfsEnabled {
m.increaseUnreadCounter(user: user)
}
return
}
let cInfo = aChatItem.chatInfo
let cItem = aChatItem.chatItem
m.addChatItem(cInfo, cItem)
if active(user) {
m.addChatItem(cInfo, cItem)
} else if cItem.isRcvNew && cInfo.ntfsEnabled {
m.increaseUnreadCounter(user: user)
}
if let file = cItem.file,
let mc = cItem.content.msgContent,
file.fileSize <= MAX_IMAGE_SIZE_AUTO_RCV {
@@ -1097,7 +1095,7 @@ func processReceivedMsg(_ res: ChatResponse) async {
if (mc.isImage && acceptImages)
|| (mc.isVoice && ((file.fileSize > MAX_VOICE_MESSAGE_SIZE_INLINE_SEND && acceptImages) || cInfo.chatType == .group)) {
Task {
await receiveFile(fileId: file.fileId) // TODO check inlineFileMode != IFMSent
await receiveFile(user: user, fileId: file.fileId) // TODO check inlineFileMode != IFMSent
}
}
}
@@ -1105,28 +1103,21 @@ func processReceivedMsg(_ res: ChatResponse) async {
NtfManager.shared.notifyMessageReceived(user, cInfo, cItem)
}
case let .chatItemStatusUpdated(user, aChatItem):
if !active(user) { return }
let cInfo = aChatItem.chatInfo
let cItem = aChatItem.chatItem
var res = false
if !cItem.isDeletedContent {
res = m.upsertChatItem(cInfo, cItem)
}
if res {
if !cItem.isDeletedContent && (!active(user) || m.upsertChatItem(cInfo, cItem)) {
NtfManager.shared.notifyMessageReceived(user, cInfo, cItem)
} else if let endTask = m.messageDelivery[cItem.id] {
}
if let endTask = m.messageDelivery[cItem.id] {
switch cItem.meta.itemStatus {
case .sndSent: endTask()
case .sndErrorAuth: endTask()
case .sndError: endTask()
default: break
default: ()
}
}
case let .chatItemUpdated(user, aChatItem):
if active(user) {
chatItemSimpleUpdate(aChatItem)
}
chatItemSimpleUpdate(user, aChatItem)
case let .chatItemDeleted(user, deletedChatItem, toChatItem, _):
if !active(user) {
if toChatItem == nil && deletedChatItem.chatItem.isRcvNew && deletedChatItem.chatInfo.ntfsEnabled {
@@ -1190,21 +1181,13 @@ func processReceivedMsg(_ res: ChatResponse) async {
m.updateGroup(toGroup)
}
case let .rcvFileStart(user, aChatItem):
if active(user) {
chatItemSimpleUpdate(aChatItem)
}
chatItemSimpleUpdate(user, aChatItem)
case let .rcvFileComplete(user, aChatItem):
if active(user) {
chatItemSimpleUpdate(aChatItem)
}
chatItemSimpleUpdate(user, aChatItem)
case let .sndFileStart(user, aChatItem, _):
if active(user) {
chatItemSimpleUpdate(aChatItem)
}
chatItemSimpleUpdate(user, aChatItem)
case let .sndFileComplete(user, aChatItem, _):
if !active(user) { return }
chatItemSimpleUpdate(aChatItem)
chatItemSimpleUpdate(user, aChatItem)
let cItem = aChatItem.chatItem
let mc = cItem.content.msgContent
if aChatItem.chatInfo.chatType == .direct,
@@ -1269,10 +1252,6 @@ func processReceivedMsg(_ res: ChatResponse) async {
logger.debug("unsupported event: \(res.responseType)")
}
func active(_ user: User) -> Bool {
user.id == m.currentUser?.id
}
func withCall(_ contact: Contact, _ perform: (Call) -> Void) {
if let call = m.activeCall, call.contact.apiId == contact.apiId {
perform(call)
@@ -1283,12 +1262,19 @@ func processReceivedMsg(_ res: ChatResponse) async {
}
}
func chatItemSimpleUpdate(_ aChatItem: AChatItem) {
func active(_ user: User) -> Bool {
user.id == ChatModel.shared.currentUser?.id
}
func chatItemSimpleUpdate(_ user: User, _ aChatItem: AChatItem) {
let m = ChatModel.shared
let cInfo = aChatItem.chatInfo
let cItem = aChatItem.chatItem
if m.upsertChatItem(cInfo, cItem) {
NtfManager.shared.notifyMessageReceived(m.currentUser!, cInfo, cItem)
let notify = { NtfManager.shared.notifyMessageReceived(user, cInfo, cItem) }
if !active(user) {
notify()
} else if m.upsertChatItem(cInfo, cItem) {
notify()
}
}

View File

@@ -228,8 +228,9 @@ struct ActiveCallOverlay: View {
Text(call.callState.text)
HStack {
Text(call.encryptionStatus)
if let connInfo = call.connectionInfo?.text {
Text("(") + Text(connInfo) + Text(")")
if let connInfo = call.connectionInfo {
// Text("(") + Text(connInfo.text) + Text(", \(connInfo.protocolText))")
Text("(") + Text(connInfo.text) + Text(")")
}
}
}

View File

@@ -362,22 +362,37 @@ struct ConnectionInfo: Codable, Equatable {
var remoteCandidate: RTCIceCandidate?
var text: LocalizedStringKey {
get {
if localCandidate?.candidateType == .host && remoteCandidate?.candidateType == .host {
return "peer-to-peer"
} else if localCandidate?.candidateType == .relay && remoteCandidate?.candidateType == .relay {
return "via relay"
} else {
let unknown = NSLocalizedString("unknown", comment: "connection info")
return "\(localCandidate?.candidateType?.rawValue ?? unknown) / \(remoteCandidate?.candidateType?.rawValue ?? unknown)"
}
let local = localCandidate?.candidateType
let remote = remoteCandidate?.candidateType
if local == .host && remote == .host {
return "peer-to-peer"
} else if local == .relay && remote == .relay {
return "via relay"
} else {
let unknown = NSLocalizedString("unknown", comment: "connection info")
return "\(local?.rawValue ?? unknown) / \(remote?.rawValue ?? unknown)"
}
}
var protocolText: String {
let unknown = NSLocalizedString("unknown", comment: "connection info")
let local = localCandidate?.protocol?.uppercased() ?? unknown
let localRelay = localCandidate?.relayProtocol?.uppercased() ?? unknown
let remote = remoteCandidate?.protocol?.uppercased() ?? unknown
let localText = localRelay == local || localCandidate?.relayProtocol == nil
? local
: "\(local) (\(localRelay))"
return local == remote
? localText
: "\(localText) / \(remote)"
}
}
// https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate
struct RTCIceCandidate: Codable, Equatable {
var candidateType: RTCIceCandidateType?
var `protocol`: String?
var relayProtocol: String?
}
// https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate/type
@@ -396,18 +411,20 @@ struct RTCIceServer: Codable, Equatable {
}
// the servers are expected in this format:
// stun:stun.simplex.im:443
// turn:private:yleob6AVkiNI87hpR94Z@turn.simplex.im:443
// stun:stun.simplex.im:443?transport=tcp
// turn:private:yleob6AVkiNI87hpR94Z@turn.simplex.im:443?transport=tcp
func parseRTCIceServer(_ str: String) -> RTCIceServer? {
var s = replaceScheme(str, "stun:")
s = replaceScheme(s, "turn:")
s = replaceScheme(s, "turns:")
if let u: URL = URL(string: s),
let scheme = u.scheme,
let host = u.host,
let port = u.port,
u.path == "" && (scheme == "stun" || scheme == "turn") {
u.path == "" && (scheme == "stun" || scheme == "turn" || scheme == "turns") {
let query = u.query == nil || u.query == "" ? "" : "?" + (u.query ?? "")
return RTCIceServer(
urls: ["\(scheme):\(host):\(port)"],
urls: ["\(scheme):\(host):\(port)\(query)"],
username: u.user,
credential: u.password
)

View File

@@ -75,7 +75,7 @@ struct CIFeaturePreferenceView_Previews: PreviewProvider {
let content = CIContent.rcvChatPreference(feature: .timedMessages, allowed: .yes, param: 30)
let chatItem = ChatItem(
chatDir: .directRcv,
meta: CIMeta.getSample(1, .now, content.text, .rcvRead, false, false, false),
meta: CIMeta.getSample(1, .now, content.text, .rcvRead),
content: content,
quotedItem: nil,
file: nil

View File

@@ -63,7 +63,9 @@ struct CIFileView: View {
if fileSizeValid() {
Task {
logger.debug("CIFileView fileAction - in .rcvInvitation, in Task")
await receiveFile(fileId: file.fileId)
if let user = ChatModel.shared.currentUser {
await receiveFile(user: user, fileId: file.fileId)
}
}
} else {
let prettyMaxFileSize = ByteCountFormatter().string(fromByteCount: MAX_FILE_SIZE)
@@ -136,14 +138,14 @@ struct CIFileView_Previews: PreviewProvider {
static var previews: some View {
let sentFile: ChatItem = ChatItem(
chatDir: .directSnd,
meta: CIMeta.getSample(1, .now, "", .sndSent, false, true, false),
meta: CIMeta.getSample(1, .now, "", .sndSent, itemEdited: true),
content: .sndMsgContent(msgContent: .file("")),
quotedItem: nil,
file: CIFile.getSample(fileStatus: .sndComplete)
)
let fileChatItemWtFile = ChatItem(
chatDir: .directRcv,
meta: CIMeta.getSample(1, .now, "", .rcvRead, false, false, false),
meta: CIMeta.getSample(1, .now, "", .rcvRead),
content: .rcvMsgContent(msgContent: .file("")),
quotedItem: nil,
file: nil

View File

@@ -35,7 +35,9 @@ struct CIImageView: View {
switch file.fileStatus {
case .rcvInvitation:
Task {
await receiveFile(fileId: file.fileId)
if let user = ChatModel.shared.currentUser {
await receiveFile(user: user, fileId: file.fileId)
}
// TODO image accepted alert?
}
case .rcvAccepted:

View File

@@ -52,7 +52,7 @@ struct CIMetaView_Previews: PreviewProvider {
static var previews: some View {
Group {
CIMetaView(chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndSent))
CIMetaView(chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndSent, false, true))
CIMetaView(chatItem: ChatItem.getSample(2, .directSnd, .now, "https://simplex.chat", .sndSent, itemEdited: true))
CIMetaView(chatItem: ChatItem.getDeletedContentSample())
}
.previewLayout(.fixed(width: 360, height: 100))

View File

@@ -221,14 +221,14 @@ struct CIVoiceView_Previews: PreviewProvider {
static var previews: some View {
let sentVoiceMessage: ChatItem = ChatItem(
chatDir: .directSnd,
meta: CIMeta.getSample(1, .now, "", .sndSent, false, true, false),
meta: CIMeta.getSample(1, .now, "", .sndSent, itemEdited: true),
content: .sndMsgContent(msgContent: .voice(text: "", duration: 30)),
quotedItem: nil,
file: CIFile.getSample(fileStatus: .sndComplete)
)
let voiceMessageWtFile = ChatItem(
chatDir: .directRcv,
meta: CIMeta.getSample(1, .now, "", .rcvRead, false, false, false),
meta: CIMeta.getSample(1, .now, "", .rcvRead),
content: .rcvMsgContent(msgContent: .voice(text: "", duration: 30)),
quotedItem: nil,
file: nil

View File

@@ -10,6 +10,7 @@ import SwiftUI
import SimpleXChat
struct DeletedItemView: View {
@Environment(\.colorScheme) var colorScheme
var chatItem: ChatItem
var showMember = false
@@ -26,7 +27,7 @@ struct DeletedItemView: View {
}
.padding(.leading, 12)
.padding(.vertical, 6)
.background(Color(uiColor: .tertiarySystemGroupedBackground))
.background(chatItemFrameColor(chatItem, colorScheme))
.cornerRadius(18)
.textSelection(.disabled)
}

View File

@@ -47,14 +47,14 @@ struct FramedCIVoiceView_Previews: PreviewProvider {
static var previews: some View {
let sentVoiceMessage: ChatItem = ChatItem(
chatDir: .directSnd,
meta: CIMeta.getSample(1, .now, "", .sndSent, false, true, false),
meta: CIMeta.getSample(1, .now, "", .sndSent, itemEdited: true),
content: .sndMsgContent(msgContent: .voice(text: "Hello there", duration: 30)),
quotedItem: nil,
file: CIFile.getSample(fileStatus: .sndComplete)
)
let voiceMessageWithQuote: ChatItem = ChatItem(
chatDir: .directSnd,
meta: CIMeta.getSample(1, .now, "", .sndSent, false, true, false),
meta: CIMeta.getSample(1, .now, "", .sndSent, itemEdited: true),
content: .sndMsgContent(msgContent: .voice(text: "", duration: 30)),
quotedItem: CIQuote.getSample(1, .now, "Hi", chatDir: .directRcv),
file: CIFile.getSample(fileStatus: .sndComplete)

File diff suppressed because one or more lines are too long

View File

@@ -37,7 +37,7 @@ struct MarkedDeletedItemView: View {
struct MarkedDeletedItemView_Previews: PreviewProvider {
static var previews: some View {
Group {
MarkedDeletedItemView(chatItem: ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent, true, false))
MarkedDeletedItemView(chatItem: ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent, itemDeleted: .deleted))
}
.previewLayout(.fixed(width: 360, height: 200))
}

View File

@@ -19,9 +19,9 @@ struct ChatItemView: View {
var body: some View {
let ci = chatItem
if chatItem.meta.itemDeleted && !revealed {
if chatItem.meta.itemDeleted != nil && !revealed {
MarkedDeletedItemView(chatItem: chatItem, showMember: showMember)
} else if ci.quotedItem == nil && !ci.meta.itemDeleted && !ci.meta.isLive {
} else if ci.quotedItem == nil && ci.meta.itemDeleted == nil && !ci.meta.isLive {
if let mc = ci.content.msgContent, mc.isText && isShortEmoji(ci.content.text) {
EmojiItemView(chatItem: ci)
} else if ci.content.text.isEmpty, case let .voice(_, duration) = ci.content.msgContent {
@@ -72,6 +72,8 @@ struct ChatItemContentView<Content: View>: View {
case let .sndGroupFeature(feature, preference, _): chatFeatureView(feature, preference.enable.iconColor)
case let .rcvChatFeatureRejected(feature): chatFeatureView(feature, .red)
case let .rcvGroupFeatureRejected(feature): chatFeatureView(feature, .red)
case .sndModerated: deletedItemView()
case .rcvModerated: deletedItemView()
case let .invalidJSON(json): CIInvalidJSONView(json: json)
}
}
@@ -106,9 +108,9 @@ struct ChatItemView_Previews: PreviewProvider {
ChatItemView(chatInfo: ChatInfo.sampleData.direct, chatItem: ChatItem.getSample(2, .directRcv, .now, "🙂🙂🙂🙂🙂"), revealed: Binding.constant(false))
ChatItemView(chatInfo: ChatInfo.sampleData.direct, chatItem: ChatItem.getSample(2, .directRcv, .now, "🙂🙂🙂🙂🙂🙂"), revealed: Binding.constant(false))
ChatItemView(chatInfo: ChatInfo.sampleData.direct, chatItem: ChatItem.getDeletedContentSample(), revealed: Binding.constant(false))
ChatItemView(chatInfo: ChatInfo.sampleData.direct, chatItem: ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent, true, false), revealed: Binding.constant(false))
ChatItemView(chatInfo: ChatInfo.sampleData.direct, chatItem: ChatItem.getSample(1, .directSnd, .now, "🙂", .sndSent, false, false, true), revealed: Binding.constant(true))
ChatItemView(chatInfo: ChatInfo.sampleData.direct, chatItem: ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent, false, false, true), revealed: Binding.constant(true))
ChatItemView(chatInfo: ChatInfo.sampleData.direct, chatItem: ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent, itemDeleted: .deleted), revealed: Binding.constant(false))
ChatItemView(chatInfo: ChatInfo.sampleData.direct, chatItem: ChatItem.getSample(1, .directSnd, .now, "🙂", .sndSent, itemLive: true), revealed: Binding.constant(true))
ChatItemView(chatInfo: ChatInfo.sampleData.direct, chatItem: ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent, itemLive: true), revealed: Binding.constant(true))
}
.previewLayout(.fixed(width: 360, height: 70))
.environmentObject(Chat.sampleData)
@@ -123,7 +125,7 @@ struct ChatItemView_NonMsgContentDeleted_Previews: PreviewProvider {
chatInfo: ChatInfo.sampleData.direct,
chatItem: ChatItem(
chatDir: .directRcv,
meta: CIMeta.getSample(1, .now, "1 skipped message", .rcvRead, true, false, false),
meta: CIMeta.getSample(1, .now, "1 skipped message", .rcvRead, itemDeleted: .deleted),
content: .rcvIntegrityError(msgError: .msgSkipped(fromMsgId: 1, toMsgId: 2)),
quotedItem: nil,
file: nil
@@ -134,7 +136,7 @@ struct ChatItemView_NonMsgContentDeleted_Previews: PreviewProvider {
chatInfo: ChatInfo.sampleData.direct,
chatItem: ChatItem(
chatDir: .directRcv,
meta: CIMeta.getSample(1, .now, "received invitation to join group team as admin", .rcvRead, true, false, false),
meta: CIMeta.getSample(1, .now, "received invitation to join group team as admin", .rcvRead, itemDeleted: .deleted),
content: .rcvGroupInvitation(groupInvitation: CIGroupInvitation.getSample(status: .pending), memberRole: .admin),
quotedItem: nil,
file: nil
@@ -145,7 +147,7 @@ struct ChatItemView_NonMsgContentDeleted_Previews: PreviewProvider {
chatInfo: ChatInfo.sampleData.direct,
chatItem: ChatItem(
chatDir: .directRcv,
meta: CIMeta.getSample(1, .now, "group event text", .rcvRead, true, false, false),
meta: CIMeta.getSample(1, .now, "group event text", .rcvRead, itemDeleted: .deleted),
content: .rcvGroupEvent(rcvGroupEvent: .memberAdded(groupMemberId: 1, profile: Profile.sampleData)),
quotedItem: nil,
file: nil
@@ -156,7 +158,7 @@ struct ChatItemView_NonMsgContentDeleted_Previews: PreviewProvider {
chatInfo: ChatInfo.sampleData.direct,
chatItem: ChatItem(
chatDir: .directRcv,
meta: CIMeta.getSample(1, .now, ciFeatureContent.text, .rcvRead, true, false, false),
meta: CIMeta.getSample(1, .now, ciFeatureContent.text, .rcvRead, itemDeleted: .deleted),
content: ciFeatureContent,
quotedItem: nil,
file: nil

View File

@@ -16,6 +16,7 @@ struct ChatView: View {
@EnvironmentObject var chatModel: ChatModel
@Environment(\.colorScheme) var colorScheme
@Environment(\.dismiss) var dismiss
@Environment(\.presentationMode) var presentationMode
@State @ObservedObject var chat: Chat
@State private var showChatInfoSheet: Bool = false
@State private var showAddMembersSheet: Bool = false
@@ -77,7 +78,7 @@ struct ChatView: View {
if chatModel.chatId == nil { dismiss() }
}
.onDisappear {
if chatModel.chatId == cInfo.id {
if chatModel.chatId == cInfo.id && !presentationMode.wrappedValue.isPresented {
chatModel.chatId = nil
DispatchQueue.main.asyncAfter(deadline: .now() + 0.35) {
if chatModel.chatId == nil {
@@ -465,8 +466,8 @@ struct ChatView: View {
private func menu(live: Bool) -> [UIAction] {
var menu: [UIAction] = []
if let mc = ci.content.msgContent, !ci.meta.itemDeleted || revealed {
if !ci.meta.itemDeleted && !ci.isLiveDummy && !live {
if let mc = ci.content.msgContent, ci.meta.itemDeleted == nil || revealed {
if ci.meta.itemDeleted == nil && !ci.isLiveDummy && !live {
menu.append(replyUIAction())
}
menu.append(shareUIAction())
@@ -491,7 +492,7 @@ struct ChatView: View {
if !live || !ci.meta.isLive {
menu.append(deleteUIAction())
}
} else if ci.meta.itemDeleted {
} else if ci.meta.itemDeleted != nil {
menu.append(revealUIAction())
menu.append(deleteUIAction())
} else if ci.isDeletedContent {

View File

@@ -151,8 +151,8 @@ struct ChatPreviewView: View {
}
func chatItemPreview(_ cItem: ChatItem) -> Text {
let itemText = !cItem.meta.itemDeleted ? cItem.text : NSLocalizedString("marked deleted", comment: "marked deleted chat item preview text")
let itemFormattedText = !cItem.meta.itemDeleted ? cItem.formattedText : nil
let itemText = cItem.meta.itemDeleted == nil ? cItem.text : NSLocalizedString("marked deleted", comment: "marked deleted chat item preview text")
let itemFormattedText = cItem.meta.itemDeleted == nil ? cItem.formattedText : nil
return messageText(itemText, itemFormattedText, cItem.memberDisplayName, icon: attachment(), preview: true)
func attachment() -> String? {
@@ -259,7 +259,7 @@ struct ChatPreviewView_Previews: PreviewProvider {
))
ChatPreviewView(chat: Chat(
chatInfo: ChatInfo.sampleData.direct,
chatItems: [ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent, true, false)]
chatItems: [ChatItem.getSample(1, .directSnd, .now, "hello", .sndSent, itemDeleted: .deleted)]
))
ChatPreviewView(chat: Chat(
chatInfo: ChatInfo.sampleData.direct,

View File

@@ -34,6 +34,7 @@ struct UserPicker: View {
ForEach(users) { u in
userView(u)
Divider()
if u.user.activeUser { Divider() }
}
}
.overlay {
@@ -90,7 +91,12 @@ struct UserPicker: View {
private func userView(_ u: UserInfo) -> some View {
let user = u.user
return Button(action: {
if !user.activeUser {
if user.activeUser {
showSettings = true
withAnimation {
userPickerVisible.toggle()
}
} else {
do {
try changeActiveUser_(user.userId)
userPickerVisible = false
@@ -120,7 +126,6 @@ struct UserPicker: View {
.padding(.trailing)
.padding([.leading, .vertical], 12)
})
.disabled(user.activeUser)
.buttonStyle(PressedButtonStyle(defaultColor: fillColor, pressedColor: Color(uiColor: .secondarySystemFill)))
}

View File

@@ -15,6 +15,16 @@ enum LAResult {
case unavailable(authError: String?)
}
func authorize(_ text: String, _ authorized: Binding<Bool>) {
authenticate(reason: text) { laResult in
switch laResult {
case .success: authorized.wrappedValue = true
case .unavailable: authorized.wrappedValue = true
case .failed: authorized.wrappedValue = false
}
}
}
func authenticate(reason: String, completed: @escaping (LAResult) -> Void) {
let laContext = LAContext()
var authAvailabilityError: NSError?

View File

@@ -30,17 +30,42 @@ struct MutableQRCode: View {
struct QRCode: View {
let uri: String
@State private var image: UIImage?
var withLogo: Bool = true
var tintColor = UIColor(red: 0.023, green: 0.176, blue: 0.337, alpha: 1)
@State private var image: UIImage? = nil
@State private var makeScreenshotBinding: () -> Void = {}
var body: some View {
ZStack {
if let image = image {
qrCodeImage(image)
}
GeometryReader { geo in
ZStack {
if withLogo {
let w = geo.size.width
Image("icon-light")
.resizable()
.scaledToFit()
.frame(width: w * 0.16, height: w * 0.16)
.frame(width: w * 0.165, height: w * 0.165)
.background(.white)
.clipShape(Circle())
}
}
.onAppear {
makeScreenshotBinding = {
let size = CGSizeMake(1024 / UIScreen.main.scale, 1024 / UIScreen.main.scale)
showShareSheet(items: [makeScreenshot(geo.frame(in: .local).origin, size)])}
}
.frame(width: geo.size.width, height: geo.size.height)
}
}
.onTapGesture(perform: makeScreenshotBinding)
.onAppear {
image = image ?? generateImage(uri)
image = image ?? generateImage(uri)?.replaceColor(UIColor.black, tintColor)
}
}
}
@@ -63,6 +88,20 @@ private func generateImage(_ uri: String) -> UIImage? {
return nil
}
extension View {
func makeScreenshot(_ origin: CGPoint? = nil, _ targetSize: CGSize? = nil) -> UIImage {
let controller = UIHostingController(rootView: self.edgesIgnoringSafeArea(.all))
let targetSize = targetSize ?? controller.view.intrinsicContentSize
let view = controller.view
view?.bounds = CGRect(origin: origin ?? .zero, size: targetSize)
view?.backgroundColor = .clear
let renderer = UIGraphicsImageRenderer(size: targetSize)
return renderer.image { _ in
view?.drawHierarchy(in: controller.view.bounds, afterScreenUpdates: true)
}
}
}
struct QRCode_Previews: PreviewProvider {
static var previews: some View {
QRCode(uri: "https://simplex.chat/invitation#/?v=1&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FFe5ICmvrm4wkrr6X1LTMii-lhBqLeB76%23MCowBQYDK2VuAyEAdhZZsHpuaAk3Hh1q0uNb_6hGTpuwBIrsp2z9U2T0oC0%3D&e2e=v%3D1%26x3dh%3DMEIwBQYDK2VvAzkAcz6jJk71InuxA0bOX7OUhddfB8Ov7xwQIlIDeXBRZaOntUU4brU5Y3rBzroZBdQJi0FKdtt_D7I%3D%2CMEIwBQYDK2VvAzkA-hDvk1duBi1hlOr08VWSI-Ou4JNNSQjseY69QyKm7Kgg1zZjbpGfyBqSZ2eqys6xtoV4ZtoQUXQ%3D")

View File

@@ -87,6 +87,46 @@ private let versionDescriptions: [VersionDescription] = [
icon: "camera",
title: "GIFs and stickers",
description: "Send them from gallery or custom keyboards."
),
FeatureDescription(
icon: "character",
title: "French interface",
description: "Thanks to the users contribute via Weblate!"
)
]
),
VersionDescription(
version: "v4.5",
features: [
FeatureDescription(
icon: "person.crop.rectangle.stack",
title: "Multiple chat profiles",
description: "Different names, avatars and transport isolation."
),
FeatureDescription(
icon: "rectangle.and.pencil.and.ellipsis",
title: "Message draft",
description: "Preserve the last message draft, with attachments."
),
FeatureDescription(
icon: "network.badge.shield.half.filled",
title: "Transport isolation",
description: "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."
),
FeatureDescription(
icon: "lock.doc",
title: "Private filenames",
description: "To protect timezone, image/voice files use UTC."
),
FeatureDescription(
icon: "battery.25",
title: "Reduced battery usage",
description: "More improvements are coming soon!"
),
FeatureDescription(
icon: "character",
title: "Italian interface",
description: "Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!"
)
]
)
@@ -113,8 +153,7 @@ struct WhatsNewView: View {
var body: some View {
VStack {
TabView(selection: $currentVersion) {
ForEach(0..<3) { i in
let v = versionDescriptions[i]
ForEach(Array(versionDescriptions.enumerated()), id: \.0) { (i, v) in
VStack(alignment: .leading, spacing: 16) {
Text("New in \(v.version)")
.font(.title)
@@ -147,8 +186,9 @@ struct WhatsNewView: View {
private func featureDescription(_ icon: String, _ title: LocalizedStringKey, _ description: LocalizedStringKey) -> some View {
VStack(alignment: .leading) {
HStack(alignment: .center) {
HStack(alignment: .center, spacing: 4) {
Image(systemName: icon).foregroundColor(.secondary)
.frame(minWidth: 30, alignment: .center)
Text(title).font(.title3).bold()
}
Text(description)

View File

@@ -30,15 +30,7 @@ struct TerminalView: View {
}
}
private func runAuth() {
authenticate(reason: NSLocalizedString("Open chat console", comment: "authentication reason")) { laResult in
switch laResult {
case .success: authorized = true
case .unavailable: authorized = true
case .failed: authorized = false
}
}
}
private func runAuth() { authorize(NSLocalizedString("Open chat console", comment: "authentication reason"), $authorized) }
private func terminalView() -> some View {
VStack {

View File

@@ -125,8 +125,8 @@ struct AdvancedNetworkSettings: View {
private func updateNetCfgView(_ cfg: NetCfg) {
netCfg = cfg
enableKeepAlive = currentNetCfg.enableKeepAlive
keepAliveOpts = currentNetCfg.tcpKeepAlive ?? KeepAliveOpts.defaults
enableKeepAlive = netCfg.enableKeepAlive
keepAliveOpts = netCfg.tcpKeepAlive ?? KeepAliveOpts.defaults
}
private func saveNetCfg() {

View File

@@ -13,7 +13,6 @@ struct PrivacySettings: View {
@AppStorage(DEFAULT_PRIVACY_ACCEPT_IMAGES) private var autoAcceptImages = true
@AppStorage(DEFAULT_PRIVACY_LINK_PREVIEWS) private var useLinkPreviews = true
@AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false
@AppStorage(GROUP_DEFAULT_PRIVACY_TRANSFER_IMAGES_INLINE, store: groupDefaults) private var transferImagesInline = true
@State private var simplexLinkMode = privacySimplexLinkModeDefault.get()
@AppStorage(DEFAULT_PRIVACY_PROTECT_SCREEN) private var protectScreen = false
@@ -34,9 +33,6 @@ struct PrivacySettings: View {
privacyAcceptImagesGroupDefault.set($0)
}
}
settingsRow("photo.on.rectangle") {
Toggle("Transfer images faster", isOn: $transferImagesInline)
}
settingsRow("network") {
Toggle("Send link previews", isOn: $useLinkPreviews)
}

View File

@@ -121,7 +121,6 @@ struct SettingsView: View {
NavigationLink {
UserProfilesView()
.navigationTitle("Your chat profiles")
} label: {
settingsRow("person.crop.rectangle.stack") { Text("Your chat profiles") }
}

View File

@@ -12,6 +12,7 @@ struct UserProfilesView: View {
@State private var showDeleteConfirmation = false
@State private var userToDelete: Int?
@State private var alert: UserProfilesAlert?
@State var authorized = !UserDefaults.standard.bool(forKey: DEFAULT_PERFORM_LA)
private enum UserProfilesAlert: Identifiable {
case deleteUser(index: Int, delSMPQueues: Bool)
@@ -28,6 +29,17 @@ struct UserProfilesView: View {
}
var body: some View {
if authorized {
userProfilesView()
} else {
Button(action: runAuth) { Label("Unlock", systemImage: "lock") }
.onAppear(perform: runAuth)
}
}
private func runAuth() { authorize(NSLocalizedString("Open user profiles", comment: "authentication reason"), $authorized) }
private func userProfilesView() -> some View {
List {
Section {
ForEach(m.users) { u in
@@ -52,6 +64,7 @@ struct UserProfilesView: View {
}
}
.toolbar { EditButton() }
.navigationTitle("Your chat profiles")
.confirmationDialog("Delete chat profile?", isPresented: $showDeleteConfirmation, titleVisibility: .visible) {
deleteModeButton("Profile and server connections", true)
deleteModeButton("Local profile data only", false)

File diff suppressed because it is too large Load Diff

View File

@@ -309,11 +309,14 @@
</trans-unit>
<trans-unit id="A separate TCP connection will be used **for each chat profile you have in the app**." xml:space="preserve">
<source>A separate TCP connection will be used **for each chat profile you have in the app**.</source>
<target>**Für jedes von Ihnen in der App genutzte Chat-Profil** wird eine separate TCP-Verbindung genutzt.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="A separate TCP connection will be used **for each contact and group member**.&#10;**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." xml:space="preserve">
<source>A separate TCP connection will be used **for each contact and group member**.
**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail.</source>
<target>**Für jeden Kontakt und jedes Gruppenmitglied** wird eine separate TCP-Verbindung genutzt.
**Bitte beachten Sie**: Wenn Sie viele Verbindungen haben, kann der Batterieverbrauch und die Datennutzung wesentlich höher sein und einige Verbindungen können scheitern.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
@@ -364,6 +367,7 @@
</trans-unit>
<trans-unit id="Add profile" xml:space="preserve">
<source>Add profile</source>
<target>Profil hinzufügen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add servers by scanning QR codes." xml:space="preserve">
@@ -393,6 +397,7 @@
</trans-unit>
<trans-unit id="All chats and messages will be deleted - this cannot be undone!" xml:space="preserve">
<source>All chats and messages will be deleted - this cannot be undone!</source>
<target>Alle Chats und Nachrichten werden gelöscht! Dies kann nicht rückgängig gemacht werden!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All group members will remain connected." xml:space="preserve">
@@ -482,6 +487,7 @@
</trans-unit>
<trans-unit id="App build: %@" xml:space="preserve">
<source>App build: %@</source>
<target>App Build: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App icon" xml:space="preserve">
@@ -491,10 +497,12 @@
</trans-unit>
<trans-unit id="App version" xml:space="preserve">
<source>App version</source>
<target>App Version</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App version: v%@" xml:space="preserve">
<source>App version: v%@</source>
<target>App Version: v%@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Appearance" xml:space="preserve">
@@ -557,6 +565,11 @@
<target>Sowohl Ihr Kontakt, als auch Sie können Sprachnachrichten senden.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
<target>Per Chat-Profil (Voreinstellung) oder [per Verbindung](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Call already ended!" xml:space="preserve">
<source>Call already ended!</source>
<target>Anruf ist bereits beendet!</target>
@@ -859,10 +872,12 @@
</trans-unit>
<trans-unit id="Core built at: %@" xml:space="preserve">
<source>Core built at: %@</source>
<target>Core übersetzt am: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Core version: v%@" xml:space="preserve">
<source>Core version: v%@</source>
<target>Core Version: v%@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create" xml:space="preserve">
@@ -925,11 +940,6 @@
<target>Dunkel</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Data" xml:space="preserve">
<source>Data</source>
<target>Daten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database ID" xml:space="preserve">
<source>Database ID</source>
<target>Datenbank-ID</target>
@@ -1040,6 +1050,7 @@
</trans-unit>
<trans-unit id="Delete all files" xml:space="preserve">
<source>Delete all files</source>
<target>Alle Dateien löschen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete archive" xml:space="preserve">
@@ -1077,11 +1088,6 @@
<target>Datenbank löschen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete files &amp; media" xml:space="preserve">
<source>Delete files &amp; media</source>
<target>Dateien &amp; Medien löschen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete files and media?" xml:space="preserve">
<source>Delete files and media?</source>
<target>Dateien und Medien löschen?</target>
@@ -1089,6 +1095,7 @@
</trans-unit>
<trans-unit id="Delete files for all chat profiles" xml:space="preserve">
<source>Delete files for all chat profiles</source>
<target>Dateien für alle Chat-Profile löschen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete for everyone" xml:space="preserve">
@@ -1168,6 +1175,7 @@
</trans-unit>
<trans-unit id="Delete user profile?" xml:space="preserve">
<source>Delete user profile?</source>
<target>Benutzerprofil löschen?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Description" xml:space="preserve">
@@ -1200,6 +1208,11 @@
<target>Die Geräteauthentifizierung ist deaktiviert. Sie können die SimpleX Sperre über die Einstellungen aktivieren, sobald Sie die Geräteauthentifizierung aktiviert haben.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Different names, avatars and transport isolation." xml:space="preserve">
<source>Different names, avatars and transport isolation.</source>
<target>Unterschiedliche Namen, Avatare und Transport-Isolation.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Direct messages" xml:space="preserve">
<source>Direct messages</source>
<target>Direkte Nachrichten</target>
@@ -1255,6 +1268,11 @@
<target>Später wiederholen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Doppelter Anzeigename!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Edit" xml:space="preserve">
<source>Edit</source>
<target>Bearbeiten</target>
@@ -1405,6 +1423,11 @@
<target>Fehler beim Erzeugen des Gruppen-Links</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error creating profile!" xml:space="preserve">
<source>Error creating profile!</source>
<target>Fehler beim Erstellen des Profils!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error deleting chat database" xml:space="preserve">
<source>Error deleting chat database</source>
<target>Fehler beim Löschen der Chat-Datenbank</target>
@@ -1442,6 +1465,7 @@
</trans-unit>
<trans-unit id="Error deleting user profile" xml:space="preserve">
<source>Error deleting user profile</source>
<target>Fehler beim Löschen des Benutzerprofils</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling notifications" xml:space="preserve">
@@ -1514,6 +1538,11 @@
<target>Fehler beim Beenden des Chats</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error switching profile!" xml:space="preserve">
<source>Error switching profile!</source>
<target>Fehler beim Umschalten des Profils!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating message" xml:space="preserve">
<source>Error updating message</source>
<target>Fehler beim Aktualisieren der Nachricht</target>
@@ -1581,6 +1610,7 @@
</trans-unit>
<trans-unit id="Files &amp; media" xml:space="preserve">
<source>Files &amp; media</source>
<target>Dateien &amp; Medien</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="For console" xml:space="preserve">
@@ -1588,6 +1618,11 @@
<target>Für Konsole</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="French interface" xml:space="preserve">
<source>French interface</source>
<target>Französische Bedienoberfläche</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Full link" xml:space="preserve">
<source>Full link</source>
<target>Vollständiger Link</target>
@@ -1935,6 +1970,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Es sieht so aus, dass Sie bereits über diesen Link verbunden sind. Wenn das nicht der Fall, gab es einen Fehler (%@).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Italian interface" xml:space="preserve">
<source>Italian interface</source>
<target>Italienische Bedienoberfläche</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Beitreten</target>
@@ -2012,6 +2052,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
</trans-unit>
<trans-unit id="Local profile data only" xml:space="preserve">
<source>Local profile data only</source>
<target>Nur lokale Profildaten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make a private connection" xml:space="preserve">
@@ -2084,6 +2125,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Fehler bei der Nachrichtenzustellung</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message draft" xml:space="preserve">
<source>Message draft</source>
<target>Nachrichtenentwurf</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message text" xml:space="preserve">
<source>Message text</source>
<target>Nachrichtentext</target>
@@ -2114,11 +2160,21 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Die Migration wurde abgeschlossen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="More improvements are coming soon!" xml:space="preserve">
<source>More improvements are coming soon!</source>
<target>Weitere Verbesserungen sind bald verfügbar!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Most likely this contact has deleted the connection with you." xml:space="preserve">
<source>Most likely this contact has deleted the connection with you.</source>
<target>Dieser Kontakt hat sehr wahrscheinlich die Verbindung mit Ihnen gelöscht.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Multiple chat profiles" xml:space="preserve">
<source>Multiple chat profiles</source>
<target>Mehrere Chat-Profile</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Stummschalten</target>
@@ -2336,6 +2392,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
</trans-unit>
<trans-unit id="PING count" xml:space="preserve">
<source>PING count</source>
<target>PING Zähler</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="PING interval" xml:space="preserve">
@@ -2423,6 +2480,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Der Fingerabdruck des Zertifikats in der Serveradresse ist wahrscheinlich ungültig</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Den letzten Nachrichtenentwurf, auch mit seinen Anhängen, aufbewahren.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preset server" xml:space="preserve">
<source>Preset server</source>
<target>Voreingestellter Server</target>
@@ -2443,8 +2505,14 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Datenschutz neu definiert</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Private filenames" xml:space="preserve">
<source>Private filenames</source>
<target>Neutrale Dateinamen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile and server connections" xml:space="preserve">
<source>Profile and server connections</source>
<target>Profil und Serververbindungen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile image" xml:space="preserve">
@@ -2522,6 +2590,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Die Empfänger sehen Nachrichtenaktualisierungen, während Sie sie eingeben.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reduced battery usage" xml:space="preserve">
<source>Reduced battery usage</source>
<target>Reduzierter Batterieverbrauch</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Ablehnen</target>
@@ -3062,6 +3135,16 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Vielen Dank, dass Sie SimpleX Chat installiert haben!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" xml:space="preserve">
<source>Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!</source>
<target>Dank der Nutzer - [Tragen Sie per Weblate bei](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Thanks to the users contribute via Weblate!" xml:space="preserve">
<source>Thanks to the users contribute via Weblate!</source>
<target>Dank der Nutzer - Tragen Sie per Weblate bei!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The 1st platform without any user identifiers private by design." xml:space="preserve">
<source>The 1st platform without any user identifiers private by design.</source>
<target>Die erste Plattform ohne Benutzerkennungen Privat per Design.</target>
@@ -3124,6 +3207,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
</trans-unit>
<trans-unit id="The servers for new connections of your current chat profile **%@**." xml:space="preserve">
<source>The servers for new connections of your current chat profile **%@**.</source>
<target>Server der neuen Verbindungen von Ihrem aktuellen Chat-Profil **%@**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Theme" xml:space="preserve">
@@ -3158,6 +3242,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
</trans-unit>
<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>
<target>Diese Einstellung gilt für Nachrichten in Ihrem aktuellen Chat-Profil **%@**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To ask any questions and to receive updates:" xml:space="preserve">
@@ -3185,6 +3270,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
<target>Zum Schutz Ihrer Privatsphäre verwendet SimpleX an Stelle von Benutzerkennungen, die von allen anderen Plattformen verwendet werden, Kennungen für Nachrichtenwarteschlangen, die für jeden Ihrer Kontakte individuell sind.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect timezone, image/voice files use UTC." xml:space="preserve">
<source>To protect timezone, image/voice files use UTC.</source>
<target>Bild- und Sprachdateinamen enthalten UTC, um Informationen zur Zeitzone zu schützen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect your information, turn on SimpleX Lock.&#10;You will be prompted to complete authentication before this feature is enabled." xml:space="preserve">
<source>To protect your information, turn on SimpleX Lock.
You will be prompted to complete authentication before this feature is enabled.</source>
@@ -3207,13 +3297,9 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt
<target>Um die Ende-zu-Ende-Verschlüsselung mit Ihrem Kontakt zu überprüfen, müssen Sie den Sicherheitscode in Ihren Apps vergleichen oder scannen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Transfer images faster" xml:space="preserve">
<source>Transfer images faster</source>
<target>Bilder schneller übertragen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Transport isolation" xml:space="preserve">
<source>Transport isolation</source>
<target>Transport-Isolation</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Trying to connect to the server used to receive messages from this contact (error: %@)." xml:space="preserve">
@@ -3310,6 +3396,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
</trans-unit>
<trans-unit id="Update transport isolation mode?" xml:space="preserve">
<source>Update transport isolation mode?</source>
<target>Transport-Isolations-Modus aktualisieren?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Updating settings will re-connect the client to all servers." xml:space="preserve">
@@ -3349,6 +3436,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Benutzerprofil</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Using .onion hosts requires compatible VPN provider." xml:space="preserve">
@@ -3481,6 +3569,11 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Sie erlauben</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You already have a chat profile with the same display name. Please choose another name." xml:space="preserve">
<source>You already have a chat profile with the same display name. Please choose another name.</source>
<target>Sie haben schon ein Chat-Profil mit dem gleichen Anzeigenamen. Bitte wählen Sie einen anderen Namen aus.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already connected to %@." xml:space="preserve">
<source>You are already connected to %@.</source>
<target>Sie sind bereits mit %@ verbunden.</target>
@@ -3656,11 +3749,6 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Ihre Chat-Datenbank ist nicht verschlüsselt. Bitte legen Sie ein Passwort fest, um sie zu schützen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profile" xml:space="preserve">
<source>Your chat profile</source>
<target>Mein Chat-Profil</target>
<note>No comment provided by engineer.</note>
</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>Ihr Chat-Profil wird an Gruppenmitglieder gesendet</target>
@@ -3673,10 +3761,12 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
</trans-unit>
<trans-unit id="Your chat profiles" xml:space="preserve">
<source>Your chat profiles</source>
<target>Meine Chat-Profile</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profiles are stored locally, only on your device." xml:space="preserve">
<source>Your chat profiles are stored locally, only on your device.</source>
<target>Ihre Chat-Profile werden nur lokal auf Ihrem Endgerät gespeichert.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
@@ -3718,6 +3808,7 @@ Sie können diese Verbindung abbrechen und den Kontakt entfernen (und es später
</trans-unit>
<trans-unit id="Your current profile" xml:space="preserve">
<source>Your current profile</source>
<target>Mein aktuelles Chat-Profil</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your preferences" xml:space="preserve">

View File

@@ -565,6 +565,11 @@
<target>Both you and your contact can send voice messages.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
<target>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Call already ended!" xml:space="preserve">
<source>Call already ended!</source>
<target>Call already ended!</target>
@@ -935,11 +940,6 @@
<target>Dark</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Data" xml:space="preserve">
<source>Data</source>
<target>Data</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database ID" xml:space="preserve">
<source>Database ID</source>
<target>Database ID</target>
@@ -1088,11 +1088,6 @@
<target>Delete database</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete files &amp; media" xml:space="preserve">
<source>Delete files &amp; media</source>
<target>Delete files &amp; media</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete files and media?" xml:space="preserve">
<source>Delete files and media?</source>
<target>Delete files and media?</target>
@@ -1213,6 +1208,11 @@
<target>Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Different names, avatars and transport isolation." xml:space="preserve">
<source>Different names, avatars and transport isolation.</source>
<target>Different names, avatars and transport isolation.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Direct messages" xml:space="preserve">
<source>Direct messages</source>
<target>Direct messages</target>
@@ -1268,6 +1268,11 @@
<target>Do it later</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Duplicate display name!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Edit" xml:space="preserve">
<source>Edit</source>
<target>Edit</target>
@@ -1418,6 +1423,11 @@
<target>Error creating group link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error creating profile!" xml:space="preserve">
<source>Error creating profile!</source>
<target>Error creating profile!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error deleting chat database" xml:space="preserve">
<source>Error deleting chat database</source>
<target>Error deleting chat database</target>
@@ -1528,6 +1538,11 @@
<target>Error stopping chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error switching profile!" xml:space="preserve">
<source>Error switching profile!</source>
<target>Error switching profile!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating message" xml:space="preserve">
<source>Error updating message</source>
<target>Error updating message</target>
@@ -1603,6 +1618,11 @@
<target>For console</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="French interface" xml:space="preserve">
<source>French interface</source>
<target>French interface</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Full link" xml:space="preserve">
<source>Full link</source>
<target>Full link</target>
@@ -1950,6 +1970,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>It seems like you are already connected via this link. If it is not the case, there was an error (%@).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Italian interface" xml:space="preserve">
<source>Italian interface</source>
<target>Italian interface</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Join</target>
@@ -2100,6 +2125,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Message delivery error</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message draft" xml:space="preserve">
<source>Message draft</source>
<target>Message draft</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message text" xml:space="preserve">
<source>Message text</source>
<target>Message text</target>
@@ -2130,11 +2160,21 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Migration is completed</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="More improvements are coming soon!" xml:space="preserve">
<source>More improvements are coming soon!</source>
<target>More improvements are coming soon!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Most likely this contact has deleted the connection with you." xml:space="preserve">
<source>Most likely this contact has deleted the connection with you.</source>
<target>Most likely this contact has deleted the connection with you.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Multiple chat profiles" xml:space="preserve">
<source>Multiple chat profiles</source>
<target>Multiple chat profiles</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Mute</target>
@@ -2440,6 +2480,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Possibly, certificate fingerprint in server address is incorrect</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Preserve the last message draft, with attachments.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preset server" xml:space="preserve">
<source>Preset server</source>
<target>Preset server</target>
@@ -2460,6 +2505,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Privacy redefined</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Private filenames" xml:space="preserve">
<source>Private filenames</source>
<target>Private filenames</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile and server connections" xml:space="preserve">
<source>Profile and server connections</source>
<target>Profile and server connections</target>
@@ -2540,6 +2590,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Recipients see updates as you type them.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reduced battery usage" xml:space="preserve">
<source>Reduced battery usage</source>
<target>Reduced battery usage</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Reject</target>
@@ -3080,6 +3135,16 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>Thank you for installing SimpleX Chat!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" xml:space="preserve">
<source>Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!</source>
<target>Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Thanks to the users contribute via Weblate!" xml:space="preserve">
<source>Thanks to the users contribute via Weblate!</source>
<target>Thanks to the users contribute via Weblate!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The 1st platform without any user identifiers private by design." xml:space="preserve">
<source>The 1st platform without any user identifiers private by design.</source>
<target>The 1st platform without any user identifiers private by design.</target>
@@ -3205,6 +3270,11 @@ We will be adding server redundancy to prevent lost messages.</target>
<target>To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect timezone, image/voice files use UTC." xml:space="preserve">
<source>To protect timezone, image/voice files use UTC.</source>
<target>To protect timezone, image/voice files use UTC.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect your information, turn on SimpleX Lock.&#10;You will be prompted to complete authentication before this feature is enabled." xml:space="preserve">
<source>To protect your information, turn on SimpleX Lock.
You will be prompted to complete authentication before this feature is enabled.</source>
@@ -3227,11 +3297,6 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>To verify end-to-end encryption with your contact compare (or scan) the code on your devices.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Transfer images faster" xml:space="preserve">
<source>Transfer images faster</source>
<target>Transfer images faster</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Transport isolation" xml:space="preserve">
<source>Transport isolation</source>
<target>Transport isolation</target>
@@ -3504,6 +3569,11 @@ To connect, please ask your contact to create another connection link and check
<target>You allow</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You already have a chat profile with the same display name. Please choose another name." xml:space="preserve">
<source>You already have a chat profile with the same display name. Please choose another name.</source>
<target>You already have a chat profile with the same display name. Please choose another name.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already connected to %@." xml:space="preserve">
<source>You are already connected to %@.</source>
<target>You are already connected to %@.</target>
@@ -3679,11 +3749,6 @@ To connect, please ask your contact to create another connection link and check
<target>Your chat database is not encrypted - set passphrase to encrypt it.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profile" xml:space="preserve">
<source>Your chat profile</source>
<target>Your chat profile</target>
<note>No comment provided by engineer.</note>
</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>Your chat profile will be sent to group members</target>

File diff suppressed because it is too large Load Diff

View File

@@ -309,11 +309,14 @@
</trans-unit>
<trans-unit id="A separate TCP connection will be used **for each chat profile you have in the app**." xml:space="preserve">
<source>A separate TCP connection will be used **for each chat profile you have in the app**.</source>
<target>Une connexion TCP distincte sera utilisée **pour chaque profil de chat que vous avez dans l'application**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="A separate TCP connection will be used **for each contact and group member**.&#10;**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." xml:space="preserve">
<source>A separate TCP connection will be used **for each contact and group member**.
**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail.</source>
<target>Une connexion TCP distincte sera utilisée **pour chaque contact et membre de groupe**.
**Veuillez noter** : si vous avez de nombreuses connexions, votre consommation de batterie et de réseau peut être nettement plus élevée et certaines liaisons peuvent échouer.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
@@ -364,6 +367,7 @@
</trans-unit>
<trans-unit id="Add profile" xml:space="preserve">
<source>Add profile</source>
<target>Ajouter un profil</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add servers by scanning QR codes." xml:space="preserve">
@@ -393,6 +397,7 @@
</trans-unit>
<trans-unit id="All chats and messages will be deleted - this cannot be undone!" xml:space="preserve">
<source>All chats and messages will be deleted - this cannot be undone!</source>
<target>Toutes les discussions et tous les messages seront supprimés - il est impossible de revenir en arrière !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All group members will remain connected." xml:space="preserve">
@@ -560,6 +565,11 @@
<target>Vous et votre contact êtes tous deux en mesure d'envoyer des messages vocaux.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
<target>Par profil de chat (par défaut) ou [par connexion](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Call already ended!" xml:space="preserve">
<source>Call already ended!</source>
<target>Appel déjà terminé !</target>
@@ -930,11 +940,6 @@
<target>Sombre</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Data" xml:space="preserve">
<source>Data</source>
<target>Données</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database ID" xml:space="preserve">
<source>Database ID</source>
<target>ID de base de données</target>
@@ -1045,6 +1050,7 @@
</trans-unit>
<trans-unit id="Delete all files" xml:space="preserve">
<source>Delete all files</source>
<target>Effacer tous les fichiers</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete archive" xml:space="preserve">
@@ -1082,11 +1088,6 @@
<target>Supprimer la base de données</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete files &amp; media" xml:space="preserve">
<source>Delete files &amp; media</source>
<target>Supprimer les fichiers et médias</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete files and media?" xml:space="preserve">
<source>Delete files and media?</source>
<target>Supprimer les fichiers et médias ?</target>
@@ -1094,6 +1095,7 @@
</trans-unit>
<trans-unit id="Delete files for all chat profiles" xml:space="preserve">
<source>Delete files for all chat profiles</source>
<target>Effacer les fichiers de tous les profils de chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete for everyone" xml:space="preserve">
@@ -1173,6 +1175,7 @@
</trans-unit>
<trans-unit id="Delete user profile?" xml:space="preserve">
<source>Delete user profile?</source>
<target>Supprimer le profil utilisateur ?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Description" xml:space="preserve">
@@ -1205,6 +1208,11 @@
<target>L'authentification de l'appareil n'est pas activée. Vous pouvez activer SimpleX Lock via Paramètres, une fois que vous avez activé l'authentification de l'appareil.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Different names, avatars and transport isolation." xml:space="preserve">
<source>Different names, avatars and transport isolation.</source>
<target>Différents noms, avatars et mode d'isolation de transport.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Direct messages" xml:space="preserve">
<source>Direct messages</source>
<target>Messages directs</target>
@@ -1260,6 +1268,11 @@
<target>Faites-le plus tard</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Nom d'affichage en double !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Edit" xml:space="preserve">
<source>Edit</source>
<target>Modifier</target>
@@ -1410,6 +1423,11 @@
<target>Erreur lors de la création du lien du groupe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error creating profile!" xml:space="preserve">
<source>Error creating profile!</source>
<target>Erreur lors de la création du profil !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error deleting chat database" xml:space="preserve">
<source>Error deleting chat database</source>
<target>Erreur lors de la suppression de la base de données du chat</target>
@@ -1447,6 +1465,7 @@
</trans-unit>
<trans-unit id="Error deleting user profile" xml:space="preserve">
<source>Error deleting user profile</source>
<target>Erreur lors de la suppression du profil utilisateur</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling notifications" xml:space="preserve">
@@ -1519,6 +1538,11 @@
<target>Erreur lors de l'arrêt du chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error switching profile!" xml:space="preserve">
<source>Error switching profile!</source>
<target>Erreur lors du changement de profil !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating message" xml:space="preserve">
<source>Error updating message</source>
<target>Erreur lors de la mise à jour du message</target>
@@ -1586,6 +1610,7 @@
</trans-unit>
<trans-unit id="Files &amp; media" xml:space="preserve">
<source>Files &amp; media</source>
<target>Fichiers &amp; médias</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="For console" xml:space="preserve">
@@ -1593,6 +1618,11 @@
<target>Pour la console</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="French interface" xml:space="preserve">
<source>French interface</source>
<target>Interface en français</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Full link" xml:space="preserve">
<source>Full link</source>
<target>Lien entier</target>
@@ -1940,6 +1970,11 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Il semblerait que vous êtes déjà connecté via ce lien. Si ce n'est pas le cas, il y a eu une erreur (%@).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Italian interface" xml:space="preserve">
<source>Italian interface</source>
<target>Interface en italien</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Rejoindre</target>
@@ -2017,6 +2052,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
</trans-unit>
<trans-unit id="Local profile data only" xml:space="preserve">
<source>Local profile data only</source>
<target>Données de profil local uniquement</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make a private connection" xml:space="preserve">
@@ -2089,6 +2125,11 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Erreur de distribution du message</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message draft" xml:space="preserve">
<source>Message draft</source>
<target>Brouillon de message</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message text" xml:space="preserve">
<source>Message text</source>
<target>Texte du message</target>
@@ -2119,11 +2160,21 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>La migration est terminée</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="More improvements are coming soon!" xml:space="preserve">
<source>More improvements are coming soon!</source>
<target>Plus d'améliorations à venir !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Most likely this contact has deleted the connection with you." xml:space="preserve">
<source>Most likely this contact has deleted the connection with you.</source>
<target>Il est fort probable que ce contact ait supprimé la connexion avec vous.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Multiple chat profiles" xml:space="preserve">
<source>Multiple chat profiles</source>
<target>Différents profils de chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Muet</target>
@@ -2429,6 +2480,11 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Il est possible que l'empreinte du certificat dans l'adresse du serveur soit incorrecte</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Conserver le brouillon du dernier message, avec les pièces jointes.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preset server" xml:space="preserve">
<source>Preset server</source>
<target>Serveur prédéfini</target>
@@ -2449,8 +2505,14 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>La vie privée redéfinie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Private filenames" xml:space="preserve">
<source>Private filenames</source>
<target>Noms de fichiers privés</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile and server connections" xml:space="preserve">
<source>Profile and server connections</source>
<target>Profil et connexions au serveur</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile image" xml:space="preserve">
@@ -2528,6 +2590,11 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Les destinataires voient les mises à jour au fur et à mesure que vous les tapez.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reduced battery usage" xml:space="preserve">
<source>Reduced battery usage</source>
<target>Réduction de la consommation de batterie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Rejeter</target>
@@ -3040,7 +3107,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
</trans-unit>
<trans-unit id="Tap to start a new chat" xml:space="preserve">
<source>Tap to start a new chat</source>
<target>Appuyez pour commencer un nouveau chat</target>
<target>Appuyez ici pour démarrer une nouvelle discussion</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Test failed at step %@." xml:space="preserve">
@@ -3068,6 +3135,16 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Merci d'avoir installé SimpleX Chat!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" xml:space="preserve">
<source>Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!</source>
<target>Merci aux utilisateurs - [contribuer via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps) !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Thanks to the users contribute via Weblate!" xml:space="preserve">
<source>Thanks to the users contribute via Weblate!</source>
<target>Merci aux utilisateurs - contribuez via Weblate !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The 1st platform without any user identifiers private by design." xml:space="preserve">
<source>The 1st platform without any user identifiers private by design.</source>
<target>La 1ère plateforme sans aucun identifiant d'utilisateur privée par design.</target>
@@ -3130,6 +3207,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
</trans-unit>
<trans-unit id="The servers for new connections of your current chat profile **%@**." xml:space="preserve">
<source>The servers for new connections of your current chat profile **%@**.</source>
<target>Les serveurs pour les nouvelles connexions de votre profil de chat actuel **%@**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Theme" xml:space="preserve">
@@ -3164,6 +3242,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
</trans-unit>
<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>
<target>Ce paramètre s'applique aux messages de votre profil de chat actuel **%@**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To ask any questions and to receive updates:" xml:space="preserve">
@@ -3191,6 +3270,11 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message
<target>Pour protéger votre vie privée, au lieu dIDs utilisés par toutes les autres plateformes, SimpleX a des IDs pour les queues de messages, distinctes pour chacun de vos contacts.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect timezone, image/voice files use UTC." xml:space="preserve">
<source>To protect timezone, image/voice files use UTC.</source>
<target>Pour préserver le fuseau horaire, les fichiers image/voix utilisent le système UTC.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect your information, turn on SimpleX Lock.&#10;You will be prompted to complete authentication before this feature is enabled." xml:space="preserve">
<source>To protect your information, turn on SimpleX Lock.
You will be prompted to complete authentication before this feature is enabled.</source>
@@ -3213,13 +3297,9 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s
<target>Pour vérifier le chiffrement de bout en bout avec votre contact, comparez (ou scannez) le code sur vos appareils.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Transfer images faster" xml:space="preserve">
<source>Transfer images faster</source>
<target>Transfert d'images plus rapide</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Transport isolation" xml:space="preserve">
<source>Transport isolation</source>
<target>Isolement du transport</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Trying to connect to the server used to receive messages from this contact (error: %@)." xml:space="preserve">
@@ -3316,6 +3396,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
</trans-unit>
<trans-unit id="Update transport isolation mode?" xml:space="preserve">
<source>Update transport isolation mode?</source>
<target>Mettre à jour le mode d'isolation du transport ?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Updating settings will re-connect the client to all servers." xml:space="preserve">
@@ -3355,6 +3436,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Profil d'utilisateur</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Using .onion hosts requires compatible VPN provider." xml:space="preserve">
@@ -3487,6 +3569,11 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Vous autorisez</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You already have a chat profile with the same display name. Please choose another name." xml:space="preserve">
<source>You already have a chat profile with the same display name. Please choose another name.</source>
<target>Vous avez déjà un profil de chat avec ce même nom affiché. Veuillez choisir un autre nom.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already connected to %@." xml:space="preserve">
<source>You are already connected to %@.</source>
<target>Vous êtes déjà connecté·e à %@ via ce lien.</target>
@@ -3662,11 +3749,6 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Votre base de données de chat n'est pas chiffrée - définisez une phrase secrète.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profile" xml:space="preserve">
<source>Your chat profile</source>
<target>Votre profil de chat</target>
<note>No comment provided by engineer.</note>
</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>Votre profil de chat sera envoyé aux membres du groupe</target>
@@ -3679,10 +3761,12 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
</trans-unit>
<trans-unit id="Your chat profiles" xml:space="preserve">
<source>Your chat profiles</source>
<target>Vos profils de chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profiles are stored locally, only on your device." xml:space="preserve">
<source>Your chat profiles are stored locally, only on your device.</source>
<target>Vos profils de chat sont stockés localement, uniquement sur votre appareil.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
@@ -3724,6 +3808,7 @@ Vous pouvez annuler la connexion et supprimer le contact (et réessayer plus tar
</trans-unit>
<trans-unit id="Your current profile" xml:space="preserve">
<source>Your current profile</source>
<target>Votre profil actuel</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your preferences" xml:space="preserve">
@@ -4186,7 +4271,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
</trans-unit>
<trans-unit id="or chat with the developers" xml:space="preserve">
<source>or chat with the developers</source>
<target>ou chattez avec les développeurs</target>
<target>ou ici pour discuter avec les développeurs</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="owner" xml:space="preserve">

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -309,11 +309,14 @@
</trans-unit>
<trans-unit id="A separate TCP connection will be used **for each chat profile you have in the app**." xml:space="preserve">
<source>A separate TCP connection will be used **for each chat profile you have in the app**.</source>
<target>Verrà usata una connessione TCP separata **per ogni profilo di chat presente nell'app**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="A separate TCP connection will be used **for each contact and group member**.&#10;**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." xml:space="preserve">
<source>A separate TCP connection will be used **for each contact and group member**.
**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail.</source>
<target>Verrà usata una connessione TCP separata **per ogni contatto e membro del gruppo**.
** Nota**: se hai molte connessioni, il consumo di batteria e traffico può essere notevolmente superiore e alcune connessioni potrebbero fallire.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
@@ -364,6 +367,7 @@
</trans-unit>
<trans-unit id="Add profile" xml:space="preserve">
<source>Add profile</source>
<target>Aggiungi profilo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add servers by scanning QR codes." xml:space="preserve">
@@ -393,6 +397,7 @@
</trans-unit>
<trans-unit id="All chats and messages will be deleted - this cannot be undone!" xml:space="preserve">
<source>All chats and messages will be deleted - this cannot be undone!</source>
<target>Tutte le chat e i messaggi verranno eliminati. Non è reversibile!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All group members will remain connected." xml:space="preserve">
@@ -560,6 +565,11 @@
<target>Sia tu che il tuo contatto potete inviare messaggi vocali.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
<target>Per profilo di chat (predefinito) o [per connessione](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Call already ended!" xml:space="preserve">
<source>Call already ended!</source>
<target>Chiamata già terminata!</target>
@@ -687,7 +697,7 @@
</trans-unit>
<trans-unit id="Clear" xml:space="preserve">
<source>Clear</source>
<target>Annulla</target>
<target>Svuota</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Clear conversation" xml:space="preserve">
@@ -930,11 +940,6 @@
<target>Scuro</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Data" xml:space="preserve">
<source>Data</source>
<target>Dati</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database ID" xml:space="preserve">
<source>Database ID</source>
<target>ID database</target>
@@ -1045,6 +1050,7 @@
</trans-unit>
<trans-unit id="Delete all files" xml:space="preserve">
<source>Delete all files</source>
<target>Elimina tutti i file</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete archive" xml:space="preserve">
@@ -1082,11 +1088,6 @@
<target>Elimina database</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete files &amp; media" xml:space="preserve">
<source>Delete files &amp; media</source>
<target>Elimina file e multimediali</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete files and media?" xml:space="preserve">
<source>Delete files and media?</source>
<target>Eliminare i file e i multimediali?</target>
@@ -1094,6 +1095,7 @@
</trans-unit>
<trans-unit id="Delete files for all chat profiles" xml:space="preserve">
<source>Delete files for all chat profiles</source>
<target>Elimina i file per tutti i profili di chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete for everyone" xml:space="preserve">
@@ -1173,6 +1175,7 @@
</trans-unit>
<trans-unit id="Delete user profile?" xml:space="preserve">
<source>Delete user profile?</source>
<target>Eliminare il profilo utente?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Description" xml:space="preserve">
@@ -1205,6 +1208,11 @@
<target>L'autenticazione del dispositivo non è abilitata. Puoi attivare SimpleX Lock tramite le impostazioni, dopo aver abilitato l'autenticazione del dispositivo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Different names, avatars and transport isolation." xml:space="preserve">
<source>Different names, avatars and transport isolation.</source>
<target>Nomi e avatar diversi, isolamento del trasporto.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Direct messages" xml:space="preserve">
<source>Direct messages</source>
<target>Messaggi diretti</target>
@@ -1260,6 +1268,11 @@
<target>Fallo dopo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Nome da mostrare doppio!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Edit" xml:space="preserve">
<source>Edit</source>
<target>Modifica</target>
@@ -1410,6 +1423,11 @@
<target>Errore nella creazione del link del gruppo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error creating profile!" xml:space="preserve">
<source>Error creating profile!</source>
<target>Errore nella creazione del profilo!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error deleting chat database" xml:space="preserve">
<source>Error deleting chat database</source>
<target>Errore nell'eliminazione del database della chat</target>
@@ -1447,6 +1465,7 @@
</trans-unit>
<trans-unit id="Error deleting user profile" xml:space="preserve">
<source>Error deleting user profile</source>
<target>Errore nell'eliminazione del profilo utente</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling notifications" xml:space="preserve">
@@ -1519,6 +1538,11 @@
<target>Errore nell'interruzione della chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error switching profile!" xml:space="preserve">
<source>Error switching profile!</source>
<target>Errore nel cambio di profilo!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating message" xml:space="preserve">
<source>Error updating message</source>
<target>Errore nell'aggiornamento del messaggio</target>
@@ -1586,6 +1610,7 @@
</trans-unit>
<trans-unit id="Files &amp; media" xml:space="preserve">
<source>Files &amp; media</source>
<target>File e multimediali</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="For console" xml:space="preserve">
@@ -1593,6 +1618,11 @@
<target>Per console</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="French interface" xml:space="preserve">
<source>French interface</source>
<target>Interfaccia francese</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Full link" xml:space="preserve">
<source>Full link</source>
<target>Link completo</target>
@@ -1940,6 +1970,11 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Sembra che tu sia già connesso tramite questo link. In caso contrario, c'è stato un errore (%@).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Italian interface" xml:space="preserve">
<source>Italian interface</source>
<target>Interfaccia italiana</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Entra</target>
@@ -2017,6 +2052,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
</trans-unit>
<trans-unit id="Local profile data only" xml:space="preserve">
<source>Local profile data only</source>
<target>Solo dati del profilo locale</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make a private connection" xml:space="preserve">
@@ -2089,6 +2125,11 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Errore di recapito del messaggio</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message draft" xml:space="preserve">
<source>Message draft</source>
<target>Bozza dei messaggi</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message text" xml:space="preserve">
<source>Message text</source>
<target>Testo del messaggio</target>
@@ -2119,11 +2160,21 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>La migrazione è completata</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="More improvements are coming soon!" xml:space="preserve">
<source>More improvements are coming soon!</source>
<target>Altri miglioramenti sono in arrivo!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Most likely this contact has deleted the connection with you." xml:space="preserve">
<source>Most likely this contact has deleted the connection with you.</source>
<target>Probabilmente questo contatto ha eliminato la connessione con te.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Multiple chat profiles" xml:space="preserve">
<source>Multiple chat profiles</source>
<target>Profili di chat multipli</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Silenzia</target>
@@ -2429,6 +2480,11 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Probabilmente l'impronta del certificato nell'indirizzo del server è sbagliata</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Conserva la bozza dell'ultimo messaggio, con gli allegati.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preset server" xml:space="preserve">
<source>Preset server</source>
<target>Server preimpostato</target>
@@ -2449,8 +2505,14 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Privacy ridefinita</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Private filenames" xml:space="preserve">
<source>Private filenames</source>
<target>Nomi di file privati</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile and server connections" xml:space="preserve">
<source>Profile and server connections</source>
<target>Profilo e connessioni al server</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile image" xml:space="preserve">
@@ -2528,6 +2590,11 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>I destinatari vedono gli aggiornamenti mentre li digiti.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reduced battery usage" xml:space="preserve">
<source>Reduced battery usage</source>
<target>Consumo di batteria ridotto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Rifiuta</target>
@@ -3068,6 +3135,16 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Grazie per aver installato SimpleX Chat!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" xml:space="preserve">
<source>Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!</source>
<target>Grazie agli utenti [contribuite via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Thanks to the users contribute via Weblate!" xml:space="preserve">
<source>Thanks to the users contribute via Weblate!</source>
<target>Grazie agli utenti contribuite via Weblate!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The 1st platform without any user identifiers private by design." xml:space="preserve">
<source>The 1st platform without any user identifiers private by design.</source>
<target>La prima piattaforma senza alcun identificatore utente privata by design.</target>
@@ -3130,6 +3207,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
</trans-unit>
<trans-unit id="The servers for new connections of your current chat profile **%@**." xml:space="preserve">
<source>The servers for new connections of your current chat profile **%@**.</source>
<target>I server per le nuove connessioni del profilo di chat attuale **%@**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Theme" xml:space="preserve">
@@ -3164,6 +3242,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
</trans-unit>
<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>
<target>Questa impostazione si applica ai messaggi del profilo di chat attuale **%@**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To ask any questions and to receive updates:" xml:space="preserve">
@@ -3191,6 +3270,11 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.</tar
<target>Per proteggere la privacy, invece degli ID utente utilizzati da tutte le altre piattaforme, SimpleX ha identificatori per le code di messaggi, separati per ciascuno dei tuoi contatti.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect timezone, image/voice files use UTC." xml:space="preserve">
<source>To protect timezone, image/voice files use UTC.</source>
<target>Per proteggere il fuso orario, i file immagine/vocali usano UTC.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect your information, turn on SimpleX Lock.&#10;You will be prompted to complete authentication before this feature is enabled." xml:space="preserve">
<source>To protect your information, turn on SimpleX Lock.
You will be prompted to complete authentication before this feature is enabled.</source>
@@ -3213,13 +3297,9 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio
<target>Per verificare la crittografia end-to-end con il tuo contatto, confrontate (o scansionate) il codice sui vostri dispositivi.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Transfer images faster" xml:space="preserve">
<source>Transfer images faster</source>
<target>Trasferisci immagini più velocemente</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Transport isolation" xml:space="preserve">
<source>Transport isolation</source>
<target>Isolamento del trasporto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Trying to connect to the server used to receive messages from this contact (error: %@)." xml:space="preserve">
@@ -3316,6 +3396,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
</trans-unit>
<trans-unit id="Update transport isolation mode?" xml:space="preserve">
<source>Update transport isolation mode?</source>
<target>Aggiornare la modalità di isolamento del trasporto?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Updating settings will re-connect the client to all servers." xml:space="preserve">
@@ -3355,6 +3436,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Profilo utente</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Using .onion hosts requires compatible VPN provider." xml:space="preserve">
@@ -3487,6 +3569,11 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Lo consenti</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You already have a chat profile with the same display name. Please choose another name." xml:space="preserve">
<source>You already have a chat profile with the same display name. Please choose another name.</source>
<target>Hai già un profilo chat con lo stesso nome da mostrare. Scegli un altro nome.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already connected to %@." xml:space="preserve">
<source>You are already connected to %@.</source>
<target>Sei già connesso/a a %@.</target>
@@ -3662,11 +3749,6 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Il tuo database della chat non è crittografato: imposta la password per crittografarlo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profile" xml:space="preserve">
<source>Your chat profile</source>
<target>Il tuo profilo di chat</target>
<note>No comment provided by engineer.</note>
</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>Il tuo profilo di chat verrà inviato ai membri del gruppo</target>
@@ -3679,10 +3761,12 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
</trans-unit>
<trans-unit id="Your chat profiles" xml:space="preserve">
<source>Your chat profiles</source>
<target>I tuoi profili di chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profiles are stored locally, only on your device." xml:space="preserve">
<source>Your chat profiles are stored locally, only on your device.</source>
<target>I tuoi profili di chat sono memorizzati localmente, solo sul tuo dispositivo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
@@ -3724,6 +3808,7 @@ Puoi annullare questa connessione e rimuovere il contatto (e riprovare più tard
</trans-unit>
<trans-unit id="Your current profile" xml:space="preserve">
<source>Your current profile</source>
<target>Il tuo profilo attuale</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your preferences" xml:space="preserve">

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -309,11 +309,14 @@
</trans-unit>
<trans-unit id="A separate TCP connection will be used **for each chat profile you have in the app**." xml:space="preserve">
<source>A separate TCP connection will be used **for each chat profile you have in the app**.</source>
<target>Отдельное TCP-соединение будет использоваться **для каждого профиля чата, который вы имеете в приложении**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="A separate TCP connection will be used **for each contact and group member**.&#10;**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." xml:space="preserve">
<source>A separate TCP connection will be used **for each contact and group member**.
**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail.</source>
<target>Отдельное TCP-соединение (и авторизация SOCKS) будет использоваться **для каждого контакта и члена группы**.
**Обратите внимание**: если у вас много контактов, потребление батареи и трафика может быть значительно выше, и некоторые соединения могут не работать.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
@@ -364,6 +367,7 @@
</trans-unit>
<trans-unit id="Add profile" xml:space="preserve">
<source>Add profile</source>
<target>Добавить профиль</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add servers by scanning QR codes." xml:space="preserve">
@@ -393,6 +397,7 @@
</trans-unit>
<trans-unit id="All chats and messages will be deleted - this cannot be undone!" xml:space="preserve">
<source>All chats and messages will be deleted - this cannot be undone!</source>
<target>Все чаты и сообщения будут удалены - это нельзя отменить!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All group members will remain connected." xml:space="preserve">
@@ -482,6 +487,7 @@
</trans-unit>
<trans-unit id="App build: %@" xml:space="preserve">
<source>App build: %@</source>
<target>Сборка приложения: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App icon" xml:space="preserve">
@@ -491,10 +497,12 @@
</trans-unit>
<trans-unit id="App version" xml:space="preserve">
<source>App version</source>
<target>Версия приложения</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App version: v%@" xml:space="preserve">
<source>App version: v%@</source>
<target>Версия приложения: v%@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Appearance" xml:space="preserve">
@@ -557,6 +565,11 @@
<target>Вы и ваш контакт можете отправлять голосовые сообщения.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve">
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
<target>По профилю чата или [по соединению](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (БЕТА).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Call already ended!" xml:space="preserve">
<source>Call already ended!</source>
<target>Звонок уже завершен!</target>
@@ -859,10 +872,12 @@
</trans-unit>
<trans-unit id="Core built at: %@" xml:space="preserve">
<source>Core built at: %@</source>
<target>Ядро скомпилировано: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Core version: v%@" xml:space="preserve">
<source>Core version: v%@</source>
<target>Версия ядра: v%@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create" xml:space="preserve">
@@ -925,11 +940,6 @@
<target>Тёмная</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Data" xml:space="preserve">
<source>Data</source>
<target>Данные</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database ID" xml:space="preserve">
<source>Database ID</source>
<target>ID базы данных</target>
@@ -1040,6 +1050,7 @@
</trans-unit>
<trans-unit id="Delete all files" xml:space="preserve">
<source>Delete all files</source>
<target>Удалить все файлы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete archive" xml:space="preserve">
@@ -1077,11 +1088,6 @@
<target>Удалить данные чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete files &amp; media" xml:space="preserve">
<source>Delete files &amp; media</source>
<target>Удалить файлы и медиа</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete files and media?" xml:space="preserve">
<source>Delete files and media?</source>
<target>Удалить файлы и медиа?</target>
@@ -1089,6 +1095,7 @@
</trans-unit>
<trans-unit id="Delete files for all chat profiles" xml:space="preserve">
<source>Delete files for all chat profiles</source>
<target>Удалить файлы во всех профилях чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete for everyone" xml:space="preserve">
@@ -1168,6 +1175,7 @@
</trans-unit>
<trans-unit id="Delete user profile?" xml:space="preserve">
<source>Delete user profile?</source>
<target>Удалить профиль пользователя?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Description" xml:space="preserve">
@@ -1200,6 +1208,11 @@
<target>Аутентификация устройства не включена. Вы можете включить блокировку SimpleX в Настройках после включения аутентификации.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Different names, avatars and transport isolation." xml:space="preserve">
<source>Different names, avatars and transport isolation.</source>
<target>Разные имена, аватары и транспортные сессии.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Direct messages" xml:space="preserve">
<source>Direct messages</source>
<target>Прямые сообщения</target>
@@ -1255,6 +1268,11 @@
<target>Отложить</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duplicate display name!" xml:space="preserve">
<source>Duplicate display name!</source>
<target>Имя профиля уже используется!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Edit" xml:space="preserve">
<source>Edit</source>
<target>Редактировать</target>
@@ -1405,6 +1423,11 @@
<target>Ошибка при создании ссылки группы</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error creating profile!" xml:space="preserve">
<source>Error creating profile!</source>
<target>Ошибка создания профиля!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error deleting chat database" xml:space="preserve">
<source>Error deleting chat database</source>
<target>Ошибка при удалении данных чата</target>
@@ -1442,6 +1465,7 @@
</trans-unit>
<trans-unit id="Error deleting user profile" xml:space="preserve">
<source>Error deleting user profile</source>
<target>Ошибка удаления профиля пользователя</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error enabling notifications" xml:space="preserve">
@@ -1514,6 +1538,11 @@
<target>Ошибка при остановке чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error switching profile!" xml:space="preserve">
<source>Error switching profile!</source>
<target>Ошибка выбора профиля!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error updating message" xml:space="preserve">
<source>Error updating message</source>
<target>Ошибка при обновлении сообщения</target>
@@ -1581,6 +1610,7 @@
</trans-unit>
<trans-unit id="Files &amp; media" xml:space="preserve">
<source>Files &amp; media</source>
<target>Файлы и медиа</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="For console" xml:space="preserve">
@@ -1588,6 +1618,11 @@
<target>Для консоли</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="French interface" xml:space="preserve">
<source>French interface</source>
<target>Французский интерфейс</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Full link" xml:space="preserve">
<source>Full link</source>
<target>Полная ссылка</target>
@@ -1935,6 +1970,11 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Возможно, вы уже соединились через эту ссылку. Если это не так, то это ошибка (%@).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Italian interface" xml:space="preserve">
<source>Italian interface</source>
<target>Итальянский интерфейс</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Вступить</target>
@@ -2012,6 +2052,7 @@ We will be adding server redundancy to prevent lost messages.</source>
</trans-unit>
<trans-unit id="Local profile data only" xml:space="preserve">
<source>Local profile data only</source>
<target>Только локальные данные профиля</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Make a private connection" xml:space="preserve">
@@ -2084,6 +2125,11 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Ошибка доставки сообщения</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message draft" xml:space="preserve">
<source>Message draft</source>
<target>Черновик сообщения</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message text" xml:space="preserve">
<source>Message text</source>
<target>Текст сообщения</target>
@@ -2114,11 +2160,21 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Перемещение данных завершено</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="More improvements are coming soon!" xml:space="preserve">
<source>More improvements are coming soon!</source>
<target>Дополнительные улучшения скоро!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Most likely this contact has deleted the connection with you." xml:space="preserve">
<source>Most likely this contact has deleted the connection with you.</source>
<target>Скорее всего, этот контакт удалил соединение с вами.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Multiple chat profiles" xml:space="preserve">
<source>Multiple chat profiles</source>
<target>Много профилей чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Mute" xml:space="preserve">
<source>Mute</source>
<target>Без звука</target>
@@ -2336,6 +2392,7 @@ We will be adding server redundancy to prevent lost messages.</source>
</trans-unit>
<trans-unit id="PING count" xml:space="preserve">
<source>PING count</source>
<target>Количество PING</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="PING interval" xml:space="preserve">
@@ -2423,6 +2480,11 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Возможно, хэш сертификата в адресе сервера неверный</target>
<note>server test error</note>
</trans-unit>
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
<source>Preserve the last message draft, with attachments.</source>
<target>Сохранить последний черновик, вместе с вложениями.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Preset server" xml:space="preserve">
<source>Preset server</source>
<target>Сервер по умолчанию</target>
@@ -2443,8 +2505,14 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Более конфиденциальный</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Private filenames" xml:space="preserve">
<source>Private filenames</source>
<target>Защищенные имена файлов</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile and server connections" xml:space="preserve">
<source>Profile and server connections</source>
<target>Профиль и соединения на сервере</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Profile image" xml:space="preserve">
@@ -2522,6 +2590,11 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Получатели видят их в то время как вы их набираете.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reduced battery usage" xml:space="preserve">
<source>Reduced battery usage</source>
<target>Уменьшенное потребление батареи</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reject" xml:space="preserve">
<source>Reject</source>
<target>Отклонить</target>
@@ -3062,6 +3135,16 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Спасибо, что установили SimpleX Chat!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" xml:space="preserve">
<source>Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!</source>
<target>Благодаря пользователям [добавьте переводы через Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Thanks to the users contribute via Weblate!" xml:space="preserve">
<source>Thanks to the users contribute via Weblate!</source>
<target>Благодаря пользователям добавьте переводы через Weblate!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The 1st platform without any user identifiers private by design." xml:space="preserve">
<source>The 1st platform without any user identifiers private by design.</source>
<target>Первая в мире платформа без идентификаторов пользователей.</target>
@@ -3124,6 +3207,7 @@ We will be adding server redundancy to prevent lost messages.</source>
</trans-unit>
<trans-unit id="The servers for new connections of your current chat profile **%@**." xml:space="preserve">
<source>The servers for new connections of your current chat profile **%@**.</source>
<target>Серверы для новых соединений вашего текущего профиля чата **%@**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Theme" xml:space="preserve">
@@ -3158,6 +3242,7 @@ We will be adding server redundancy to prevent lost messages.</source>
</trans-unit>
<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>
<target>Эта настройка применяется к сообщениям в вашем текущем профиле чата **%@**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To ask any questions and to receive updates:" xml:space="preserve">
@@ -3185,6 +3270,11 @@ We will be adding server redundancy to prevent lost messages.</source>
<target>Чтобы защитить вашу конфиденциальность, вместо ID пользователей, которые есть в других платформах, SimpleX использует ID для очередей сообщений, разные для каждого контакта.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect timezone, image/voice files use UTC." xml:space="preserve">
<source>To protect timezone, image/voice files use UTC.</source>
<target>Чтобы защитить ваш часовой пояс, файлы картинок и голосовых сообщений используют UTC.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="To protect your information, turn on SimpleX Lock.&#10;You will be prompted to complete authentication before this feature is enabled." xml:space="preserve">
<source>To protect your information, turn on SimpleX Lock.
You will be prompted to complete authentication before this feature is enabled.</source>
@@ -3207,13 +3297,9 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Чтобы подтвердить end-to-end шифрование с вашим контактом сравните (или сканируйте) код безопасности на ваших устройствах.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Transfer images faster" xml:space="preserve">
<source>Transfer images faster</source>
<target>Передавать изображения быстрее</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Transport isolation" xml:space="preserve">
<source>Transport isolation</source>
<target>Отдельные сессии для</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Trying to connect to the server used to receive messages from this contact (error: %@)." xml:space="preserve">
@@ -3310,6 +3396,7 @@ To connect, please ask your contact to create another connection link and check
</trans-unit>
<trans-unit id="Update transport isolation mode?" xml:space="preserve">
<source>Update transport isolation mode?</source>
<target>Обновить режим отдельных сессий?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Updating settings will re-connect the client to all servers." xml:space="preserve">
@@ -3349,6 +3436,7 @@ To connect, please ask your contact to create another connection link and check
</trans-unit>
<trans-unit id="User profile" xml:space="preserve">
<source>User profile</source>
<target>Профиль чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Using .onion hosts requires compatible VPN provider." xml:space="preserve">
@@ -3481,6 +3569,11 @@ To connect, please ask your contact to create another connection link and check
<target>Вы разрешаете</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You already have a chat profile with the same display name. Please choose another name." xml:space="preserve">
<source>You already have a chat profile with the same display name. Please choose another name.</source>
<target>У вас уже есть профиль с таким именем. Пожалуйста, выберите другое имя.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are already connected to %@." xml:space="preserve">
<source>You are already connected to %@.</source>
<target>Вы уже соединены с контактом %@.</target>
@@ -3656,11 +3749,6 @@ To connect, please ask your contact to create another connection link and check
<target>База данных НЕ зашифрована. Установите пароль, чтобы защитить ваши данные.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profile" xml:space="preserve">
<source>Your chat profile</source>
<target>Ваш профиль</target>
<note>No comment provided by engineer.</note>
</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>
@@ -3673,10 +3761,12 @@ To connect, please ask your contact to create another connection link and check
</trans-unit>
<trans-unit id="Your chat profiles" xml:space="preserve">
<source>Your chat profiles</source>
<target>Ваши профили чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat profiles are stored locally, only on your device." xml:space="preserve">
<source>Your chat profiles are stored locally, only on your device.</source>
<target>Ваши профили чата хранятся локально, только на вашем устройстве.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
@@ -3718,6 +3808,7 @@ You can cancel this connection and remove the contact (and try later with a new
</trans-unit>
<trans-unit id="Your current profile" xml:space="preserve">
<source>Your current profile</source>
<target>Ваш активный профиль</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your preferences" xml:space="preserve">

View File

@@ -225,16 +225,14 @@ func receivedMsgNtf(_ res: ChatResponse) async -> (String, UNMutableNotification
if let file = cItem.file,
file.fileSize <= MAX_IMAGE_SIZE_AUTO_RCV,
privacyAcceptImagesGroupDefault.get() {
let inline = privacyTransferImagesInlineGroupDefault.get()
cItem = apiReceiveFile(fileId: file.fileId, inline: inline)?.chatItem ?? cItem
cItem = apiReceiveFile(fileId: file.fileId)?.chatItem ?? cItem
}
} else if case .voice = cItem.content.msgContent { // TODO check inlineFileMode != IFMSent
if let file = cItem.file,
file.fileSize <= MAX_IMAGE_SIZE,
file.fileSize > MAX_VOICE_MESSAGE_SIZE_INLINE_SEND,
privacyAcceptImagesGroupDefault.get() {
let inline = privacyTransferImagesInlineGroupDefault.get()
cItem = apiReceiveFile(fileId: file.fileId, inline: inline)?.chatItem ?? cItem
cItem = apiReceiveFile(fileId: file.fileId)?.chatItem ?? cItem
}
}
return cItem.showMutableNotification ? (aChatItem.chatId, createMessageReceivedNtf(user, cInfo, cItem)) : nil
@@ -308,7 +306,7 @@ func apiGetNtfMessage(nonce: String, encNtfInfo: String) -> NtfMessages? {
return nil
}
func apiReceiveFile(fileId: Int64, inline: Bool) -> AChatItem? {
func apiReceiveFile(fileId: Int64, inline: Bool? = nil) -> AChatItem? {
let r = sendSimpleXCmd(.receiveFile(fileId: fileId, inline: inline))
if case let .rcvFileAccepted(_, chatItem) = r { return chatItem }
logger.error("receiveFile error: \(responseError(r))")

View File

@@ -27,11 +27,6 @@
5C116CDC27AABE0400E66D01 /* ContactRequestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C116CDB27AABE0400E66D01 /* ContactRequestView.swift */; };
5C13730B28156D2700F43030 /* ContactConnectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C13730A28156D2700F43030 /* ContactConnectionView.swift */; };
5C1A4C1E27A715B700EAD5AD /* ChatItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1A4C1D27A715B700EAD5AD /* ChatItemView.swift */; };
5C1E42E3298A5D0D00042FC4 /* libHSsimplex-chat-4.5.0.2-9zobWRBhgoCKINcOHw5CKF-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C1E42DE298A5D0D00042FC4 /* libHSsimplex-chat-4.5.0.2-9zobWRBhgoCKINcOHw5CKF-ghc8.10.7.a */; };
5C1E42E4298A5D0D00042FC4 /* libHSsimplex-chat-4.5.0.2-9zobWRBhgoCKINcOHw5CKF.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C1E42DF298A5D0D00042FC4 /* libHSsimplex-chat-4.5.0.2-9zobWRBhgoCKINcOHw5CKF.a */; };
5C1E42E5298A5D0D00042FC4 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C1E42E0298A5D0D00042FC4 /* libgmp.a */; };
5C1E42E6298A5D0D00042FC4 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C1E42E1298A5D0D00042FC4 /* libgmpxx.a */; };
5C1E42E7298A5D0D00042FC4 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C1E42E2298A5D0D00042FC4 /* libffi.a */; };
5C2E260727A2941F00F70299 /* SimpleXAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260627A2941F00F70299 /* SimpleXAPI.swift */; };
5C2E260B27A30CFA00F70299 /* ChatListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260A27A30CFA00F70299 /* ChatListView.swift */; };
5C2E260F27A30FDC00F70299 /* ChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260E27A30FDC00F70299 /* ChatView.swift */; };
@@ -149,6 +144,11 @@
6442E0BA287F169300CEC0F9 /* AddGroupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6442E0B9287F169300CEC0F9 /* AddGroupView.swift */; };
6442E0BE2880182D00CEC0F9 /* GroupChatInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6442E0BD2880182D00CEC0F9 /* GroupChatInfoView.swift */; };
6448BBB628FA9D56000D2AB9 /* GroupLinkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6448BBB528FA9D56000D2AB9 /* GroupLinkView.swift */; };
644E727429962516003534BE /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 644E726F29962515003534BE /* libgmpxx.a */; };
644E727529962516003534BE /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 644E727029962516003534BE /* libffi.a */; };
644E727629962516003534BE /* libHSsimplex-chat-4.5.2.0-3DFmi70wk2S4RlkJCMDsZW.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 644E727129962516003534BE /* libHSsimplex-chat-4.5.2.0-3DFmi70wk2S4RlkJCMDsZW.a */; };
644E727729962516003534BE /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 644E727229962516003534BE /* libgmp.a */; };
644E727829962516003534BE /* libHSsimplex-chat-4.5.2.0-3DFmi70wk2S4RlkJCMDsZW-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 644E727329962516003534BE /* libHSsimplex-chat-4.5.2.0-3DFmi70wk2S4RlkJCMDsZW-ghc8.10.7.a */; };
644EFFDE292BCD9D00525D5B /* ComposeVoiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 644EFFDD292BCD9D00525D5B /* ComposeVoiceView.swift */; };
644EFFE0292CFD7F00525D5B /* CIVoiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 644EFFDF292CFD7F00525D5B /* CIVoiceView.swift */; };
644EFFE2292D089800525D5B /* FramedCIVoiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 644EFFE1292D089800525D5B /* FramedCIVoiceView.swift */; };
@@ -246,11 +246,6 @@
5C13730A28156D2700F43030 /* ContactConnectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactConnectionView.swift; sourceTree = "<group>"; };
5C13730C2815740A00F43030 /* DebugJSON.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = DebugJSON.playground; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
5C1A4C1D27A715B700EAD5AD /* ChatItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemView.swift; sourceTree = "<group>"; };
5C1E42DE298A5D0D00042FC4 /* libHSsimplex-chat-4.5.0.2-9zobWRBhgoCKINcOHw5CKF-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.5.0.2-9zobWRBhgoCKINcOHw5CKF-ghc8.10.7.a"; sourceTree = "<group>"; };
5C1E42DF298A5D0D00042FC4 /* libHSsimplex-chat-4.5.0.2-9zobWRBhgoCKINcOHw5CKF.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.5.0.2-9zobWRBhgoCKINcOHw5CKF.a"; sourceTree = "<group>"; };
5C1E42E0298A5D0D00042FC4 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
5C1E42E1298A5D0D00042FC4 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
5C1E42E2298A5D0D00042FC4 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
5C2E260627A2941F00F70299 /* SimpleXAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleXAPI.swift; sourceTree = "<group>"; };
5C2E260A27A30CFA00F70299 /* ChatListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListView.swift; sourceTree = "<group>"; };
5C2E260E27A30FDC00F70299 /* ChatView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatView.swift; sourceTree = "<group>"; };
@@ -381,6 +376,11 @@
6442E0B9287F169300CEC0F9 /* AddGroupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddGroupView.swift; sourceTree = "<group>"; };
6442E0BD2880182D00CEC0F9 /* GroupChatInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupChatInfoView.swift; sourceTree = "<group>"; };
6448BBB528FA9D56000D2AB9 /* GroupLinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupLinkView.swift; sourceTree = "<group>"; };
644E726F29962515003534BE /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
644E727029962516003534BE /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
644E727129962516003534BE /* libHSsimplex-chat-4.5.2.0-3DFmi70wk2S4RlkJCMDsZW.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.5.2.0-3DFmi70wk2S4RlkJCMDsZW.a"; sourceTree = "<group>"; };
644E727229962516003534BE /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
644E727329962516003534BE /* libHSsimplex-chat-4.5.2.0-3DFmi70wk2S4RlkJCMDsZW-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.5.2.0-3DFmi70wk2S4RlkJCMDsZW-ghc8.10.7.a"; sourceTree = "<group>"; };
644EFFDD292BCD9D00525D5B /* ComposeVoiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeVoiceView.swift; sourceTree = "<group>"; };
644EFFDF292CFD7F00525D5B /* CIVoiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIVoiceView.swift; sourceTree = "<group>"; };
644EFFE1292D089800525D5B /* FramedCIVoiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FramedCIVoiceView.swift; sourceTree = "<group>"; };
@@ -432,13 +432,13 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
5C1E42E6298A5D0D00042FC4 /* libgmpxx.a in Frameworks */,
644E727429962516003534BE /* libgmpxx.a in Frameworks */,
5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */,
5C1E42E5298A5D0D00042FC4 /* libgmp.a in Frameworks */,
5C1E42E4298A5D0D00042FC4 /* libHSsimplex-chat-4.5.0.2-9zobWRBhgoCKINcOHw5CKF.a in Frameworks */,
5C1E42E7298A5D0D00042FC4 /* libffi.a in Frameworks */,
5C1E42E3298A5D0D00042FC4 /* libHSsimplex-chat-4.5.0.2-9zobWRBhgoCKINcOHw5CKF-ghc8.10.7.a in Frameworks */,
644E727629962516003534BE /* libHSsimplex-chat-4.5.2.0-3DFmi70wk2S4RlkJCMDsZW.a in Frameworks */,
644E727829962516003534BE /* libHSsimplex-chat-4.5.2.0-3DFmi70wk2S4RlkJCMDsZW-ghc8.10.7.a in Frameworks */,
5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */,
644E727729962516003534BE /* libgmp.a in Frameworks */,
644E727529962516003534BE /* libffi.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -496,11 +496,11 @@
5C764E5C279C70B7000C6508 /* Libraries */ = {
isa = PBXGroup;
children = (
5C1E42E2298A5D0D00042FC4 /* libffi.a */,
5C1E42E0298A5D0D00042FC4 /* libgmp.a */,
5C1E42E1298A5D0D00042FC4 /* libgmpxx.a */,
5C1E42DE298A5D0D00042FC4 /* libHSsimplex-chat-4.5.0.2-9zobWRBhgoCKINcOHw5CKF-ghc8.10.7.a */,
5C1E42DF298A5D0D00042FC4 /* libHSsimplex-chat-4.5.0.2-9zobWRBhgoCKINcOHw5CKF.a */,
644E727029962516003534BE /* libffi.a */,
644E727229962516003534BE /* libgmp.a */,
644E726F29962515003534BE /* libgmpxx.a */,
644E727329962516003534BE /* libHSsimplex-chat-4.5.2.0-3DFmi70wk2S4RlkJCMDsZW-ghc8.10.7.a */,
644E727129962516003534BE /* libHSsimplex-chat-4.5.2.0-3DFmi70wk2S4RlkJCMDsZW.a */,
);
path = Libraries;
sourceTree = "<group>";
@@ -1330,7 +1330,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 121;
CURRENT_PROJECT_VERSION = 125;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
ENABLE_PREVIEWS = YES;
@@ -1351,7 +1351,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 4.5;
MARKETING_VERSION = 4.5.2;
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app;
PRODUCT_NAME = SimpleX;
SDKROOT = iphoneos;
@@ -1372,7 +1372,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 121;
CURRENT_PROJECT_VERSION = 125;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
ENABLE_PREVIEWS = YES;
@@ -1393,7 +1393,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 4.5;
MARKETING_VERSION = 4.5.2;
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app;
PRODUCT_NAME = SimpleX;
SDKROOT = iphoneos;
@@ -1451,7 +1451,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 121;
CURRENT_PROJECT_VERSION = 125;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
GENERATE_INFOPLIST_FILE = YES;
@@ -1464,7 +1464,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 4.5;
MARKETING_VERSION = 4.5.2;
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
@@ -1481,7 +1481,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 121;
CURRENT_PROJECT_VERSION = 125;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
GENERATE_INFOPLIST_FILE = YES;
@@ -1494,7 +1494,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 4.5;
MARKETING_VERSION = 4.5.2;
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;

View File

@@ -91,7 +91,7 @@ public enum ChatCommand {
case apiCallStatus(contact: Contact, callStatus: WebRTCCallStatus)
case apiChatRead(type: ChatType, id: Int64, itemRange: (Int64, Int64))
case apiChatUnread(type: ChatType, id: Int64, unreadChat: Bool)
case receiveFile(fileId: Int64, inline: Bool)
case receiveFile(fileId: Int64, inline: Bool?)
case showVersion
case string(String)
@@ -180,7 +180,11 @@ public enum ChatCommand {
case let .apiCallStatus(contact, callStatus): return "/_call status @\(contact.apiId) \(callStatus.rawValue)"
case let .apiChatRead(type, id, itemRange: (from, to)): return "/_read chat \(ref(type, id)) from=\(from) to=\(to)"
case let .apiChatUnread(type, id, unreadChat): return "/_unread chat \(ref(type, id)) \(onOff(unreadChat))"
case let .receiveFile(fileId, inline): return "/freceive \(fileId) inline=\(onOff(inline))"
case let .receiveFile(fileId, inline):
if let inline = inline {
return "/freceive \(fileId) inline=\(onOff(inline))"
}
return "/freceive \(fileId)"
case .showVersion: return "/version"
case let .string(str): return str
}

View File

@@ -14,7 +14,7 @@ let GROUP_DEFAULT_DB_CONTAINER = "dbContainer"
public let GROUP_DEFAULT_CHAT_LAST_START = "chatLastStart"
let GROUP_DEFAULT_NTF_PREVIEW_MODE = "ntfPreviewMode"
let GROUP_DEFAULT_PRIVACY_ACCEPT_IMAGES = "privacyAcceptImages"
public let GROUP_DEFAULT_PRIVACY_TRANSFER_IMAGES_INLINE = "privacyTransferImagesInline"
public let GROUP_DEFAULT_PRIVACY_TRANSFER_IMAGES_INLINE = "privacyTransferImagesInline" // no longer used
let GROUP_DEFAULT_NTF_BADGE_COUNT = "ntgBadgeCount"
let GROUP_DEFAULT_NETWORK_USE_ONION_HOSTS = "networkUseOnionHosts"
let GROUP_DEFAULT_NETWORK_SESSION_MODE = "networkSessionMode"
@@ -50,7 +50,7 @@ public func registerGroupDefaults() {
GROUP_DEFAULT_STORE_DB_PASSPHRASE: true,
GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE: false,
GROUP_DEFAULT_PRIVACY_ACCEPT_IMAGES: true,
GROUP_DEFAULT_PRIVACY_TRANSFER_IMAGES_INLINE: true
GROUP_DEFAULT_PRIVACY_TRANSFER_IMAGES_INLINE: false
])
}

View File

@@ -1762,6 +1762,8 @@ public struct ChatItem: Identifiable, Decodable {
case .sndGroupFeature: return showNtfDir
case .rcvChatFeatureRejected: return showNtfDir
case .rcvGroupFeatureRejected: return showNtfDir
case .sndModerated: return true
case .rcvModerated: return true
case .invalidJSON: return false
}
}
@@ -1784,10 +1786,10 @@ public struct ChatItem: Identifiable, Decodable {
}
}
public static func getSample (_ id: Int64, _ dir: CIDirection, _ ts: Date, _ text: String, _ status: CIStatus = .sndNew, quotedItem: CIQuote? = nil, file: CIFile? = nil, _ itemDeleted: Bool = false, _ itemEdited: Bool = false, _ itemLive: Bool = false, _ editable: Bool = true) -> ChatItem {
public static func getSample (_ id: Int64, _ dir: CIDirection, _ ts: Date, _ text: String, _ status: CIStatus = .sndNew, quotedItem: CIQuote? = nil, file: CIFile? = nil, itemDeleted: CIDeleted? = nil, itemEdited: Bool = false, itemLive: Bool = false, editable: Bool = true) -> ChatItem {
ChatItem(
chatDir: dir,
meta: CIMeta.getSample(id, ts, text, status, itemDeleted, itemEdited, itemLive, editable),
meta: CIMeta.getSample(id, ts, text, status, itemDeleted: itemDeleted, itemEdited: itemEdited, itemLive: itemLive, editable: editable),
content: .sndMsgContent(msgContent: .text(text)),
quotedItem: quotedItem,
file: file
@@ -1797,7 +1799,7 @@ public struct ChatItem: Identifiable, Decodable {
public static func getVoiceMsgContentSample (id: Int64 = 1, text: String = "", fileName: String = "voice.m4a", fileSize: Int64 = 65536, fileStatus: CIFileStatus = .rcvComplete) -> ChatItem {
ChatItem(
chatDir: .directRcv,
meta: CIMeta.getSample(id, .now, text, .rcvRead, false, false, false),
meta: CIMeta.getSample(id, .now, text, .rcvRead),
content: .rcvMsgContent(msgContent: .voice(text: text, duration: 30)),
quotedItem: nil,
file: CIFile.getSample(fileName: fileName, fileSize: fileSize, fileStatus: fileStatus)
@@ -1807,7 +1809,7 @@ public struct ChatItem: Identifiable, Decodable {
public static func getFileMsgContentSample (id: Int64 = 1, text: String = "", fileName: String = "test.txt", fileSize: Int64 = 100, fileStatus: CIFileStatus = .rcvComplete) -> ChatItem {
ChatItem(
chatDir: .directRcv,
meta: CIMeta.getSample(id, .now, text, .rcvRead, false, false, false),
meta: CIMeta.getSample(id, .now, text, .rcvRead),
content: .rcvMsgContent(msgContent: .file(text)),
quotedItem: nil,
file: CIFile.getSample(fileName: fileName, fileSize: fileSize, fileStatus: fileStatus)
@@ -1817,7 +1819,7 @@ public struct ChatItem: Identifiable, Decodable {
public static func getDeletedContentSample (_ id: Int64 = 1, dir: CIDirection = .directRcv, _ ts: Date = .now, _ text: String = "this item is deleted", _ status: CIStatus = .rcvRead) -> ChatItem {
ChatItem(
chatDir: dir,
meta: CIMeta.getSample(id, ts, text, status, false, false, false),
meta: CIMeta.getSample(id, ts, text, status),
content: .rcvDeleted(deleteMode: .cidmBroadcast),
quotedItem: nil,
file: nil
@@ -1827,7 +1829,7 @@ public struct ChatItem: Identifiable, Decodable {
public static func getIntegrityErrorSample (_ status: CIStatus = .rcvRead, fromMsgId: Int64 = 1, toMsgId: Int64 = 2) -> ChatItem {
ChatItem(
chatDir: .directRcv,
meta: CIMeta.getSample(1, .now, "1 skipped message", status, false, false, false),
meta: CIMeta.getSample(1, .now, "1 skipped message", status),
content: .rcvIntegrityError(msgError: .msgSkipped(fromMsgId: fromMsgId, toMsgId: toMsgId)),
quotedItem: nil,
file: nil
@@ -1837,7 +1839,7 @@ public struct ChatItem: Identifiable, Decodable {
public static func getGroupInvitationSample (_ status: CIGroupInvitationStatus = .pending) -> ChatItem {
ChatItem(
chatDir: .directRcv,
meta: CIMeta.getSample(1, .now, "received invitation to join group team as admin", .rcvRead, false, false, false),
meta: CIMeta.getSample(1, .now, "received invitation to join group team as admin", .rcvRead),
content: .rcvGroupInvitation(groupInvitation: CIGroupInvitation.getSample(status: status), memberRole: .admin),
quotedItem: nil,
file: nil
@@ -1847,7 +1849,7 @@ public struct ChatItem: Identifiable, Decodable {
public static func getGroupEventSample () -> ChatItem {
ChatItem(
chatDir: .directRcv,
meta: CIMeta.getSample(1, .now, "group event text", .rcvRead, false, false, false),
meta: CIMeta.getSample(1, .now, "group event text", .rcvRead),
content: .rcvGroupEvent(rcvGroupEvent: .memberAdded(groupMemberId: 1, profile: Profile.sampleData)),
quotedItem: nil,
file: nil
@@ -1858,7 +1860,7 @@ public struct ChatItem: Identifiable, Decodable {
let content = CIContent.rcvChatFeature(feature: feature, enabled: enabled, param: nil)
return ChatItem(
chatDir: .directRcv,
meta: CIMeta.getSample(1, .now, content.text, .rcvRead, false, false, false),
meta: CIMeta.getSample(1, .now, content.text, .rcvRead),
content: content,
quotedItem: nil,
file: nil
@@ -1875,7 +1877,7 @@ public struct ChatItem: Identifiable, Decodable {
itemStatus: .rcvRead,
createdAt: .now,
updatedAt: .now,
itemDeleted: false,
itemDeleted: nil,
itemEdited: false,
itemLive: false,
editable: false
@@ -1896,7 +1898,7 @@ public struct ChatItem: Identifiable, Decodable {
itemStatus: .rcvRead,
createdAt: .now,
updatedAt: .now,
itemDeleted: false,
itemDeleted: nil,
itemEdited: false,
itemLive: true,
editable: false
@@ -1945,7 +1947,7 @@ public struct CIMeta: Decodable {
public var itemStatus: CIStatus
var createdAt: Date
public var updatedAt: Date
public var itemDeleted: Bool
public var itemDeleted: CIDeleted?
public var itemEdited: Bool
public var itemTimed: CITimed?
public var itemLive: Bool?
@@ -1971,7 +1973,7 @@ public struct CIMeta: Decodable {
}
}
public static func getSample(_ id: Int64, _ ts: Date, _ text: String, _ status: CIStatus = .sndNew, _ itemDeleted: Bool = false, _ itemEdited: Bool = false, _ itemLive: Bool = false, _ editable: Bool = true) -> CIMeta {
public static func getSample(_ id: Int64, _ ts: Date, _ text: String, _ status: CIStatus = .sndNew, itemDeleted: CIDeleted? = nil, itemEdited: Bool = false, itemLive: Bool = false, editable: Bool = true) -> CIMeta {
CIMeta(
itemId: id,
itemTs: ts,
@@ -1994,7 +1996,7 @@ public struct CIMeta: Decodable {
itemStatus: .sndNew,
createdAt: .now,
updatedAt: .now,
itemDeleted: false,
itemDeleted: nil,
itemEdited: false,
itemLive: false,
editable: false
@@ -2037,6 +2039,18 @@ public enum CIStatus: Decodable {
}
}
public enum CIDeleted: Decodable {
case deleted
case moderated(byGroupMember: GroupMember)
var id: String {
switch self {
case .deleted: return "deleted"
case .moderated: return "moderated"
}
}
}
public enum CIDeleteMode: String, Decodable {
case cidmBroadcast = "broadcast"
case cidmInternal = "internal"
@@ -2068,6 +2082,8 @@ public enum CIContent: Decodable, ItemContent {
case sndGroupFeature(groupFeature: GroupFeature, preference: GroupPreference, param: Int?)
case rcvChatFeatureRejected(feature: ChatFeature)
case rcvGroupFeatureRejected(groupFeature: GroupFeature)
case sndModerated
case rcvModerated
case invalidJSON(json: String)
public var text: String {
@@ -2094,6 +2110,8 @@ public enum CIContent: Decodable, ItemContent {
case let .sndGroupFeature(feature, preference, param): return CIContent.featureText(feature, preference.enable.text, param)
case let .rcvChatFeatureRejected(feature): return String.localizedStringWithFormat("%@: received, prohibited", feature.text)
case let .rcvGroupFeatureRejected(groupFeature): return String.localizedStringWithFormat("%@: received, prohibited", groupFeature.text)
case .sndModerated: return NSLocalizedString("moderated", comment: "moderated chat item")
case .rcvModerated: return NSLocalizedString("moderated", comment: "moderated chat item")
case .invalidJSON: return NSLocalizedString("invalid data", comment: "invalid chat item")
}
}

View File

@@ -196,6 +196,12 @@
/* No comment provided by engineer. */
"A random profile will be sent to your contact" = "Ein zufälliges Profil wird an Ihren Kontakt gesendet";
/* No comment provided by engineer. */
"A separate TCP connection will be used **for each chat profile you have in the app**." = "**Für jedes von Ihnen in der App genutzte Chat-Profil** wird eine separate TCP-Verbindung genutzt.";
/* No comment provided by engineer. */
"A separate TCP connection will be used **for each contact and group member**.\n**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." = "**Für jeden Kontakt und jedes Gruppenmitglied** wird eine separate TCP-Verbindung genutzt.\n**Bitte beachten Sie**: Wenn Sie viele Verbindungen haben, kann der Batterieverbrauch und die Datennutzung wesentlich höher sein und einige Verbindungen können scheitern.";
/* No comment provided by engineer. */
"About SimpleX" = "Über SimpleX";
@@ -230,6 +236,9 @@
/* No comment provided by engineer. */
"Add preset servers" = "Füge voreingestellte Server hinzu";
/* No comment provided by engineer. */
"Add profile" = "Profil hinzufügen";
/* No comment provided by engineer. */
"Add server…" = "Füge Server hinzu…";
@@ -248,6 +257,9 @@
/* No comment provided by engineer. */
"Advanced network settings" = "Erweiterte Netzwerkeinstellungen";
/* No comment provided by engineer. */
"All chats and messages will be deleted - this cannot be undone!" = "Alle Chats und Nachrichten werden gelöscht! Dies kann nicht rückgängig gemacht werden!";
/* No comment provided by engineer. */
"All group members will remain connected." = "Alle Gruppenmitglieder bleiben verbunden.";
@@ -302,9 +314,18 @@
/* No comment provided by engineer. */
"Answer call" = "Anruf annehmen";
/* No comment provided by engineer. */
"App build: %@" = "App Build: %@";
/* No comment provided by engineer. */
"App icon" = "App Icon";
/* No comment provided by engineer. */
"App version" = "App Version";
/* No comment provided by engineer. */
"App version: v%@" = "App Version: v%@";
/* No comment provided by engineer. */
"Appearance" = "Design";
@@ -353,6 +374,9 @@
/* No comment provided by engineer. */
"Both you and your contact can send voice messages." = "Sowohl Ihr Kontakt, als auch Sie können Sprachnachrichten senden.";
/* 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).";
/* No comment provided by engineer. */
"Call already ended!" = "Anruf ist bereits beendet!";
@@ -605,6 +629,12 @@
/* chat item action */
"Copy" = "Kopieren";
/* No comment provided by engineer. */
"Core built at: %@" = "Core übersetzt am: %@";
/* No comment provided by engineer. */
"Core version: v%@" = "Core Version: v%@";
/* No comment provided by engineer. */
"Create" = "Erstellen";
@@ -644,9 +674,6 @@
/* No comment provided by engineer. */
"Dark" = "Dunkel";
/* No comment provided by engineer. */
"Data" = "Daten";
/* No comment provided by engineer. */
"Database encrypted!" = "Datenbank verschlüsselt!";
@@ -707,6 +734,9 @@
/* No comment provided by engineer. */
"Delete after" = "Löschen nach";
/* No comment provided by engineer. */
"Delete all files" = "Alle Dateien löschen";
/* No comment provided by engineer. */
"Delete archive" = "Archiv löschen";
@@ -732,10 +762,10 @@
"Delete database" = "Datenbank löschen";
/* No comment provided by engineer. */
"Delete files & media" = "Dateien & Medien löschen";
"Delete files and media?" = "Dateien und Medien löschen?";
/* No comment provided by engineer. */
"Delete files and media?" = "Dateien und Medien löschen?";
"Delete files for all chat profiles" = "Dateien für alle Chat-Profile löschen";
/* chat feature */
"Delete for everyone" = "Für Alle löschen";
@@ -782,6 +812,9 @@
/* server test step */
"Delete queue" = "Lösche Warteschlange";
/* No comment provided by engineer. */
"Delete user profile?" = "Benutzerprofil löschen?";
/* deleted chat item */
"deleted" = "Gelöscht";
@@ -806,6 +839,9 @@
/* No comment provided by engineer. */
"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "Die Geräteauthentifizierung ist deaktiviert. Sie können die SimpleX Sperre über die Einstellungen aktivieren, sobald Sie die Geräteauthentifizierung aktiviert haben.";
/* No comment provided by engineer. */
"Different names, avatars and transport isolation." = "Unterschiedliche Namen, Avatare und Transport-Isolation.";
/* connection level description */
"direct" = "direkt";
@@ -842,6 +878,9 @@
/* No comment provided by engineer. */
"Do NOT use SimpleX for emergency calls." = "Nutzen Sie SimpleX nicht für Notrufe.";
/* No comment provided by engineer. */
"Duplicate display name!" = "Doppelter Anzeigename!";
/* integrity error chat item */
"duplicate message" = "Doppelte Nachricht";
@@ -956,6 +995,9 @@
/* No comment provided by engineer. */
"Error creating group link" = "Fehler beim Erzeugen des Gruppen-Links";
/* No comment provided by engineer. */
"Error creating profile!" = "Fehler beim Erstellen des Profils!";
/* No comment provided by engineer. */
"Error deleting chat database" = "Fehler beim Löschen der Chat-Datenbank";
@@ -977,6 +1019,9 @@
/* No comment provided by engineer. */
"Error deleting token" = "Fehler beim Löschen des Tokens";
/* No comment provided by engineer. */
"Error deleting user profile" = "Fehler beim Löschen des Benutzerprofils";
/* No comment provided by engineer. */
"Error enabling notifications" = "Fehler beim Aktivieren der Benachrichtigungen";
@@ -1019,6 +1064,9 @@
/* No comment provided by engineer. */
"Error stopping chat" = "Fehler beim Beenden des Chats";
/* No comment provided by engineer. */
"Error switching profile!" = "Fehler beim Umschalten des Profils!";
/* No comment provided by engineer. */
"Error updating message" = "Fehler beim Aktualisieren der Nachricht";
@@ -1058,9 +1106,15 @@
/* No comment provided by engineer. */
"File: %@" = "Datei: %@";
/* No comment provided by engineer. */
"Files & media" = "Dateien & Medien";
/* No comment provided by engineer. */
"For console" = "Für Konsole";
/* No comment provided by engineer. */
"French interface" = "Französische Bedienoberfläche";
/* No comment provided by engineer. */
"Full link" = "Vollständiger Link";
@@ -1310,6 +1364,9 @@
/* 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 (%@).";
/* No comment provided by engineer. */
"Italian interface" = "Italienische Bedienoberfläche";
/* No comment provided by engineer. */
"italic" = "kursiv";
@@ -1364,6 +1421,9 @@
/* No comment provided by engineer. */
"Local name" = "Lokaler Name";
/* No comment provided by engineer. */
"Local profile data only" = "Nur lokale Profildaten";
/* No comment provided by engineer. */
"Make a private connection" = "Stellen Sie eine private Verbindung her";
@@ -1415,6 +1475,9 @@
/* No comment provided by engineer. */
"Message delivery error" = "Fehler bei der Nachrichtenzustellung";
/* No comment provided by engineer. */
"Message draft" = "Nachrichtenentwurf";
/* notification */
"message received" = "Nachricht empfangen";
@@ -1439,9 +1502,15 @@
/* call status */
"missed call" = "Anruf verpasst";
/* No comment provided by engineer. */
"More improvements are coming soon!" = "Weitere Verbesserungen sind bald verfügbar!";
/* No comment provided by engineer. */
"Most likely this contact has deleted the connection with you." = "Dieser Kontakt hat sehr wahrscheinlich die Verbindung mit Ihnen gelöscht.";
/* No comment provided by engineer. */
"Multiple chat profiles" = "Mehrere Chat-Profile";
/* No comment provided by engineer. */
"Mute" = "Stummschalten";
@@ -1623,6 +1692,9 @@
/* No comment provided by engineer. */
"Periodically" = "Periodisch";
/* No comment provided by engineer. */
"PING count" = "PING Zähler";
/* No comment provided by engineer. */
"PING interval" = "PING-Intervall";
@@ -1656,6 +1728,9 @@
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Der Fingerabdruck des Zertifikats in der Serveradresse ist wahrscheinlich ungültig";
/* No comment provided by engineer. */
"Preserve the last message draft, with attachments." = "Den letzten Nachrichtenentwurf, auch mit seinen Anhängen, aufbewahren.";
/* No comment provided by engineer. */
"Preset server" = "Voreingestellter Server";
@@ -1668,6 +1743,12 @@
/* No comment provided by engineer. */
"Privacy redefined" = "Datenschutz neu definiert";
/* No comment provided by engineer. */
"Private filenames" = "Neutrale Dateinamen";
/* No comment provided by engineer. */
"Profile and server connections" = "Profil und Serververbindungen";
/* No comment provided by engineer. */
"Profile image" = "Profilbild";
@@ -1719,6 +1800,9 @@
/* No comment provided by engineer. */
"Recipients see updates as you type them." = "Die Empfänger sehen Nachrichtenaktualisierungen, während Sie sie eingeben.";
/* No comment provided by engineer. */
"Reduced battery usage" = "Reduzierter Batterieverbrauch";
/* reject incoming call via notification */
"Reject" = "Ablehnen";
@@ -2067,6 +2151,12 @@
/* No comment provided by engineer. */
"Thank you for installing SimpleX Chat!" = "Vielen Dank, dass Sie SimpleX Chat installiert haben!";
/* No comment provided by engineer. */
"Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" = "Dank der Nutzer - [Tragen Sie per Weblate bei](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!";
/* No comment provided by engineer. */
"Thanks to the users contribute via Weblate!" = "Dank der Nutzer - Tragen Sie per Weblate bei!";
/* No comment provided by engineer. */
"The 1st platform without any user identifiers private by design." = "Die erste Plattform ohne Benutzerkennungen Privat per Design.";
@@ -2103,6 +2193,9 @@
/* No comment provided by engineer. */
"The sender will NOT be notified" = "Der Absender wird NICHT benachrichtigt";
/* No comment provided by engineer. */
"The servers for new connections of your current chat profile **%@**." = "Server der neuen Verbindungen von Ihrem aktuellen Chat-Profil **%@**.";
/* No comment provided by engineer. */
"Theme" = "Design";
@@ -2124,6 +2217,9 @@
/* No comment provided by engineer. */
"This group no longer exists." = "Diese Gruppe existiert nicht mehr.";
/* 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 **%@**.";
/* No comment provided by engineer. */
"To ask any questions and to receive updates:" = "Um Fragen zu stellen und Aktualisierungen zu erhalten:";
@@ -2139,6 +2235,9 @@
/* No comment provided by engineer. */
"To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." = "Zum Schutz Ihrer Privatsphäre verwendet SimpleX an Stelle von Benutzerkennungen, die von allen anderen Plattformen verwendet werden, Kennungen für Nachrichtenwarteschlangen, die für jeden Ihrer Kontakte individuell sind.";
/* No comment provided by engineer. */
"To protect timezone, image/voice files use UTC." = "Bild- und Sprachdateinamen enthalten UTC, um Informationen zur Zeitzone zu schützen.";
/* No comment provided by engineer. */
"To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Um Ihre Informationen zu schützen, schalten Sie die SimpleX Sperre ein.\nSie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funktion aktiviert wird.";
@@ -2152,7 +2251,7 @@
"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. */
"Transfer images faster" = "Bilder schneller übertragen";
"Transport isolation" = "Transport-Isolation";
/* No comment provided by engineer. */
"Trying to connect to the server used to receive messages from this contact (error: %@)." = "Beim Versuch die Verbindung mit dem Server aufzunehmen, der für den Empfang von Nachrichten mit diesem Kontakt genutzt wird, ist ein Fehler aufgetreten (Fehler: %@).";
@@ -2211,6 +2310,9 @@
/* No comment provided by engineer. */
"Update network settings?" = "Netzwerkeinstellungen aktualisieren?";
/* No comment provided by engineer. */
"Update transport isolation mode?" = "Transport-Isolations-Modus aktualisieren?";
/* rcv group event chat item */
"updated group profile" = "Aktualisiertes Gruppenprofil";
@@ -2235,6 +2337,9 @@
/* No comment provided by engineer. */
"Use SimpleX Chat servers?" = "Verwenden Sie SimpleX Chat Server?";
/* No comment provided by engineer. */
"User profile" = "Benutzerprofil";
/* No comment provided by engineer. */
"Using .onion hosts requires compatible VPN provider." = "Für die Nutzung von .onion-Hosts sind kompatible VPN-Anbieter erforderlich.";
@@ -2343,6 +2448,9 @@
/* No comment provided by engineer. */
"You allow" = "Sie erlauben";
/* No comment provided by engineer. */
"You already have a chat profile with the same display name. Please choose another name." = "Sie haben schon ein Chat-Profil mit dem gleichen Anzeigenamen. Bitte wählen Sie einen anderen Namen aus.";
/* No comment provided by engineer. */
"You are already connected to %@." = "Sie sind bereits mit %@ verbunden.";
@@ -2469,15 +2577,18 @@
/* No comment provided by engineer. */
"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. */
"Your chat profile" = "Mein Chat-Profil";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "Ihr Chat-Profil wird an Gruppenmitglieder gesendet";
/* No comment provided by engineer. */
"Your chat profile will be sent to your contact" = "Ihr Chat-Profil wird an Ihren Kontakt gesendet";
/* No comment provided by engineer. */
"Your chat profiles" = "Meine Chat-Profile";
/* No comment provided by engineer. */
"Your chat profiles are stored locally, only on your device." = "Ihre Chat-Profile werden nur lokal auf Ihrem Endgerät gespeichert.";
/* No comment provided by engineer. */
"Your chats" = "Meine Chats";
@@ -2499,6 +2610,9 @@
/* No comment provided by engineer. */
"Your current chat database will be DELETED and REPLACED with the imported one." = "Ihre aktuelle Chat-Datenbank wird GELÖSCHT und durch die Importierte ERSETZT.";
/* No comment provided by engineer. */
"Your current profile" = "Mein aktuelles Chat-Profil";
/* No comment provided by engineer. */
"Your ICE servers" = "Ihre ICE-Server";

View File

@@ -196,6 +196,12 @@
/* No comment provided by engineer. */
"A random profile will be sent to your contact" = "Un profil aléatoire sera envoyé à votre contact";
/* No comment provided by engineer. */
"A separate TCP connection will be used **for each chat profile you have in the app**." = "Une connexion TCP distincte sera utilisée **pour chaque profil de chat que vous avez dans l'application**.";
/* No comment provided by engineer. */
"A separate TCP connection will be used **for each contact and group member**.\n**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." = "Une connexion TCP distincte sera utilisée **pour chaque contact et membre de groupe**.\n**Veuillez noter** : si vous avez de nombreuses connexions, votre consommation de batterie et de réseau peut être nettement plus élevée et certaines liaisons peuvent échouer.";
/* No comment provided by engineer. */
"About SimpleX" = "À propos de SimpleX";
@@ -230,6 +236,9 @@
/* No comment provided by engineer. */
"Add preset servers" = "Ajouter des serveurs prédéfinis";
/* No comment provided by engineer. */
"Add profile" = "Ajouter un profil";
/* No comment provided by engineer. */
"Add server…" = "Ajouter un serveur…";
@@ -248,6 +257,9 @@
/* No comment provided by engineer. */
"Advanced network settings" = "Paramètres réseau avancés";
/* No comment provided by engineer. */
"All chats and messages will be deleted - this cannot be undone!" = "Toutes les discussions et tous les messages seront supprimés - il est impossible de revenir en arrière !";
/* No comment provided by engineer. */
"All group members will remain connected." = "Tous les membres du groupe resteront connectés.";
@@ -362,6 +374,9 @@
/* No comment provided by engineer. */
"Both you and your contact can send voice messages." = "Vous et votre contact êtes tous deux en mesure d'envoyer des messages vocaux.";
/* 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)." = "Par profil de chat (par défaut) ou [par connexion](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).";
/* No comment provided by engineer. */
"Call already ended!" = "Appel déjà terminé !";
@@ -659,9 +674,6 @@
/* No comment provided by engineer. */
"Dark" = "Sombre";
/* No comment provided by engineer. */
"Data" = "Données";
/* No comment provided by engineer. */
"Database encrypted!" = "Base de données chiffrée !";
@@ -722,6 +734,9 @@
/* No comment provided by engineer. */
"Delete after" = "Supprimer après";
/* No comment provided by engineer. */
"Delete all files" = "Effacer tous les fichiers";
/* No comment provided by engineer. */
"Delete archive" = "Supprimer l'archive";
@@ -747,10 +762,10 @@
"Delete database" = "Supprimer la base de données";
/* No comment provided by engineer. */
"Delete files & media" = "Supprimer les fichiers et médias";
"Delete files and media?" = "Supprimer les fichiers et médias ?";
/* No comment provided by engineer. */
"Delete files and media?" = "Supprimer les fichiers et médias ?";
"Delete files for all chat profiles" = "Effacer les fichiers de tous les profils de chat";
/* chat feature */
"Delete for everyone" = "Supprimer pour tous";
@@ -797,6 +812,9 @@
/* server test step */
"Delete queue" = "Supprimer la file d'attente";
/* No comment provided by engineer. */
"Delete user profile?" = "Supprimer le profil utilisateur ?";
/* deleted chat item */
"deleted" = "supprimé";
@@ -821,6 +839,9 @@
/* No comment provided by engineer. */
"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "L'authentification de l'appareil n'est pas activée. Vous pouvez activer SimpleX Lock via Paramètres, une fois que vous avez activé l'authentification de l'appareil.";
/* No comment provided by engineer. */
"Different names, avatars and transport isolation." = "Différents noms, avatars et mode d'isolation de transport.";
/* connection level description */
"direct" = "direct";
@@ -857,6 +878,9 @@
/* No comment provided by engineer. */
"Do NOT use SimpleX for emergency calls." = "N'utilisez PAS SimpleX pour les appels d'urgence.";
/* No comment provided by engineer. */
"Duplicate display name!" = "Nom d'affichage en double !";
/* integrity error chat item */
"duplicate message" = "message dupliqué";
@@ -971,6 +995,9 @@
/* No comment provided by engineer. */
"Error creating group link" = "Erreur lors de la création du lien du groupe";
/* No comment provided by engineer. */
"Error creating profile!" = "Erreur lors de la création du profil !";
/* No comment provided by engineer. */
"Error deleting chat database" = "Erreur lors de la suppression de la base de données du chat";
@@ -992,6 +1019,9 @@
/* No comment provided by engineer. */
"Error deleting token" = "Erreur lors de la suppression du token";
/* No comment provided by engineer. */
"Error deleting user profile" = "Erreur lors de la suppression du profil utilisateur";
/* No comment provided by engineer. */
"Error enabling notifications" = "Erreur lors de l'activation des notifications";
@@ -1034,6 +1064,9 @@
/* No comment provided by engineer. */
"Error stopping chat" = "Erreur lors de l'arrêt du chat";
/* No comment provided by engineer. */
"Error switching profile!" = "Erreur lors du changement de profil !";
/* No comment provided by engineer. */
"Error updating message" = "Erreur lors de la mise à jour du message";
@@ -1073,9 +1106,15 @@
/* No comment provided by engineer. */
"File: %@" = "Fichier: %@";
/* No comment provided by engineer. */
"Files & media" = "Fichiers & médias";
/* No comment provided by engineer. */
"For console" = "Pour la console";
/* No comment provided by engineer. */
"French interface" = "Interface en français";
/* No comment provided by engineer. */
"Full link" = "Lien entier";
@@ -1325,6 +1364,9 @@
/* 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 (%@)." = "Il semblerait que vous êtes déjà connecté via ce lien. Si ce n'est pas le cas, il y a eu une erreur (%@).";
/* No comment provided by engineer. */
"Italian interface" = "Interface en italien";
/* No comment provided by engineer. */
"italic" = "italique";
@@ -1379,6 +1421,9 @@
/* No comment provided by engineer. */
"Local name" = "Nom local";
/* No comment provided by engineer. */
"Local profile data only" = "Données de profil local uniquement";
/* No comment provided by engineer. */
"Make a private connection" = "Établir une connexion privée";
@@ -1430,6 +1475,9 @@
/* No comment provided by engineer. */
"Message delivery error" = "Erreur de distribution du message";
/* No comment provided by engineer. */
"Message draft" = "Brouillon de message";
/* notification */
"message received" = "message reçu";
@@ -1454,9 +1502,15 @@
/* call status */
"missed call" = "appel manqué";
/* No comment provided by engineer. */
"More improvements are coming soon!" = "Plus d'améliorations à venir !";
/* No comment provided by engineer. */
"Most likely this contact has deleted the connection with you." = "Il est fort probable que ce contact ait supprimé la connexion avec vous.";
/* No comment provided by engineer. */
"Multiple chat profiles" = "Différents profils de chat";
/* No comment provided by engineer. */
"Mute" = "Muet";
@@ -1612,7 +1666,7 @@
"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 chattez avec les développeurs";
"or chat with the developers" = "ou ici pour discuter avec les développeurs";
/* member role */
"owner" = "propriétaire";
@@ -1674,6 +1728,9 @@
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Il est possible que l'empreinte du certificat dans l'adresse du serveur soit incorrecte";
/* No comment provided by engineer. */
"Preserve the last message draft, with attachments." = "Conserver le brouillon du dernier message, avec les pièces jointes.";
/* No comment provided by engineer. */
"Preset server" = "Serveur prédéfini";
@@ -1686,6 +1743,12 @@
/* No comment provided by engineer. */
"Privacy redefined" = "La vie privée redéfinie";
/* No comment provided by engineer. */
"Private filenames" = "Noms de fichiers privés";
/* No comment provided by engineer. */
"Profile and server connections" = "Profil et connexions au serveur";
/* No comment provided by engineer. */
"Profile image" = "Image de profil";
@@ -1737,6 +1800,9 @@
/* No comment provided by engineer. */
"Recipients see updates as you type them." = "Les destinataires voient les mises à jour au fur et à mesure que vous les tapez.";
/* No comment provided by engineer. */
"Reduced battery usage" = "Réduction de la consommation de batterie";
/* reject incoming call via notification */
"Reject" = "Rejeter";
@@ -2056,7 +2122,7 @@
"Tap to join incognito" = "Appuyez pour rejoindre incognito";
/* No comment provided by engineer. */
"Tap to start a new chat" = "Appuyez pour commencer un nouveau chat";
"Tap to start a new chat" = "Appuyez ici pour démarrer une nouvelle discussion";
/* No comment provided by engineer. */
"TCP connection timeout" = "Délai de connexion TCP";
@@ -2085,6 +2151,12 @@
/* No comment provided by engineer. */
"Thank you for installing SimpleX Chat!" = "Merci d'avoir installé SimpleX Chat!";
/* No comment provided by engineer. */
"Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" = "Merci aux utilisateurs - [contribuer via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps) !";
/* No comment provided by engineer. */
"Thanks to the users contribute via Weblate!" = "Merci aux utilisateurs - contribuez via Weblate !";
/* No comment provided by engineer. */
"The 1st platform without any user identifiers private by design." = "La 1ère plateforme sans aucun identifiant d'utilisateur privée par design.";
@@ -2121,6 +2193,9 @@
/* No comment provided by engineer. */
"The sender will NOT be notified" = "L'expéditeur N'en sera PAS informé";
/* No comment provided by engineer. */
"The servers for new connections of your current chat profile **%@**." = "Les serveurs pour les nouvelles connexions de votre profil de chat actuel **%@**.";
/* No comment provided by engineer. */
"Theme" = "Thème";
@@ -2142,6 +2217,9 @@
/* No comment provided by engineer. */
"This group no longer exists." = "Ce groupe n'existe plus.";
/* 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 **%@**.";
/* No comment provided by engineer. */
"To ask any questions and to receive updates:" = "Si vous avez des questions et que vous souhaitez des réponses :";
@@ -2157,6 +2235,9 @@
/* No comment provided by engineer. */
"To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." = "Pour protéger votre vie privée, au lieu dIDs utilisés par toutes les autres plateformes, SimpleX a des IDs pour les queues de messages, distinctes pour chacun de vos contacts.";
/* No comment provided by engineer. */
"To protect timezone, image/voice files use UTC." = "Pour préserver le fuseau horaire, les fichiers image/voix utilisent le système UTC.";
/* No comment provided by engineer. */
"To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Pour protéger vos informations, activez la fonction SimpleX Lock.\nVous serez invité à confirmer l'authentification avant que cette fonction ne soit activée.";
@@ -2170,7 +2251,7 @@
"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Pour vérifier le chiffrement de bout en bout avec votre contact, comparez (ou scannez) le code sur vos appareils.";
/* No comment provided by engineer. */
"Transfer images faster" = "Transfert d'images plus rapide";
"Transport isolation" = "Isolement du transport";
/* No comment provided by engineer. */
"Trying to connect to the server used to receive messages from this contact (error: %@)." = "Tentative de connexion au serveur utilisé pour recevoir les messages de ce contact (erreur : %@).";
@@ -2229,6 +2310,9 @@
/* No comment provided by engineer. */
"Update network settings?" = "Mettre à jour les paramètres réseau ?";
/* No comment provided by engineer. */
"Update transport isolation mode?" = "Mettre à jour le mode d'isolation du transport ?";
/* rcv group event chat item */
"updated group profile" = "mise à jour du profil de groupe";
@@ -2253,6 +2337,9 @@
/* No comment provided by engineer. */
"Use SimpleX Chat servers?" = "Utiliser les serveurs SimpleX Chat?";
/* No comment provided by engineer. */
"User profile" = "Profil d'utilisateur";
/* No comment provided by engineer. */
"Using .onion hosts requires compatible VPN provider." = "L'utilisation des hôtes .onion nécessite un fournisseur VPN compatible.";
@@ -2361,6 +2448,9 @@
/* No comment provided by engineer. */
"You allow" = "Vous autorisez";
/* No comment provided by engineer. */
"You already have a chat profile with the same display name. Please choose another name." = "Vous avez déjà un profil de chat avec ce même nom affiché. Veuillez choisir un autre nom.";
/* No comment provided by engineer. */
"You are already connected to %@." = "Vous êtes déjà connecté·e à %@ via ce lien.";
@@ -2487,15 +2577,18 @@
/* 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.";
/* No comment provided by engineer. */
"Your chat profile" = "Votre profil de chat";
/* 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. */
"Your chat profile will be sent to your contact" = "Votre profil de chat sera envoyé à votre contact";
/* No comment provided by engineer. */
"Your chat profiles" = "Vos profils de chat";
/* No comment provided by engineer. */
"Your chat profiles are stored locally, only on your device." = "Vos profils de chat sont stockés localement, uniquement sur votre appareil.";
/* No comment provided by engineer. */
"Your chats" = "Vos chats";
@@ -2517,6 +2610,9 @@
/* No comment provided by engineer. */
"Your current chat database will be DELETED and REPLACED with the imported one." = "Votre base de données de chat actuelle va être SUPPRIMEE et REMPLACEE par celle importée.";
/* No comment provided by engineer. */
"Your current profile" = "Votre profil actuel";
/* No comment provided by engineer. */
"Your ICE servers" = "Vos serveurs ICE";

View File

@@ -196,6 +196,12 @@
/* No comment provided by engineer. */
"A random profile will be sent to your contact" = "Verrà inviato un profilo casuale al tuo contatto";
/* No comment provided by engineer. */
"A separate TCP connection will be used **for each chat profile you have in the app**." = "Verrà usata una connessione TCP separata **per ogni profilo di chat presente nell'app**.";
/* No comment provided by engineer. */
"A separate TCP connection will be used **for each contact and group member**.\n**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." = "Verrà usata una connessione TCP separata **per ogni contatto e membro del gruppo**.\n** Nota**: se hai molte connessioni, il consumo di batteria e traffico può essere notevolmente superiore e alcune connessioni potrebbero fallire.";
/* No comment provided by engineer. */
"About SimpleX" = "Riguardo SimpleX";
@@ -230,6 +236,9 @@
/* No comment provided by engineer. */
"Add preset servers" = "Aggiungi server preimpostati";
/* No comment provided by engineer. */
"Add profile" = "Aggiungi profilo";
/* No comment provided by engineer. */
"Add server…" = "Aggiungi server…";
@@ -248,6 +257,9 @@
/* No comment provided by engineer. */
"Advanced network settings" = "Impostazioni di rete avanzate";
/* No comment provided by engineer. */
"All chats and messages will be deleted - this cannot be undone!" = "Tutte le chat e i messaggi verranno eliminati. Non è reversibile!";
/* No comment provided by engineer. */
"All group members will remain connected." = "Tutti i membri del gruppo resteranno connessi.";
@@ -362,6 +374,9 @@
/* No comment provided by engineer. */
"Both you and your contact can send voice messages." = "Sia tu che il tuo contatto potete inviare messaggi vocali.";
/* 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 profilo di chat (predefinito) o [per connessione](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).";
/* No comment provided by engineer. */
"Call already ended!" = "Chiamata già terminata!";
@@ -465,7 +480,7 @@
"Choose from library" = "Scegli dalla libreria";
/* No comment provided by engineer. */
"Clear" = "Annulla";
"Clear" = "Svuota";
/* No comment provided by engineer. */
"Clear conversation" = "Svuota conversazione";
@@ -659,9 +674,6 @@
/* No comment provided by engineer. */
"Dark" = "Scuro";
/* No comment provided by engineer. */
"Data" = "Dati";
/* No comment provided by engineer. */
"Database encrypted!" = "Database crittografato!";
@@ -722,6 +734,9 @@
/* No comment provided by engineer. */
"Delete after" = "Elimina dopo";
/* No comment provided by engineer. */
"Delete all files" = "Elimina tutti i file";
/* No comment provided by engineer. */
"Delete archive" = "Elimina archivio";
@@ -747,10 +762,10 @@
"Delete database" = "Elimina database";
/* No comment provided by engineer. */
"Delete files & media" = "Elimina file e multimediali";
"Delete files and media?" = "Eliminare i file e i multimediali?";
/* No comment provided by engineer. */
"Delete files and media?" = "Eliminare i file e i multimediali?";
"Delete files for all chat profiles" = "Elimina i file per tutti i profili di chat";
/* chat feature */
"Delete for everyone" = "Elimina per tutti";
@@ -797,6 +812,9 @@
/* server test step */
"Delete queue" = "Elimina coda";
/* No comment provided by engineer. */
"Delete user profile?" = "Eliminare il profilo utente?";
/* deleted chat item */
"deleted" = "eliminato";
@@ -821,6 +839,9 @@
/* No comment provided by engineer. */
"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "L'autenticazione del dispositivo non è abilitata. Puoi attivare SimpleX Lock tramite le impostazioni, dopo aver abilitato l'autenticazione del dispositivo.";
/* No comment provided by engineer. */
"Different names, avatars and transport isolation." = "Nomi e avatar diversi, isolamento del trasporto.";
/* connection level description */
"direct" = "diretta";
@@ -857,6 +878,9 @@
/* No comment provided by engineer. */
"Do NOT use SimpleX for emergency calls." = "NON usare SimpleX per chiamate di emergenza.";
/* No comment provided by engineer. */
"Duplicate display name!" = "Nome da mostrare doppio!";
/* integrity error chat item */
"duplicate message" = "messaggio duplicato";
@@ -971,6 +995,9 @@
/* No comment provided by engineer. */
"Error creating group link" = "Errore nella creazione del link del gruppo";
/* No comment provided by engineer. */
"Error creating profile!" = "Errore nella creazione del profilo!";
/* No comment provided by engineer. */
"Error deleting chat database" = "Errore nell'eliminazione del database della chat";
@@ -992,6 +1019,9 @@
/* No comment provided by engineer. */
"Error deleting token" = "Errore nell'eliminazione del token";
/* No comment provided by engineer. */
"Error deleting user profile" = "Errore nell'eliminazione del profilo utente";
/* No comment provided by engineer. */
"Error enabling notifications" = "Errore nell'attivazione delle notifiche";
@@ -1034,6 +1064,9 @@
/* No comment provided by engineer. */
"Error stopping chat" = "Errore nell'interruzione della chat";
/* No comment provided by engineer. */
"Error switching profile!" = "Errore nel cambio di profilo!";
/* No comment provided by engineer. */
"Error updating message" = "Errore nell'aggiornamento del messaggio";
@@ -1073,9 +1106,15 @@
/* No comment provided by engineer. */
"File: %@" = "File: %@";
/* No comment provided by engineer. */
"Files & media" = "File e multimediali";
/* No comment provided by engineer. */
"For console" = "Per console";
/* No comment provided by engineer. */
"French interface" = "Interfaccia francese";
/* No comment provided by engineer. */
"Full link" = "Link completo";
@@ -1325,6 +1364,9 @@
/* 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 (%@)." = "Sembra che tu sia già connesso tramite questo link. In caso contrario, c'è stato un errore (%@).";
/* No comment provided by engineer. */
"Italian interface" = "Interfaccia italiana";
/* No comment provided by engineer. */
"italic" = "corsivo";
@@ -1379,6 +1421,9 @@
/* No comment provided by engineer. */
"Local name" = "Nome locale";
/* No comment provided by engineer. */
"Local profile data only" = "Solo dati del profilo locale";
/* No comment provided by engineer. */
"Make a private connection" = "Crea una connessione privata";
@@ -1430,6 +1475,9 @@
/* No comment provided by engineer. */
"Message delivery error" = "Errore di recapito del messaggio";
/* No comment provided by engineer. */
"Message draft" = "Bozza dei messaggi";
/* notification */
"message received" = "messaggio ricevuto";
@@ -1454,9 +1502,15 @@
/* call status */
"missed call" = "chiamata persa";
/* No comment provided by engineer. */
"More improvements are coming soon!" = "Altri miglioramenti sono in arrivo!";
/* No comment provided by engineer. */
"Most likely this contact has deleted the connection with you." = "Probabilmente questo contatto ha eliminato la connessione con te.";
/* No comment provided by engineer. */
"Multiple chat profiles" = "Profili di chat multipli";
/* No comment provided by engineer. */
"Mute" = "Silenzia";
@@ -1674,6 +1728,9 @@
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Probabilmente l'impronta del certificato nell'indirizzo del server è sbagliata";
/* No comment provided by engineer. */
"Preserve the last message draft, with attachments." = "Conserva la bozza dell'ultimo messaggio, con gli allegati.";
/* No comment provided by engineer. */
"Preset server" = "Server preimpostato";
@@ -1686,6 +1743,12 @@
/* No comment provided by engineer. */
"Privacy redefined" = "Privacy ridefinita";
/* No comment provided by engineer. */
"Private filenames" = "Nomi di file privati";
/* No comment provided by engineer. */
"Profile and server connections" = "Profilo e connessioni al server";
/* No comment provided by engineer. */
"Profile image" = "Immagine del profilo";
@@ -1737,6 +1800,9 @@
/* No comment provided by engineer. */
"Recipients see updates as you type them." = "I destinatari vedono gli aggiornamenti mentre li digiti.";
/* No comment provided by engineer. */
"Reduced battery usage" = "Consumo di batteria ridotto";
/* reject incoming call via notification */
"Reject" = "Rifiuta";
@@ -2085,6 +2151,12 @@
/* No comment provided by engineer. */
"Thank you for installing SimpleX Chat!" = "Grazie per aver installato SimpleX Chat!";
/* No comment provided by engineer. */
"Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" = "Grazie agli utenti [contribuite via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!";
/* No comment provided by engineer. */
"Thanks to the users contribute via Weblate!" = "Grazie agli utenti contribuite via Weblate!";
/* No comment provided by engineer. */
"The 1st platform without any user identifiers private by design." = "La prima piattaforma senza alcun identificatore utente privata by design.";
@@ -2121,6 +2193,9 @@
/* No comment provided by engineer. */
"The sender will NOT be notified" = "Il mittente NON verrà avvisato";
/* No comment provided by engineer. */
"The servers for new connections of your current chat profile **%@**." = "I server per le nuove connessioni del profilo di chat attuale **%@**.";
/* No comment provided by engineer. */
"Theme" = "Tema";
@@ -2142,6 +2217,9 @@
/* No comment provided by engineer. */
"This group no longer exists." = "Questo gruppo non esiste più.";
/* 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 **%@**.";
/* No comment provided by engineer. */
"To ask any questions and to receive updates:" = "Per porre domande e ricevere aggiornamenti:";
@@ -2157,6 +2235,9 @@
/* No comment provided by engineer. */
"To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." = "Per proteggere la privacy, invece degli ID utente utilizzati da tutte le altre piattaforme, SimpleX ha identificatori per le code di messaggi, separati per ciascuno dei tuoi contatti.";
/* No comment provided by engineer. */
"To protect timezone, image/voice files use UTC." = "Per proteggere il fuso orario, i file immagine/vocali usano UTC.";
/* No comment provided by engineer. */
"To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Per proteggere le tue informazioni, attiva SimpleX Lock.\nTi verrà chiesto di completare l'autenticazione prima di attivare questa funzionalità.";
@@ -2170,7 +2251,7 @@
"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Per verificare la crittografia end-to-end con il tuo contatto, confrontate (o scansionate) il codice sui vostri dispositivi.";
/* No comment provided by engineer. */
"Transfer images faster" = "Trasferisci immagini più velocemente";
"Transport isolation" = "Isolamento del trasporto";
/* No comment provided by engineer. */
"Trying to connect to the server used to receive messages from this contact (error: %@)." = "Tentativo di connessione al server usato per ricevere messaggi da questo contatto (errore: %@).";
@@ -2229,6 +2310,9 @@
/* No comment provided by engineer. */
"Update network settings?" = "Aggiornare le impostazioni di rete?";
/* No comment provided by engineer. */
"Update transport isolation mode?" = "Aggiornare la modalità di isolamento del trasporto?";
/* rcv group event chat item */
"updated group profile" = "profilo del gruppo aggiornato";
@@ -2253,6 +2337,9 @@
/* No comment provided by engineer. */
"Use SimpleX Chat servers?" = "Usare i server di SimpleX Chat?";
/* No comment provided by engineer. */
"User profile" = "Profilo utente";
/* No comment provided by engineer. */
"Using .onion hosts requires compatible VPN provider." = "L'uso di host .onion richiede un fornitore di VPN compatibile.";
@@ -2361,6 +2448,9 @@
/* No comment provided by engineer. */
"You allow" = "Lo consenti";
/* No comment provided by engineer. */
"You already have a chat profile with the same display name. Please choose another name." = "Hai già un profilo chat con lo stesso nome da mostrare. Scegli un altro nome.";
/* No comment provided by engineer. */
"You are already connected to %@." = "Sei già connesso/a a %@.";
@@ -2487,15 +2577,18 @@
/* 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.";
/* No comment provided by engineer. */
"Your chat profile" = "Il tuo profilo di chat";
/* 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. */
"Your chat profile will be sent to your contact" = "Il tuo profilo di chat verrà inviato al tuo contatto";
/* No comment provided by engineer. */
"Your chat profiles" = "I tuoi profili di chat";
/* No comment provided by engineer. */
"Your chat profiles are stored locally, only on your device." = "I tuoi profili di chat sono memorizzati localmente, solo sul tuo dispositivo.";
/* No comment provided by engineer. */
"Your chats" = "Le tue chat";
@@ -2517,6 +2610,9 @@
/* No comment provided by engineer. */
"Your current chat database will be DELETED and REPLACED with the imported one." = "Il tuo attuale database della chat verrà ELIMINATO e SOSTITUITO con quello importato.";
/* No comment provided by engineer. */
"Your current profile" = "Il tuo profilo attuale";
/* No comment provided by engineer. */
"Your ICE servers" = "I tuoi server ICE";

View File

@@ -196,6 +196,12 @@
/* No comment provided by engineer. */
"A random profile will be sent to your contact" = "Вашему контакту будет отправлен случайный профиль";
/* No comment provided by engineer. */
"A separate TCP connection will be used **for each chat profile you have in the app**." = "Отдельное TCP-соединение будет использоваться **для каждого профиля чата, который вы имеете в приложении**.";
/* No comment provided by engineer. */
"A separate TCP connection will be used **for each contact and group member**.\n**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." = "Отдельное TCP-соединение (и авторизация SOCKS) будет использоваться **для каждого контакта и члена группы**.\n**Обратите внимание**: если у вас много контактов, потребление батареи и трафика может быть значительно выше, и некоторые соединения могут не работать.";
/* No comment provided by engineer. */
"About SimpleX" = "О SimpleX";
@@ -230,6 +236,9 @@
/* No comment provided by engineer. */
"Add preset servers" = "Добавить серверы по умолчанию";
/* No comment provided by engineer. */
"Add profile" = "Добавить профиль";
/* No comment provided by engineer. */
"Add server…" = "Добавить сервер…";
@@ -248,6 +257,9 @@
/* No comment provided by engineer. */
"Advanced network settings" = "Настройки сети";
/* No comment provided by engineer. */
"All chats and messages will be deleted - this cannot be undone!" = "Все чаты и сообщения будут удалены - это нельзя отменить!";
/* No comment provided by engineer. */
"All group members will remain connected." = "Все члены группы, которые соединились через эту ссылку, останутся в группе.";
@@ -302,9 +314,18 @@
/* No comment provided by engineer. */
"Answer call" = "Принять звонок";
/* No comment provided by engineer. */
"App build: %@" = "Сборка приложения: %@";
/* No comment provided by engineer. */
"App icon" = "Иконка";
/* No comment provided by engineer. */
"App version" = "Версия приложения";
/* No comment provided by engineer. */
"App version: v%@" = "Версия приложения: v%@";
/* No comment provided by engineer. */
"Appearance" = "Интерфейс";
@@ -353,6 +374,9 @@
/* No comment provided by engineer. */
"Both you and your contact can send voice messages." = "Вы и ваш контакт можете отправлять голосовые сообщения.";
/* 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) (БЕТА).";
/* No comment provided by engineer. */
"Call already ended!" = "Звонок уже завершен!";
@@ -605,6 +629,12 @@
/* chat item action */
"Copy" = "Скопировать";
/* No comment provided by engineer. */
"Core built at: %@" = "Ядро скомпилировано: %@";
/* No comment provided by engineer. */
"Core version: v%@" = "Версия ядра: v%@";
/* No comment provided by engineer. */
"Create" = "Создать";
@@ -644,9 +674,6 @@
/* No comment provided by engineer. */
"Dark" = "Тёмная";
/* No comment provided by engineer. */
"Data" = "Данные";
/* No comment provided by engineer. */
"Database encrypted!" = "База данных зашифрована!";
@@ -707,6 +734,9 @@
/* No comment provided by engineer. */
"Delete after" = "Удалять через";
/* No comment provided by engineer. */
"Delete all files" = "Удалить все файлы";
/* No comment provided by engineer. */
"Delete archive" = "Удалить архив";
@@ -732,10 +762,10 @@
"Delete database" = "Удалить данные чата";
/* No comment provided by engineer. */
"Delete files & media" = "Удалить файлы и медиа";
"Delete files and media?" = "Удалить файлы и медиа?";
/* No comment provided by engineer. */
"Delete files and media?" = "Удалить файлы и медиа?";
"Delete files for all chat profiles" = "Удалить файлы во всех профилях чата";
/* chat feature */
"Delete for everyone" = "Удалить для всех";
@@ -782,6 +812,9 @@
/* server test step */
"Delete queue" = "Удаление очереди";
/* No comment provided by engineer. */
"Delete user profile?" = "Удалить профиль пользователя?";
/* deleted chat item */
"deleted" = "удалено";
@@ -806,6 +839,9 @@
/* No comment provided by engineer. */
"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "Аутентификация устройства не включена. Вы можете включить блокировку SimpleX в Настройках после включения аутентификации.";
/* No comment provided by engineer. */
"Different names, avatars and transport isolation." = "Разные имена, аватары и транспортные сессии.";
/* connection level description */
"direct" = "прямое";
@@ -842,6 +878,9 @@
/* No comment provided by engineer. */
"Do NOT use SimpleX for emergency calls." = "Не используйте SimpleX для экстренных звонков.";
/* No comment provided by engineer. */
"Duplicate display name!" = "Имя профиля уже используется!";
/* integrity error chat item */
"duplicate message" = "повторное сообщение";
@@ -956,6 +995,9 @@
/* No comment provided by engineer. */
"Error creating group link" = "Ошибка при создании ссылки группы";
/* No comment provided by engineer. */
"Error creating profile!" = "Ошибка создания профиля!";
/* No comment provided by engineer. */
"Error deleting chat database" = "Ошибка при удалении данных чата";
@@ -977,6 +1019,9 @@
/* No comment provided by engineer. */
"Error deleting token" = "Ошибка удаления токена";
/* No comment provided by engineer. */
"Error deleting user profile" = "Ошибка удаления профиля пользователя";
/* No comment provided by engineer. */
"Error enabling notifications" = "Ошибка при включении уведомлений";
@@ -1019,6 +1064,9 @@
/* No comment provided by engineer. */
"Error stopping chat" = "Ошибка при остановке чата";
/* No comment provided by engineer. */
"Error switching profile!" = "Ошибка выбора профиля!";
/* No comment provided by engineer. */
"Error updating message" = "Ошибка при обновлении сообщения";
@@ -1058,9 +1106,15 @@
/* No comment provided by engineer. */
"File: %@" = "Файл: %@";
/* No comment provided by engineer. */
"Files & media" = "Файлы и медиа";
/* No comment provided by engineer. */
"For console" = "Для консоли";
/* No comment provided by engineer. */
"French interface" = "Французский интерфейс";
/* No comment provided by engineer. */
"Full link" = "Полная ссылка";
@@ -1310,6 +1364,9 @@
/* 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 (%@)." = "Возможно, вы уже соединились через эту ссылку. Если это не так, то это ошибка (%@).";
/* No comment provided by engineer. */
"Italian interface" = "Итальянский интерфейс";
/* No comment provided by engineer. */
"italic" = "курсив";
@@ -1364,6 +1421,9 @@
/* No comment provided by engineer. */
"Local name" = "Локальное имя";
/* No comment provided by engineer. */
"Local profile data only" = "Только локальные данные профиля";
/* No comment provided by engineer. */
"Make a private connection" = "Добавьте контакт";
@@ -1415,6 +1475,9 @@
/* No comment provided by engineer. */
"Message delivery error" = "Ошибка доставки сообщения";
/* No comment provided by engineer. */
"Message draft" = "Черновик сообщения";
/* notification */
"message received" = "получено сообщение";
@@ -1439,9 +1502,15 @@
/* call status */
"missed call" = "пропущенный звонок";
/* No comment provided by engineer. */
"More improvements are coming soon!" = "Дополнительные улучшения скоро!";
/* No comment provided by engineer. */
"Most likely this contact has deleted the connection with you." = "Скорее всего, этот контакт удалил соединение с вами.";
/* No comment provided by engineer. */
"Multiple chat profiles" = "Много профилей чата";
/* No comment provided by engineer. */
"Mute" = "Без звука";
@@ -1623,6 +1692,9 @@
/* No comment provided by engineer. */
"Periodically" = "Периодически";
/* No comment provided by engineer. */
"PING count" = "Количество PING";
/* No comment provided by engineer. */
"PING interval" = "Интервал PING";
@@ -1656,6 +1728,9 @@
/* server test error */
"Possibly, certificate fingerprint in server address is incorrect" = "Возможно, хэш сертификата в адресе сервера неверный";
/* No comment provided by engineer. */
"Preserve the last message draft, with attachments." = "Сохранить последний черновик, вместе с вложениями.";
/* No comment provided by engineer. */
"Preset server" = "Сервер по умолчанию";
@@ -1668,6 +1743,12 @@
/* No comment provided by engineer. */
"Privacy redefined" = "Более конфиденциальный";
/* No comment provided by engineer. */
"Private filenames" = "Защищенные имена файлов";
/* No comment provided by engineer. */
"Profile and server connections" = "Профиль и соединения на сервере";
/* No comment provided by engineer. */
"Profile image" = "Аватар";
@@ -1719,6 +1800,9 @@
/* No comment provided by engineer. */
"Recipients see updates as you type them." = "Получатели видят их в то время как вы их набираете.";
/* No comment provided by engineer. */
"Reduced battery usage" = "Уменьшенное потребление батареи";
/* reject incoming call via notification */
"Reject" = "Отклонить";
@@ -2067,6 +2151,12 @@
/* No comment provided by engineer. */
"Thank you for installing SimpleX Chat!" = "Спасибо, что установили SimpleX Chat!";
/* No comment provided by engineer. */
"Thanks to the users [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" = "Благодаря пользователям [добавьте переводы через Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!";
/* No comment provided by engineer. */
"Thanks to the users contribute via Weblate!" = "Благодаря пользователям добавьте переводы через Weblate!";
/* No comment provided by engineer. */
"The 1st platform without any user identifiers private by design." = "Первая в мире платформа без идентификаторов пользователей.";
@@ -2103,6 +2193,9 @@
/* No comment provided by engineer. */
"The sender will NOT be notified" = "Отправитель не будет уведомлён";
/* No comment provided by engineer. */
"The servers for new connections of your current chat profile **%@**." = "Серверы для новых соединений вашего текущего профиля чата **%@**.";
/* No comment provided by engineer. */
"Theme" = "Тема";
@@ -2124,6 +2217,9 @@
/* No comment provided by engineer. */
"This group no longer exists." = "Эта группа больше не существует.";
/* No comment provided by engineer. */
"This setting applies to messages in your current chat profile **%@**." = "Эта настройка применяется к сообщениям в вашем текущем профиле чата **%@**.";
/* No comment provided by engineer. */
"To ask any questions and to receive updates:" = "Чтобы задать вопросы и получать уведомления о новых версиях,";
@@ -2139,6 +2235,9 @@
/* No comment provided by engineer. */
"To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." = "Чтобы защитить вашу конфиденциальность, вместо ID пользователей, которые есть в других платформах, SimpleX использует ID для очередей сообщений, разные для каждого контакта.";
/* No comment provided by engineer. */
"To protect timezone, image/voice files use UTC." = "Чтобы защитить ваш часовой пояс, файлы картинок и голосовых сообщений используют UTC.";
/* No comment provided by engineer. */
"To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Чтобы защитить вашу информацию, включите блокировку SimpleX Chat.\nВам будет нужно пройти аутентификацию для включения блокировки.";
@@ -2152,7 +2251,7 @@
"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Чтобы подтвердить end-to-end шифрование с вашим контактом сравните (или сканируйте) код безопасности на ваших устройствах.";
/* No comment provided by engineer. */
"Transfer images faster" = "Передавать изображения быстрее";
"Transport isolation" = "Отдельные сессии для";
/* No comment provided by engineer. */
"Trying to connect to the server used to receive messages from this contact (error: %@)." = "Устанавливается соединение с сервером, через который вы получаете сообщения от этого контакта (ошибка: %@).";
@@ -2211,6 +2310,9 @@
/* No comment provided by engineer. */
"Update network settings?" = "Обновить настройки сети?";
/* No comment provided by engineer. */
"Update transport isolation mode?" = "Обновить режим отдельных сессий?";
/* rcv group event chat item */
"updated group profile" = "обновил(а) профиль группы";
@@ -2235,6 +2337,9 @@
/* No comment provided by engineer. */
"Use SimpleX Chat servers?" = "Использовать серверы предосталенные SimpleX Chat?";
/* No comment provided by engineer. */
"User profile" = "Профиль чата";
/* No comment provided by engineer. */
"Using .onion hosts requires compatible VPN provider." = "Для использования .onion хостов требуется совместимый VPN провайдер.";
@@ -2343,6 +2448,9 @@
/* No comment provided by engineer. */
"You allow" = "Вы разрешаете";
/* No comment provided by engineer. */
"You already have a chat profile with the same display name. Please choose another name." = "У вас уже есть профиль с таким именем. Пожалуйста, выберите другое имя.";
/* No comment provided by engineer. */
"You are already connected to %@." = "Вы уже соединены с контактом %@.";
@@ -2469,15 +2577,18 @@
/* No comment provided by engineer. */
"Your chat database is not encrypted - set passphrase to encrypt it." = "База данных НЕ зашифрована. Установите пароль, чтобы защитить ваши данные.";
/* No comment provided by engineer. */
"Your chat profile" = "Ваш профиль";
/* No comment provided by engineer. */
"Your chat profile will be sent to group members" = "Ваш профиль чата будет отправлен членам группы";
/* No comment provided by engineer. */
"Your chat profile will be sent to your contact" = "Ваш профиль будет отправлен вашему контакту";
/* No comment provided by engineer. */
"Your chat profiles" = "Ваши профили чата";
/* No comment provided by engineer. */
"Your chat profiles are stored locally, only on your device." = "Ваши профили чата хранятся локально, только на вашем устройстве.";
/* No comment provided by engineer. */
"Your chats" = "Ваши чаты";
@@ -2499,6 +2610,9 @@
/* No comment provided by engineer. */
"Your current chat database will be DELETED and REPLACED with the imported one." = "Текущие данные вашего чата будет УДАЛЕНЫ и ЗАМЕНЕНЫ импортированными.";
/* No comment provided by engineer. */
"Your current profile" = "Ваш активный профиль";
/* No comment provided by engineer. */
"Your ICE servers" = "Ваши ICE серверы";

View File

@@ -0,0 +1,122 @@
---
layout: layouts/article.html
title: "SimpleX Chat v4.5 released with multiple chat profiles, message draft, transport isolation and Italian language!"
date: 2023-02-04
image: images/20230204-profiles2.png
imageBottom: true
previewBody: blog_previews/20230204.html
permalink: "/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html"
---
# SimpleX Chat v4.5 released with multiple user profiles, message draft, transport isolation and Italian interface!
**Published:** Feb 4, 2023
## What's new in v4.5
- [multiple chat profiles](#multiple-chat-profiles).
- [message draft](#message-draft).
- [transport isolation](#transport-isolation).
- [reduced battery usage](#reduced-battery-usage).
- [private filenames](#private-filenames).
Also, we added [Italian interface](#italian-interface), thanks to the users' community and Weblate!
### Multiple chat profiles
<img src="./images/20230204-profiles1.png" width="288"> &nbsp;&nbsp; <img src="./images/20230204-profiles2.png" width="288">
Incognito mode added in v3.2 allows to share a random profile name with your new contacts. It is quite popular - more than half of users connecting to our support profile use it. In case when you just want a throw-away profile name that doesn't share any information about you it is more convenient that creating a new profile for each contact manually.
But there are many cases when a disposable profile is not good enough enough, and you want to create separate profiles - one for your family, another for work, yet one more for your online contacts that only know your pseudonym rather than your real name.
Previously this was only possible by using separate chat databases. This version adds a chat profile manager that allows you to create unlimited number of profiles, and very quickly switch them. All these profiles are connected at the same time.
When you delete profile you no longer need you have two options - either delete both profile data on the device and any message queues that this profile created on SMP servers (e.g., when it is more important to leave as few meta-data on the servers), or delete only profile data without making any network requests (when it is more important to delete all data from the device quickly).
While most app settings apply to all profiles, several settings are profile-specific.
You can separately set which SMP servers are used to create the new contacts in each profile (via Network settings). Please note: changing SMP servers in one profile won't affect other profiles, and all new profiles are created with preset servers.
You can also separately set the retention time for messages in each profile (via Database settings).
Also, you have a different contact address in each profile, and different Chat preferences.
All other settings are used for all profiles. While you may want to have different settings for different security levels, it is much better to use different devices in this case.
### Message draft
<img src="./images/20230204-draft1.png" width="288"> &nbsp;&nbsp; <img src="./images/20230204-draft2.png" width="288">
Previously, if you've closed the conversation with unsent message, this message was disappearing. While it might be better for privacy, there are several scenarios when it is very inconvenient:
- you need to compose the message from several parts that you copy from other conversations.
- some messages arrives that you need to answer urgently, so you can leave unfinished message to return to it later.
Both are now possible - the message you wrote, together with any attachments, and even a voice message you recorded, will remain available as draft until you either close the app or leave another message unfinished - while you can send the message in another chat without losing the current draft, there can be only one draft at a time.
### Transport isolation
<img src="./images/20230204-transport.png" width="288">
Even when you create different chat profiles you are still connecting to your contacts via the same device. Transport isolation, by default, makes connections belonging to the same profile use different TCP sessions, so while the server sees the same IP address, it doesn't see it as the same client connection. If you are connecting via Tor using SOCKS proxy (e.g. Orbot app on Android) not only the app will use different TCP sessions, it will also use separate Tor circuits for connections from different profiles, preventing the servers and network observers seeing this as traffic coming from the same device.
There is an additional BETA option to use a separate transport connection for each contact and group member connection you have it is available in Network settings if you enable dev tools. In case you have a large number of contacts or participate in large groups across all profiles in the app, you should not use this option, as it may create a lot of traffic and also can exceed the quota for TCP sockets. Also creating a lot of separate Tor circuits can be slow. We will be testing at which number of connections this option starts failing and by the time it's available without dev tools we will add some limits.
### Reduced battery usage
Battery usage is one of the biggest complaints of SimpleX Chat users. The main reason for excess traffic is inefficient retry strategies for Network operations in these cases:
- the message queue capacity is exceeded - the app will keep retrying to send the message until there will be capacity.
- the server is not available, e.g. if you connect to somebody via their server, and they later disable it. This case creates much less extra traffic than the first.
This version makes retries for exceeded queue capacity 10x less frequent and adds SMP protocol extension that will allow to reduce retries even further by the next version. It works in the following way:
- when the sender encounters "queue quota exceeded" error, the sender stops trying to send the message.
- the server also takes note of that error.
- once recipient receives all messages from this queue, the server will notify the recipient that the sender had "queue quota exceeded" error.
- the recipient will then send a special message to the sender client to instruct it that it can resume delivery.
- the sender can still occasionally try sending the message, e.g. once every hours, but it won't need to retry once every few minutes as it does now.
Reducing battery usage is our big priority - we expect to reduce it by at least 2-3x in the next few months.
### Private filenames
When you send an image or voice message they are sent as files with filenames including timestamp. We didn't see it as a problem, as files are sent together with the message, and messages have server-side timestamps anyway. But the users pointed out that the timestamp we used was in the local timezone, and therefore leaked the country (or continent) where the user is located. A simple workaround was to reset timezone to UTC, and that is what most users who need to protect their location do anyway. But this version resolves it - these filenames now include UTC timezones no workarounds are needed.
### Italian interface
Thanks to our users' community and to Weblate providing a free hosting plan for SimpleX Chat translations we can now support more languages in the interface this version adds Italian and many more is in progress - Chinese, Japanese, Czech, Dutch, etc.
You can [contribute the translation](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps) of the apps to your language too!
## SimpleX platform
Some links to answer the most common questions:
[How can SimpleX deliver messages without user identifiers](./20220511-simplex-chat-v2-images-files.md#the-first-messaging-platform-without-user-identifiers).
[What are the risks to have identifiers assigned to the users](./20220711-simplex-chat-v3-released-ios-notifications-audio-video-calls-database-export-import-protocol-improvements.md#why-having-users-identifiers-is-bad-for-the-users).
[Technical details and limitations](https://github.com/simplex-chat/simplex-chat#privacy-technical-details-and-limitations).
[How SimpleX is different from Session, Matrix, Signal, etc.](https://github.com/simplex-chat/simplex-chat/blob/stable/README.md#frequently-asked-questions).
Please also see our [website](https://simplex.chat).
## Help us with donations
Huge thank you to everybody who donated to SimpleX Chat!
We are prioritizing users privacy and security - it would be impossible without your support.
Our pledge to our users is that SimpleX protocols are and will remain open, and in public domain, - so anybody can build the future implementations of the clients and the servers. We are building SimpleX platform based on the same principles as email and web, but much more private and secure.
Your donations help us raise more funds any amount, even the price of the cup of coffee, makes a big difference for us.
See [this section](https://github.com/simplex-chat/simplex-chat/tree/master#help-us-with-donations) for the ways to donate.
Thank you,
Evgeny
SimpleX Chat founder

View File

@@ -1,5 +1,15 @@
# Blog
Feb 4, 2023 [SimpleX Chat v4.5 released](./20230103-simplex-chat-v4.4-disappearing-messages.md)
- multiple chat profiles.
- message draft.
- transport isolation.
- reduced battery usage.
- private filenames.
Also, we added [Italian language interface](#french-language-interface), thanks to our users and Weblate!
Jan 3, 2023 [SimpleX Chat v4.4 released](./20230103-simplex-chat-v4.4-disappearing-messages.md)
- disappearing messages.

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

View File

@@ -0,0 +1,115 @@
# Blog
4 févr. 2023 [SimpleX Chat v4.5 publié](./20230103-simplex-chat-v4.4-disappearing-messages.md)
- profils de chat multiples.
- brouillon de message.
- isolation du transport.
- réduction de l'utilisation de la batterie.
- noms de fichiers privés.
Nous avons également ajouté [l'interface en italien](#french-language-interface), grâce à nos utilisateurs et à Weblate !
3 janv. 2023 [SimpleX Chat v4.4 publié](./20230103-simplex-chat-v4.4-disappearing-messages.md)
- messages éphèméres.
- messages "en direct" (dynamique).
- vérification de la sécurité de la connexion.
- images animées et autocollants - maintenant aussi sur iOS.
Nous avons également ajouté [l'interface en français](#french-language-interface), grâce à nos utilisateurs et à Weblate !
6 déc. 2022 [SimpleX Chat : révision et sortie de la v4.3](./20221206-simplex-chat-v4.3-voice-messages.md)
Critiques de novembre :
- Recommandations de [Privacy Guides](https://www.privacyguides.org/real-time-communication/#simplex-chat).
- [Revue par Mike Kuketz](https://www.kuketz-blog.de/simplex-eindruecke-vom-messenger-ohne-identifier/).
- [La matrice des messageries](https://www.messenger-matrix.de).
- [Revue de Supernova](https://supernova.tilde.team/detailed_reviews.html#simplex) et [évaluations des messageries](https://supernova.tilde.team/messengers.html).
Sortie de la v4.3 :
- messages vocaux instantanés !
- suppression irréversible des messages envoyés pour tous les destinataires
- amélioration de la configuration du serveur SMP et du support des mots de passe du serveur
- améliorations de la confidentialité et de la sécurité : protection de l'écran de l'application, sécurité des liens SimpleX, etc.
8 nov. 2022 [Audit de sécurité par Trail of Bits, nouveau site web et sortie de la v4.2](./20221108-simplex-chat-v4.2-security-audit-new-website.md)
_"Avez-vous été audité ou devons-nous simplement vous ignorer ?"_
SimpleX Chat a été audité par [Trail of Bits](https://www.trailofbits.com/about), 4 problèmes ont été identifiés, et 3 d'entre eux sont corrigés dans la version 4.2.
Le nouveau site web est en ligne : https://simplex.chat
Sortie de la v4.2 :
- liens de groupes - les administrateurs de groupes peuvent créer les liens pour que les nouveaux membres puissent les rejoindre
- acceptation automatique des demandes de contact + configuration de l'acceptation de l'incognito et du message de bienvenue
- petites nouveautés : changer un rôle de membre du groupe, marquer le chat comme non lu, envoyer des autocollants et des GIFs depuis les claviers Android.
- changer manuellement de contact ou de membre vers une autre adresse / serveur (BETA)
- recevoir des fichiers plus rapidement (BETA)
28 sept. 2022 [v4 : chiffrement de la base de données locale](./20220928-simplex-chat-v4-encrypted-database.md)
- base de données locale de chat chiffrée - si vous utilisez déjà l'application, vous pouvez chiffrer la base de données dans les paramètres de l'application.
- support pour les serveurs WebRTC ICE auto-hébergés
- amélioration de la stabilité de la création de nouvelles connexions : groupes, fichiers et contacts plus fiables
- suppression des fichiers et des médias - par sécurité et pour économiser de l'espace de stockage
- Pour les développeurs - TypeScript SDK pour l'intégration avec SimpleX Chat
- support des images animées dans l'application Android
- Interface utilisateur en allemand pour les applications mobiles
1 sept. 2022 [v3.2 : Mode Incognito](./20220901-simplex-chat-v3.2-incognito-mode.md)
- Mode Incognito - utiliser un nouveau nom de profil aléatoire pour chaque contact
- utiliser des adresses de serveur .onion avec Tor
- défilement et recherche sans fin
- choix d'une couleur secondaire et du mode sombre
- réduction de la taille des APK pour le téléchargement direct et dans le repo F-Droid de 200 à 46Mb !
L'audit d'implémentation est prévu pour Octobre !
8 août 2022 [v3.1 : groupes de discussion](./20220808-simplex-chat-v3.1-chat-groups.md)
- enfin, des groupes de chat secrets - personne d'autre que les membres ne sait qu'ils existent !
- accès aux serveurs de messagerie via Tor sur toutes les plateformes
- paramètres réseau avancés pour optimiser l'utilisation du trafic
- protocole de chat publié
- nouvelles icônes d'application
23 juil. 2022 [v3.1-beta : accès aux serveurs via Tor](./20220723-simplex-chat-v3.1-tor-groups-efficiency.md)
- application terminale : accès aux serveurs de messagerie via un proxy SOCKS5 (par exemple, Tor).
- applications mobiles : rejoindre et quitter des groupes de discussion.
- utilisation optimisée de la batterie et du trafic - réduction jusqu'à 90x !
- deux configurations docker pour les serveurs SMP auto-hébergés.
11 juil. 2022 [v3 : notifications push instantanées pour iOS et appels audio/vidéo](./20220711-simplex-chat-v3-released-ios-notifications-audio-video-calls-database-export-import-protocol-improvements.md) :
- exportation et importation de la base de données de chat
- appels audio/vidéo chiffrés de bout en bout
- amélioration de la confidentialité du protocole et des performances
4 juin 2022 [v2.2 : nouveaux paramètres de confidentialité et de sécurité](./20220604-simplex-chat-new-privacy-security-settings.md)
24 mai 2022 [v2.1 : effacement des messages pour une meilleure confidentialité des conversations](./20220524-simplex-chat-better-privacy.md)
11 mai 2022 [Publication de la v2.0 - envoi d'images et de fichiers dans les applications mobiles](./20220511-simplex-chat-v2-images-files.md)
04 avr. 2022 [Notifications instantanées pour les applications mobiles SimpleX Chat](./20220404-simplex-chat-instant-notifications.md)
08 mars 2022 [Applications mobiles pour iOS et Android](./20220308-simplex-chat-mobile-apps.md)
14 févr. 2022. [SimpleX Chat : rejoignez notre version bêta publique pour iOS](./20220214-simplex-chat-ios-public-beta.md)
12 janv. 2022. [SimpleX Chat v1 : la plateforme de chat et d'application la plus privée et la plus sécurisée](./20220112-simplex-chat-v1-released.md)
08 déc. 2021. [Sortie de SimpleX Chat v0.5 : la première plateforme de chat 100% privée par définition - aucun accès à votre graphe de connexions](./20211208-simplex-chat-v0.5-released.md)
14 septembre 2021. [SimpleX Chat v0.4 publié : chat open-source qui utilise un protocole de routage de messages préservant la confidentialité](./20210914-simplex-chat-v0.4-released.md)
12 mai 2021. [Prototype de chat SimpleX](./20210512-simplex-chat-terminal-ui.md)
22 oct. 2020. [SimpleX Chat](./20201022-simplex-chat.md)

View File

@@ -7,7 +7,7 @@ constraints: zip +disable-bzip2 +disable-zstd
source-repository-package
type: git
location: https://github.com/simplex-chat/simplexmq.git
tag: 5d8febc3535424b9c60eca508f57ba886c1ed8ba
tag: ee2a764f93a8b5af485949699d6a64ebbbaf2557
source-repository-package
type: git

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