Compare commits

..

48 Commits

Author SHA1 Message Date
Evgeny Poberezkin 0366afbcce rfc: user per-service per-device identities 2023-07-02 14:03:55 +01:00
M Sarmad Qadeer 4c33ed92bb website: remove white border of demo terminal (#2634) 2023-07-01 06:46:37 +01:00
M Sarmad Qadeer a0ae4125c5 website: add cli demo to cli docs page (#2622) 2023-06-30 11:12:05 +01:00
Evgeny Poberezkin 34a60066fb docs: add sample database passphrase for themes 2023-06-29 21:50:42 +01:00
Stanislav Dmitrenko 1f50e94bc9 multiplatform: API 33 support (#2631) 2023-06-29 13:17:43 +01:00
Stanislav Dmitrenko 0e4376bada multiplatform: file structure (#2630)
* multiplatform: file structure

* apk file name

* more paths in sources

* lint issues and apk file name
2023-06-29 12:53:11 +01:00
spaced4ndy b0ad94fe7f 5.2-beta.0: iOS 151, Android 129 (#2628) 2023-06-28 19:52:52 +04:00
Stanislav Dmitrenko fccd4f7ec4 android: returned lost focus in text field (#2625) 2023-06-28 16:49:01 +04:00
spaced4ndy 3f93397031 core: 5.2.0.0 (#2626) 2023-06-28 16:13:14 +04:00
Stanislav Dmitrenko a5f8641d50 android: search members (#2621)
* android: search members

* changed placement of search fields

* less diff

* remove unused function

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-06-28 13:00:42 +01:00
Stanislav Dmitrenko f23c0b55f8 android: filter favorite and unread chats (#2623)
* android: filter favorite and unread chats

* style

* unused icons

* inverted colors

* change colors, size

* changes to strings and icon

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-06-28 12:20:23 +01:00
Stanislav Dmitrenko 534151f1bb android: group preference to prohibit files and media (#2620)
Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-06-27 18:58:04 +01:00
Evgeny Poberezkin 2ad9d0ddbc ios: update library 2023-06-27 16:35:27 +01:00
Evgeny Poberezkin 388bdc7083 ios: improve chat filter, "No filtered chats" note (#2619)
* ios: improve chat filter, "No filtered chats" note

* refactor filter
2023-06-27 10:28:47 +01:00
Evgeny Poberezkin 3e370a7c16 ios: group preference to prohibit files and media (#2611)
* ios: group preference to prohibit files and media

* style
2023-06-27 07:55:33 +01:00
spaced4ndy 77b3870654 core: update simplexmq (switch status encoding) (#2615) 2023-06-26 21:48:01 +04:00
Evgeny Poberezkin b088b1c44c mobile: translations (#2614)
* Translated using Weblate (German)

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

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

* Translated using Weblate (French)

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

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1247 of 1247 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 97.6% (1218 of 1247 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 99.3% (1135 of 1143 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1247 of 1247 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1143 of 1143 strings)

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

* Translated using Weblate (Finnish)

Currently translated at 0.4% (5 of 1247 strings)

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

* Translated using Weblate (German)

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

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

* Translated using Weblate (French)

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

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1247 of 1247 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 97.6% (1218 of 1247 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 99.3% (1135 of 1143 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1247 of 1247 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1143 of 1143 strings)

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

* Translated using Weblate (Finnish)

Currently translated at 0.4% (5 of 1247 strings)

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

* Added translation using Weblate (Thai)

* Added translation using Weblate (Thai)

* Translated using Weblate (Finnish)

Currently translated at 3.3% (42 of 1247 strings)

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

* Translated using Weblate (Polish)

Currently translated at 100.0% (1247 of 1247 strings)

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

* Translated using Weblate (Hebrew)

Currently translated at 68.3% (852 of 1247 strings)

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

* Translated using Weblate (Thai)

Currently translated at 1.6% (20 of 1247 strings)

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

* Translated using Weblate (Thai)

Currently translated at 1.6% (20 of 1247 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 99.6% (1243 of 1247 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 99.3% (1136 of 1143 strings)

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

* Translated using Weblate (Thai)

Currently translated at 7.2% (91 of 1247 strings)

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

* Translated using Weblate (Hebrew)

Currently translated at 73.1% (912 of 1247 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (1143 of 1143 strings)

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

* Translated using Weblate (Hebrew)

Currently translated at 75.0% (936 of 1247 strings)

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

* Translated using Weblate (Thai)

Currently translated at 10.1% (126 of 1247 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1247 of 1247 strings)

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

* Translated using Weblate (Thai)

Currently translated at 11.7% (147 of 1247 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (1247 of 1247 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (1143 of 1143 strings)

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

* Translated using Weblate (Hebrew)

Currently translated at 80.8% (1008 of 1247 strings)

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

* Translated using Weblate (Thai)

Currently translated at 21.4% (267 of 1247 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (1247 of 1247 strings)

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

* Translated using Weblate (Hebrew)

Currently translated at 81.9% (1022 of 1247 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (1247 of 1247 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (1143 of 1143 strings)

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

* Translated using Weblate (Portuguese)

Currently translated at 54.5% (680 of 1247 strings)

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

* Translated using Weblate (Thai)

Currently translated at 41.6% (519 of 1247 strings)

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

* Translated using Weblate (Finnish)

Currently translated at 28.9% (361 of 1247 strings)

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

* Translated using Weblate (Hebrew)

Currently translated at 85.0% (1061 of 1247 strings)

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

* Translated using Weblate (Thai)

Currently translated at 42.1% (526 of 1247 strings)

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

* Translated using Weblate (Hebrew)

Currently translated at 88.6% (1106 of 1247 strings)

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

* Translated using Weblate (Russian)

Currently translated at 100.0% (1247 of 1247 strings)

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

* Translated using Weblate (Portuguese)

Currently translated at 55.2% (689 of 1247 strings)

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

* Translated using Weblate (Hebrew)

Currently translated at 96.4% (1203 of 1247 strings)

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

* Translated using Weblate (Thai)

Currently translated at 49.3% (616 of 1247 strings)

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

* Translated using Weblate (Finnish)

Currently translated at 48.5% (606 of 1247 strings)

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

* Translated using Weblate (Italian)

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

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

* Translated using Weblate (Hebrew)

Currently translated at 97.1% (1212 of 1247 strings)

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

* Translated using Weblate (Hebrew)

Currently translated at 97.5% (1217 of 1247 strings)

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

* Translated using Weblate (Finnish)

Currently translated at 81.9% (1022 of 1247 strings)

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

* Translated using Weblate (Hebrew)

Currently translated at 100.0% (1247 of 1247 strings)

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

* Translated using Weblate (Hebrew)

Currently translated at 1.2% (14 of 1143 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (1247 of 1247 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 76.2% (872 of 1143 strings)

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

* Translated using Weblate (Finnish)

Currently translated at 100.0% (1247 of 1247 strings)

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

* Translated using Weblate (Finnish)

Currently translated at 1.0% (12 of 1143 strings)

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

* Translated using Weblate (Portuguese)

Currently translated at 59.3% (740 of 1247 strings)

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

* Translated using Weblate (Hebrew)

Currently translated at 100.0% (1247 of 1247 strings)

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

* Translated using Weblate (Hebrew)

Currently translated at 4.0% (46 of 1143 strings)

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

* Translated using Weblate (Thai)

Currently translated at 60.5% (755 of 1247 strings)

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

* Translated using Weblate (Thai)

Currently translated at 64.3% (802 of 1247 strings)

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

* Translated using Weblate (German)

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

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

* Translated using Weblate (Italian)

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

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

* Translated using Weblate (Thai)

Currently translated at 68.4% (854 of 1247 strings)

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

* Translated using Weblate (Russian)

Currently translated at 99.6% (1246 of 1251 strings)

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

* Translated using Weblate (French)

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

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1251 of 1251 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1251 of 1251 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1143 of 1143 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1251 of 1251 strings)

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

* Translated using Weblate (Finnish)

Currently translated at 100.0% (1251 of 1251 strings)

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

* Translated using Weblate (Polish)

Currently translated at 100.0% (1251 of 1251 strings)

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

* Translated using Weblate (Thai)

Currently translated at 74.9% (937 of 1251 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 1.5% (19 of 1251 strings)

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

* Translated using Weblate (Thai)

Currently translated at 81.2% (1016 of 1251 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 6.0% (76 of 1251 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 8.8% (111 of 1251 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 8.9% (112 of 1251 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 0.1% (1 of 1143 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 6.6% (83 of 1251 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 9.1% (115 of 1251 strings)

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

* Translated using Weblate (Thai)

Currently translated at 97.1% (1215 of 1251 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (1144 of 1144 strings)

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

* Translated using Weblate (Thai)

Currently translated at 100.0% (1251 of 1251 strings)

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

* Translated using Weblate (German)

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

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

* Translated using Weblate (French)

Currently translated at 100.0% (1144 of 1144 strings)

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

* Translated using Weblate (German)

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

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1144 of 1144 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1251 of 1251 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1144 of 1144 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 12.9% (162 of 1251 strings)

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

* Added translation using Weblate (Malayalam)

* Added translation using Weblate (Malayalam)

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1144 of 1144 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (1251 of 1251 strings)

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

* Translated using Weblate (Finnish)

Currently translated at 3.4% (39 of 1144 strings)

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

* Translated using Weblate (Malayalam)

Currently translated at 5.9% (75 of 1251 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (1251 of 1251 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (1251 of 1251 strings)

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

* Translated using Weblate (Malayalam)

Currently translated at 12.9% (162 of 1251 strings)

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

* Translated using Weblate (Czech)

Currently translated at 99.9% (1250 of 1251 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% (1144 of 1144 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (1251 of 1251 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 24.8% (284 of 1144 strings)

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

* Translated using Weblate (Malayalam)

Currently translated at 18.3% (230 of 1251 strings)

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

* Translated using Weblate (Korean)

Currently translated at 71.2% (891 of 1251 strings)

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

* Translated using Weblate (Malayalam)

Currently translated at 22.4% (281 of 1251 strings)

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

* ios: import/export localizations

---------

Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
Co-authored-by: random r <epsilin@yopmail.com>
Co-authored-by: sith-on-mars <groguko36@pm.me>
Co-authored-by: Olivia Ng <uloo592@gmail.com>
Co-authored-by: No name <CertainBot@users.noreply.hosted.weblate.org>
Co-authored-by: Jargon <sb94zj+4dyx519ewmt7o@sharklasers.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: B.O.S.S <BxOxSxS@protonmail.com>
Co-authored-by: Roee Hershberg <roihershberg@protonmail.com>
Co-authored-by: Titapa (PunPun) Chaiyakiturajai <titapapunne@gmail.com>
Co-authored-by: Jacky Lam <lamchun1110@gmail.com>
Co-authored-by: John m <jvanmanen@gmail.com>
Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: Paulo Alexandre Pereira <github@paapereira.com>
Co-authored-by: petri <pkajander@gmail.com>
Co-authored-by: PigDog <blobster@tuta.io>
Co-authored-by: tay gelte <taydegelte@gufum.com>
Co-authored-by: Артём Котлубай <artemkotlubai@yandex.ru>
Co-authored-by: Maksym Lukashenko <livelmaxim@gmail.com>
Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org>
Co-authored-by: Raman <aksharam.sme4i@aleeas.com>
Co-authored-by: Jaroslav Lichtblau <l10n@lichtblau.cz>
Co-authored-by: okmepro <ix28@proton.me>
2023-06-26 00:31:26 +01:00
Evgeny Poberezkin 8abad4f711 website: translations, Ukrainian language (#2613)
* Translated using Weblate (French)

Currently translated at 100.0% (233 of 233 strings)

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

* Translated using Weblate (French)

Currently translated at 100.0% (233 of 233 strings)

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

* Added translation using Weblate (Japanese)

* Translated using Weblate (Czech)

Currently translated at 100.0% (233 of 233 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 99.5% (233 of 234 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 99.5% (233 of 234 strings)

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

* Translated using Weblate (French)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Polish)

Currently translated at 100.0% (234 of 234 strings)

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

* Added translation using Weblate (Russian)

* Translated using Weblate (Dutch)

Currently translated at 99.5% (233 of 234 strings)

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

* Translated using Weblate (Japanese)

Currently translated at 2.5% (6 of 234 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (French)

Currently translated at 100.0% (233 of 233 strings)

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

* Added translation using Weblate (Japanese)

* Translated using Weblate (Czech)

Currently translated at 100.0% (233 of 233 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 99.5% (233 of 234 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 99.5% (233 of 234 strings)

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

* Translated using Weblate (French)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Polish)

Currently translated at 100.0% (234 of 234 strings)

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

* Added translation using Weblate (Russian)

* Translated using Weblate (Dutch)

Currently translated at 99.5% (233 of 234 strings)

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

* Translated using Weblate (Japanese)

Currently translated at 2.5% (6 of 234 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (234 of 234 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 100.0% (234 of 234 strings)

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

* add Ukranian language

---------

Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: John m <jvanmanen@gmail.com>
Co-authored-by: Random_1984 <weblate.x3nk3@simplelogin.com>
Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: random r <epsilin@yopmail.com>
Co-authored-by: mf <work.j6nnu@slmail.me>
Co-authored-by: B.O.S.S <BxOxSxS@protonmail.com>
Co-authored-by: a4318 <dalse.077@gmail.com>
Co-authored-by: No name <CertainBot@users.noreply.hosted.weblate.org>
Co-authored-by: Float <float.hu+@gmail.com>
Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org>
Co-authored-by: Maksym Lukashenko <livelmaxim@gmail.com>
Co-authored-by: Jaroslav Lichtblau <l10n@lichtblau.cz>
2023-06-25 23:25:53 +01:00
Evgeny Poberezkin 4c668f7a34 website: social icons order 2023-06-25 16:06:53 +01:00
M Sarmad Qadeer 0bf5fbd641 website: add icons in footer (#2612) 2023-06-25 13:46:27 +01:00
Evgeny Poberezkin cfec60bf86 website: monerokon group link 2023-06-25 12:01:19 +01:00
M Sarmad Qadeer 9caaab0e8e website: fix hero layout for small height screens (#2609) 2023-06-24 14:39:06 +01:00
Evgeny Poberezkin 6da18d9b2a core: group permision to allow files and media (#2610)
* core: group permision to allow files and media

* test
2023-06-24 12:36:07 +01:00
spaced4ndy da2622f00e core: moderate messages that have arrived after the event of moderation (#2604)
* core: moderate messages that have arrived after the event of moderation

* remove index

* test, delete moderation

* unused selector

* rework

* refactor

* change error

* parameter

* fix syntax

* refactor

* Nothing

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-06-22 20:38:09 +04:00
Evgeny Poberezkin 7ed581dfbf Merge branch 'stable' 2023-06-21 21:54:25 +01:00
Evgeny Poberezkin 78c0fe73a7 readme: add simplex-devs group 2023-06-21 21:54:12 +01:00
spaced4ndy 15b00f6110 core, mobile: unhide share address (reverts #2468) (#2600) 2023-06-20 10:15:28 +04:00
spaced4ndy f592a26b00 ios, android: increase disappearing message interval limit (#2599)
* ios, android: increase disappearing message interval limit

* Apply suggestions from code review

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-06-20 10:14:07 +04:00
spaced4ndy 30687f5fa6 ios, android: allow to set custom ttl per message if conversation timer is not set (#2598) 2023-06-20 10:13:16 +04:00
spaced4ndy bc7217d686 ios, android: update connection stats on switch start (#2597) 2023-06-20 10:09:04 +04:00
Evgeny Poberezkin 8e0b3fa32e mobile: uncomment message reactions preferences/permissions 2023-06-19 22:47:49 +01:00
spaced4ndy d929c34e71 core: include ConnectionStats into switch api response (#2594) 2023-06-19 16:07:17 +04:00
Evgeny Poberezkin ec7bff9205 ios: search members (#2593) 2023-06-19 11:49:45 +01:00
spaced4ndy 22f20a9c5f ios, android: abort switching connection (#2584) 2023-06-19 14:46:08 +04:00
Evgeny Poberezkin ddf81d28f1 ios: UI to filter favorite and unread chats (#2592)
* ios: UI to filter favorite and unread chats

* update localizations

* update colors

* star size and position

* filter button sizes and layout

* change AND to OR when both filters are chosen

* simplify filter UX

* store filter state in defaults

* remove comment, update localizations
2023-06-19 11:13:30 +01:00
Evgeny Poberezkin 5c105cb746 core: mark chats as favorite (#2591) 2023-06-18 12:46:38 +01:00
Evgeny Poberezkin e1370e8f3c core: split Store.hs to multiple files for faster re-compilation (#2589)
* core: split Store.hs to multiple files for faster re-compilation

* remove unused compiler pragmas
2023-06-18 10:20:11 +01:00
Evgeny Poberezkin 9fbcc2b5bb core: rename module (#2587) 2023-06-17 11:03:22 +01:00
Evgeny Poberezkin 53d77b25ed core: count successes and failures for batch operations, only log errors in info log-level (#2585)
* core: count successes and failures for batch operations, only log errors in info log-level

* correction

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

---------

Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
2023-06-17 10:34:04 +01:00
Evgeny Poberezkin e7089d4c2f mobile: allow hiding profile when SimpleX lock is disabled (#2586) 2023-06-17 09:58:35 +01:00
spaced4ndy 6d3cb0ea2e core: api to abort connection switch; update simplexmq (#2544) 2023-06-16 19:05:53 +04:00
Evgeny Poberezkin 46c6f5e615 cli: option to auto-accept files (#2540)
* cli: option to auto-accept files

* auto-accept works

* test

* add missing field
2023-06-16 13:43:06 +01:00
Evgeny Poberezkin c29c3179a0 Merge branch 'stable' 2023-06-16 12:23:33 +01:00
sh 3e84429a3a build.yml: bump actions version (#2580) 2023-06-16 12:23:03 +01:00
Evgeny Poberezkin 904b6db628 Merge branch 'stable' 2023-06-15 20:41:13 +01:00
Evgeny Poberezkin af4e94058a readme: update users group link 2023-06-15 20:39:34 +01:00
Stanislav Dmitrenko 91b77b6d63 android: restart and shutdown the app with buttons (#2578)
Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-06-14 09:08:51 +01:00
Stanislav Dmitrenko 5a0c7c34bf ios: reactions in one line in menu (#2577)
* ios: reactions in one line in menu

* refactor, remove title

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-06-13 19:24:28 +01:00
571 changed files with 25465 additions and 7353 deletions
+5 -5
View File
@@ -16,11 +16,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Clone project
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Build changelog
id: build_changelog
uses: mikepenz/release-changelog-builder-action@v1
uses: mikepenz/release-changelog-builder-action@v4
with:
configuration: .github/changelog_conf.json
failOnError: true
@@ -71,16 +71,16 @@ jobs:
disk-root: "C:"
- name: Clone project
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Setup Haskell
uses: haskell/actions/setup@v1
uses: haskell/actions/setup@v2
with:
ghc-version: "8.10.7"
cabal-version: "latest"
- name: Cache dependencies
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: |
${{ matrix.cache_path }}
+10 -1
View File
@@ -64,7 +64,14 @@ You must:
Messages not following these rules will be deleted, the right to send messages may be revoked, and the access to the new members to the group may be temporarily restricted, to prevent re-joining under a different name - our imperfect group moderation does not have a better solution at the moment.
You can join an English-speaking users group if you want to ask any questions: [#SimpleX-Group-3](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2Fp-j-D_PrY2UMDchFHEUtbSES0nmzCnvD%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEA3gBfMjB_GDEmKQwjNdqGbnX91yfuZ7nRJgQijsx5Khc%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%2262MvNZ_Ec2mmlS8V0QNtLQ%3D%3D%22%7D)
You can join an English-speaking users group if you want to ask any questions: [#SimpleX-Group-4](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2Fw2GlucRXtRVgYnbt_9ZP-kmt76DekxxS%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEA0tJhTyMGUxznwmjb7aT24P1I1Wry_iURTuhOFlMb1Eo%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22WoPxjFqGEDlVazECOSi2dg%3D%3D%22%7D)
There is also a group [#simplex-devs](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2F6eHqy7uAbZPOcA6qBtrQgQquVlt4Ll91%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAqV_pg3FF00L98aCXp4D3bOs4Sxv_UmSd-gb0juVoQVs%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22XonlixcHBIb2ijCehbZoiw%3D%3D%22%7D) for developers who build on SimpleX platform:
- chat bots and automations
- integrations with other apps
- social apps and services
- etc.
There are groups in other languages, that we have the apps interface translated into. These groups are for testing, and asking questions to other SimpleX Chat users:
@@ -283,6 +290,8 @@ You can:
If you are considering developing with SimpleX platform please get in touch for any advice and support.
Please also join [#simplex-devs](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2F6eHqy7uAbZPOcA6qBtrQgQquVlt4Ll91%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAqV_pg3FF00L98aCXp4D3bOs4Sxv_UmSd-gb0juVoQVs%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22XonlixcHBIb2ijCehbZoiw%3D%3D%22%7D) group to ask any questions and share your success stories.
## Roadmap
- ✅ Easy to deploy SimpleX server with in-memory message storage, without any dependencies.
-20
View File
@@ -1,20 +0,0 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
/.idea/deploymentTargetDropDown.xml
/.idea/misc.xml
/.idea/uiDesigner.xml
/.idea/kotlinc.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
app/src/main/cpp/libs/
-1
View File
@@ -1 +0,0 @@
SimpleX
-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="11" />
</component>
</project>
-19
View File
@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>
@@ -1,20 +0,0 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PreviewAnnotationInFunctionWithParameters" enabled="true" level="ERROR" enabled_by_default="true">
<option name="previewFile" value="true" />
</inspection_tool>
<inspection_tool class="PreviewDimensionRespectsLimit" enabled="true" level="WARNING" enabled_by_default="true">
<option name="previewFile" value="true" />
</inspection_tool>
<inspection_tool class="PreviewMultipleParameterProviders" enabled="true" level="ERROR" enabled_by_default="true">
<option name="previewFile" value="true" />
</inspection_tool>
<inspection_tool class="PreviewMustBeTopLevelFunction" enabled="true" level="ERROR" enabled_by_default="true">
<option name="previewFile" value="true" />
</inspection_tool>
<inspection_tool class="PreviewNeedsComposableAnnotation" enabled="true" level="ERROR" enabled_by_default="true">
<option name="previewFile" value="true" />
</inspection_tool>
</profile>
</component>
-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>
@@ -1,49 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="accept_contact_button">اقبل</string>
<string name="about_simplex_chat">عن <xliff:g id="appNameFull"> ٍSimpleX </xliff:g></string>
<string name="a_plus_b">a + b</string>
<string name="accept">اقبل</string>
<string name="chat_item_ttl_week">اسبوع 1</string>
<string name="chat_item_ttl_month">شهر 1</string>
<string name="color_primary">لون تمييزي</string>
<string name="chat_item_ttl_day">يوم 1</string>
<string name="accept_feature">اقبل</string>
<string name="about_simplex">عن SimpleX</string>
<string name="above_then_preposition_continuation">أعلاه ، ثم:</string>
<string name="accept_call_on_lock_screen">اقبل</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">لا يمكن التراجع عن هذا الإجراء - سيتم فقد ملف التعريف وجهات الاتصال والرسائل والملفات الخاصة بك بشكل نهائي.</string>
<string name="alert_message_no_group">هذه المجموعة لم تعد موجودة.</string>
<string name="this_QR_code_is_not_a_link">رمز QR هذا ليس رابطًا!</string>
<string name="next_generation_of_private_messaging">الجيل القادم من الرسائل الخاصة</string>
<string name="delete_files_and_media_desc">لا يمكن التراجع عن هذا الإجراء - سيتم حذف جميع الملفات والوسائط المستلمة والمرسلة. ستبقى الصور منخفضة الدقة.</string>
<string name="enable_automatic_deletion_message">لا يمكن التراجع عن هذا الإجراء - سيتم حذف الرسائل المرسلة والمستلمة قبل التحديد. قد تأخذ عدة دقائق.</string>
<string name="messages_section_description">ينطبق هذا الإعداد على الرسائل الموجودة في ملف تعريف الدردشة الحالي الخاص بك</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">منصة الرسائل والتطبيقات تحمي خصوصيتك وأمنك.</string>
<string name="profile_is_only_shared_with_your_contacts">يتم مشاركة ملف التعريف مع جهات الاتصال الخاصة بك فقط.</string>
<string name="member_role_will_be_changed_with_notification">سيتم تغيير الدور إلى \"%s\". سيتم إبلاغ كل فرد في المجموعة.</string>
<string name="member_role_will_be_changed_with_invitation">سيتم تغيير الدور إلى \"%s\". سيتلقى العضو دعوة جديدة.</string>
<string name="smp_servers_per_user">خوادم الاتصالات الجديدة لملف تعريف الدردشة الحالي الخاص بك</string>
<string name="switch_receiving_address_desc">هذه الميزة تجريبية! ستعمل فقط إذا كان لدى العميل الآخر الإصدار 4.2 مثبتًا. يجب أن ترى الرسالة في المحادثة بمجرد اكتمال تغيير العنوان - يرجى التحقق من أنه لا يزال بإمكانك تلقي الرسائل من جهة الاتصال هذه (أو عضو المجموعة).</string>
<string name="this_link_is_not_a_valid_connection_link">هذا الارتباط ليس ارتباط اتصال صالح!</string>
<string name="allow_verb">يسمح</string>
<string name="smp_servers_preset_add">أضف خوادم محددة مسبقًا</string>
<string name="smp_servers_add_to_another_device">أضف إلى جهاز آخر</string>
<string name="users_delete_all_chats_deleted">سيتم حذف جميع الدردشات والرسائل - لا يمكن التراجع عن هذا!</string>
<string name="network_enable_socks_info">الوصول إلى الخوادم عبر بروكسي SOCKS على المنفذ %d؟ يجب بدء تشغيل الوكيل قبل تمكين هذا الخيار.</string>
<string name="smp_servers_add">إضافة خادم …</string>
<string name="network_settings">إعدادات الشبكة المتقدمة</string>
<string name="all_group_members_will_remain_connected">سيبقى جميع أعضاء المجموعة على اتصال.</string>
<string name="allow_disappearing_messages_only_if">السماح باختفاء الرسائل فقط إذا سمحت جهة الاتصال الخاصة بك بذلك.</string>
<string name="allow_irreversible_message_deletion_only_if">السماح بحذف الرسائل بشكل لا رجوع فيه فقط إذا سمحت لك جهة الاتصال بذلك.</string>
<string name="group_member_role_admin">مسؤل</string>
<string name="users_add">إضافة ملف التعريف</string>
<string name="allow_direct_messages">السماح بإرسال رسائل مباشرة إلى الأعضاء.</string>
<string name="accept_contact_incognito_button">قبول التخفي</string>
<string name="button_add_welcome_message">أضف رسالة ترحيب</string>
<string name="v4_3_improved_server_configuration_desc">أضف الخوادم عن طريق مسح رموز QR.</string>
<string name="v4_2_group_links_desc">يمكن للمسؤولين إنشاء روابط للانضمام إلى المجموعات.</string>
<string name="accept_connection_request__question">قبول طلب الاتصال؟</string>
<string name="clear_chat_warning">سيتم حذف جميع الرسائل - لا يمكن التراجع عن هذا! سيتم حذف الرسائل فقط من أجلك.</string>
<string name="callstatus_accepted">مكالمة مقبولة</string>
</resources>
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
+8
View File
@@ -583,6 +583,14 @@ final class Chat: ObservableObject, Identifiable {
self.chatStats = chatStats
}
func copy(chatInfo: ChatInfo? = nil, chatItems: [ChatItem]? = nil, chatStats: ChatStats? = nil) -> Chat {
Chat(
chatInfo: chatInfo ?? self.chatInfo,
chatItems: chatItems ?? self.chatItems,
chatStats: chatStats ?? self.chatStats
)
}
var userCanSend: Bool {
switch chatInfo {
case .direct: return true
+26 -6
View File
@@ -480,12 +480,28 @@ func apiGroupMemberInfo(_ groupId: Int64, _ groupMemberId: Int64) throws -> (Con
throw r
}
func apiSwitchContact(contactId: Int64) async throws {
try await sendCommandOkResp(.apiSwitchContact(contactId: contactId))
func apiSwitchContact(contactId: Int64) throws -> ConnectionStats {
let r = chatSendCmdSync(.apiSwitchContact(contactId: contactId))
if case let .contactSwitchStarted(_, _, connectionStats) = r { return connectionStats }
throw r
}
func apiSwitchGroupMember(_ groupId: Int64, _ groupMemberId: Int64) async throws {
try await sendCommandOkResp(.apiSwitchGroupMember(groupId: groupId, groupMemberId: groupMemberId))
func apiSwitchGroupMember(_ groupId: Int64, _ groupMemberId: Int64) throws -> ConnectionStats {
let r = chatSendCmdSync(.apiSwitchGroupMember(groupId: groupId, groupMemberId: groupMemberId))
if case let .groupMemberSwitchStarted(_, _, _, connectionStats) = r { return connectionStats }
throw r
}
func apiAbortSwitchContact(_ contactId: Int64) throws -> ConnectionStats {
let r = chatSendCmdSync(.apiAbortSwitchContact(contactId: contactId))
if case let .contactSwitchAborted(_, _, connectionStats) = r { return connectionStats }
throw r
}
func apiAbortSwitchGroupMember(_ groupId: Int64, _ groupMemberId: Int64) throws -> ConnectionStats {
let r = chatSendCmdSync(.apiAbortSwitchGroupMember(groupId: groupId, groupMemberId: groupMemberId))
if case let .groupMemberSwitchAborted(_, _, _, connectionStats) = r { return connectionStats }
throw r
}
func apiGetContactCode(_ contactId: Int64) async throws -> (Contact, String) {
@@ -884,7 +900,9 @@ func markChatRead(_ chat: Chat, aboveItem: ChatItem? = nil) async {
let itemRange = (minItemId, aboveItem?.id ?? chat.chatItems.last?.id ?? minItemId)
let cInfo = chat.chatInfo
try await apiChatRead(type: cInfo.chatType, id: cInfo.apiId, itemRange: itemRange)
await MainActor.run { ChatModel.shared.markChatItemsRead(cInfo, aboveItem: aboveItem) }
await MainActor.run {
withAnimation { ChatModel.shared.markChatItemsRead(cInfo, aboveItem: aboveItem) }
}
}
if chat.chatStats.unreadChat {
await markChatUnread(chat, unreadChat: false)
@@ -898,7 +916,9 @@ func markChatUnread(_ chat: Chat, unreadChat: Bool = true) async {
do {
let cInfo = chat.chatInfo
try await apiChatUnread(type: cInfo.chatType, id: cInfo.apiId, unreadChat: unreadChat)
await MainActor.run { ChatModel.shared.markChatUnread(cInfo, unreadChat: unreadChat) }
await MainActor.run {
withAnimation { ChatModel.shared.markChatUnread(cInfo, unreadChat: unreadChat) }
}
} catch {
logger.error("markChatUnread apiChatUnread error: \(responseError(error))")
}
+45 -11
View File
@@ -36,9 +36,8 @@ func localizedInfoRow(_ title: LocalizedStringKey, _ value: LocalizedStringKey)
}
}
@ViewBuilder func smpServers(_ title: LocalizedStringKey, _ servers: [String]?) -> some View {
if let servers = servers,
servers.count > 0 {
@ViewBuilder func smpServers(_ title: LocalizedStringKey, _ servers: [String]) -> some View {
if servers.count > 0 {
HStack {
Text(title).frame(width: 120, alignment: .leading)
Button(serverHost(servers[0])) {
@@ -76,6 +75,7 @@ struct ChatInfoView: View {
case clearChatAlert
case networkStatusAlert
case switchAddressAlert
case abortSwitchAddressAlert
case error(title: LocalizedStringKey, error: LocalizedStringKey = "")
var id: String {
@@ -84,6 +84,7 @@ struct ChatInfoView: View {
case .clearChatAlert: return "clearChatAlert"
case .networkStatusAlert: return "networkStatusAlert"
case .switchAddressAlert: return "switchAddressAlert"
case .abortSwitchAddressAlert: return "abortSwitchAddressAlert"
case let .error(title, _): return "error \(title)"
}
}
@@ -136,12 +137,19 @@ struct ChatInfoView: View {
.onTapGesture {
alert = .networkStatusAlert
}
Button("Change receiving address") {
alert = .switchAddressAlert
}
if let connStats = connectionStats {
smpServers("Receiving via", connStats.rcvServers)
smpServers("Sending via", connStats.sndServers)
Button("Change receiving address") {
alert = .switchAddressAlert
}
.disabled(connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil })
if connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil } {
Button("Abort changing address") {
alert = .abortSwitchAddressAlert
}
.disabled(connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil && !$0.canAbortSwitch })
}
smpServers("Receiving via", connStats.rcvQueuesInfo.map { $0.rcvServer })
smpServers("Sending via", connStats.sndQueuesInfo.map { $0.sndServer })
}
}
@@ -166,6 +174,7 @@ struct ChatInfoView: View {
case .clearChatAlert: return clearChatAlert()
case .networkStatusAlert: return networkStatusAlert()
case .switchAddressAlert: return switchAddressAlert(switchContactAddress)
case .abortSwitchAddressAlert: return abortSwitchAddressAlert(abortSwitchContactAddress)
case let .error(title, error): return mkAlert(title: title, message: error)
}
}
@@ -359,7 +368,8 @@ struct ChatInfoView: View {
private func switchContactAddress() {
Task {
do {
try await apiSwitchContact(contactId: contact.apiId)
let stats = try apiSwitchContact(contactId: contact.apiId)
connectionStats = stats
} catch let error {
logger.error("switchContactAddress apiSwitchContact error: \(responseError(error))")
let a = getErrorAlert(error, "Error changing address")
@@ -369,13 +379,37 @@ struct ChatInfoView: View {
}
}
}
private func abortSwitchContactAddress() {
Task {
do {
let stats = try apiAbortSwitchContact(contact.apiId)
connectionStats = stats
} catch let error {
logger.error("abortSwitchContactAddress apiAbortSwitchContact error: \(responseError(error))")
let a = getErrorAlert(error, "Error aborting address change")
await MainActor.run {
alert = .error(title: a.title, error: a.message)
}
}
}
}
}
func switchAddressAlert(_ switchAddress: @escaping () -> Void) -> Alert {
Alert(
title: Text("Change receiving address?"),
message: Text("This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)."),
primaryButton: .destructive(Text("Change"), action: switchAddress),
message: Text("Receiving address will be changed to a different server. Address change will complete after sender comes online."),
primaryButton: .default(Text("Change"), action: switchAddress),
secondaryButton: .cancel()
)
}
func abortSwitchAddressAlert(_ abortSwitchAddress: @escaping () -> Void) -> Alert {
Alert(
title: Text("Abort changing address?"),
message: Text("Address change will be aborted. Old receiving address will be used."),
primaryButton: .destructive(Text("Abort"), action: abortSwitchAddress),
secondaryButton: .cancel()
)
}
+53 -14
View File
@@ -193,7 +193,7 @@ struct ChatView: View {
.focused($searchFocussed)
.foregroundColor(.primary)
.frame(maxWidth: .infinity)
Button {
searchText = ""
} label: {
@@ -204,7 +204,7 @@ struct ChatView: View {
.foregroundColor(.secondary)
.background(Color(.secondarySystemBackground))
.cornerRadius(10.0)
Button ("Cancel") {
searchText = ""
searchMode = false
@@ -537,8 +537,20 @@ struct ChatView: View {
private func menu(live: Bool) -> [UIMenuElement] {
var menu: [UIMenuElement] = []
if let mc = ci.content.msgContent, ci.meta.itemDeleted == nil || revealed {
let rs = allReactions()
if chat.chatInfo.featureEnabled(.reactions) && ci.allowAddReaction,
let rm = reactionUIMenu() {
rs.count > 0 {
var rm: UIMenu
if #available(iOS 16, *) {
var children: [UIMenuElement] = Array(rs.prefix(topReactionsCount(rs)))
if let sm = reactionUIMenu(rs) {
children.append(sm)
}
rm = UIMenu(title: "", options: .displayInline, children: children)
rm.preferredElementSize = .small
} else {
rm = reactionUIMenuPreiOS16(rs)
}
menu.append(rm)
}
if ci.meta.itemDeleted == nil && !ci.isLiveDummy && !live {
@@ -602,20 +614,36 @@ struct ChatView: View {
}
}
private func reactionUIMenu() -> UIMenu? {
let rs = MsgReaction.values.compactMap { r in
private func reactionUIMenuPreiOS16(_ rs: [UIAction]) -> UIMenu {
UIMenu(
title: NSLocalizedString("React...", comment: "chat item menu"),
image: UIImage(systemName: "face.smiling"),
children: rs
)
}
@available(iOS 16.0, *)
private func reactionUIMenu(_ rs: [UIAction]) -> UIMenu? {
var children = rs
children.removeFirst(min(rs.count, topReactionsCount(rs)))
if children.count == 0 { return nil }
return UIMenu(
title: "",
image: UIImage(systemName: "ellipsis"),
children: children
)
}
private func allReactions() -> [UIAction] {
MsgReaction.values.compactMap { r in
ci.reactions.contains(where: { $0.userReacted && $0.reaction == r })
? nil
: UIAction(title: r.text) { _ in setReaction(add: true, reaction: r) }
}
if rs.count > 0 {
return UIMenu(
title: NSLocalizedString("React...", comment: "chat item menu"),
image: UIImage(systemName: "face.smiling"),
children: rs
)
}
return nil
}
private func topReactionsCount(_ rs: [UIAction]) -> Int {
rs.count > 4 ? 3 : 4
}
private func setReaction(add: Bool, reaction: MsgReaction) {
@@ -869,9 +897,20 @@ struct ChatView: View {
}
func toggleNotifications(_ chat: Chat, enableNtfs: Bool) {
var chatSettings = chat.chatInfo.chatSettings ?? ChatSettings.defaults
chatSettings.enableNtfs = enableNtfs
updateChatSettings(chat, chatSettings: chatSettings)
}
func toggleChatFavorite(_ chat: Chat, favorite: Bool) {
var chatSettings = chat.chatInfo.chatSettings ?? ChatSettings.defaults
chatSettings.favorite = favorite
updateChatSettings(chat, chatSettings: chatSettings)
}
func updateChatSettings(_ chat: Chat, chatSettings: ChatSettings) {
Task {
do {
let chatSettings = ChatSettings(enableNtfs: enableNtfs)
try await apiSetChatSettings(type: chat.chatInfo.chatType, id: chat.chatInfo.apiId, chatSettings: chatSettings)
await MainActor.run {
switch chat.chatInfo {
@@ -264,7 +264,7 @@ struct ComposeView: View {
default: previewView()
}
HStack (alignment: .bottom) {
Button {
let b = Button {
showChooseSource = true
} label: {
Image(systemName: "paperclip")
@@ -274,6 +274,17 @@ struct ComposeView: View {
.frame(width: 25, height: 25)
.padding(.bottom, 12)
.padding(.leading, 12)
if case let .group(g) = chat.chatInfo,
!g.fullGroupPreferences.files.on {
b.disabled(true).onTapGesture {
AlertManager.shared.showAlertMsg(
title: "Files and media prohibited!",
message: "Only group owners can enable files and media."
)
}
} else {
b
}
ZStack(alignment: .leading) {
SendMessageView(
composeState: $composeState,
@@ -296,9 +307,7 @@ struct ComposeView: View {
},
finishVoiceMessageRecording: finishVoiceMessageRecording,
allowVoiceMessagesToContact: allowVoiceMessagesToContact,
// TODO in 5.2 - allow if ttl is not configured
// timedMessageAllowed: chat.chatInfo.featureEnabled(.timedMessages),
timedMessageAllowed: chat.chatInfo.featureEnabled(.timedMessages) && chat.chatInfo.timedMessagesTTL != nil,
timedMessageAllowed: chat.chatInfo.featureEnabled(.timedMessages),
onMediaAdded: { media in if !media.isEmpty { chosenMedia = media }},
keyboardVisible: $keyboardVisible
)
@@ -24,7 +24,7 @@ struct ContactPreferencesView: View {
List {
timedMessagesFeatureSection()
featureSection(.fullDelete, user.fullPreferences.fullDelete.allow, contact.mergedPreferences.fullDelete, $featuresAllowed.fullDelete)
// featureSection(.reactions, user.fullPreferences.reactions.allow, contact.mergedPreferences.reactions, $featuresAllowed.reactions)
featureSection(.reactions, user.fullPreferences.reactions.allow, contact.mergedPreferences.reactions, $featuresAllowed.reactions)
featureSection(.voice, user.fullPreferences.voice.allow, contact.mergedPreferences.voice, $featuresAllowed.voice)
featureSection(.calls, user.fullPreferences.calls.allow, contact.mergedPreferences.calls, $featuresAllowed.calls)
@@ -29,6 +29,8 @@ struct AddGroupMembersViewCommon: View {
@State private var selectedContacts = Set<Int64>()
@State private var selectedRole: GroupMemberRole = .member
@State private var alert: AddGroupMembersAlert?
@State private var searchText: String = ""
@FocusState private var searchFocussed
private enum AddGroupMembersAlert: Identifiable {
case prohibitedToInviteIncognito
@@ -85,7 +87,7 @@ struct AddGroupMembersViewCommon: View {
if showFooterCounter {
if (count >= 1) {
HStack {
Button { selectedContacts.removeAll() } label: { Text("Clear") }
Button { selectedContacts.removeAll() } label: { Text("Clear").font(.caption) }
Spacer()
Text("\(count) contact(s) selected")
}
@@ -97,7 +99,11 @@ struct AddGroupMembersViewCommon: View {
}
Section {
ForEach(membersToAdd) { contact in
searchFieldView(text: $searchText, focussed: $searchFocussed)
.padding(.leading, 2)
let s = searchText.trimmingCharacters(in: .whitespaces).localizedLowercase
let members = s == "" ? membersToAdd : membersToAdd.filter { $0.chatViewName.localizedLowercase.contains(s) }
ForEach(members) { contact in
contactCheckView(contact)
}
}
@@ -116,6 +122,9 @@ struct AddGroupMembersViewCommon: View {
return Alert(title: Text(title), message: Text(error))
}
}
.onChange(of: selectedContacts) { _ in
searchFocussed = false
}
}
private func inviteMembersButton() -> some View {
@@ -199,6 +208,31 @@ struct AddGroupMembersViewCommon: View {
}
}
func searchFieldView(text: Binding<String>, focussed: FocusState<Bool>.Binding) -> some View {
HStack {
Image(systemName: "magnifyingglass")
.resizable()
.scaledToFit()
.frame(height: 20)
.padding(.trailing, 10)
TextField("Search", text: text)
.focused(focussed)
.foregroundColor(.primary)
.frame(maxWidth: .infinity)
Image(systemName: "xmark.circle.fill")
.resizable()
.scaledToFit()
.opacity(text.wrappedValue == "" ? 0 : 1)
.frame(height: 20)
.onTapGesture {
text.wrappedValue = ""
focussed.wrappedValue = false
}
}
.foregroundColor(.secondary)
.frame(height: 36)
}
struct AddGroupMembersView_Previews: PreviewProvider {
static var previews: some View {
AddGroupMembersView(chat: Chat(chatInfo: ChatInfo.sampleData.group), groupInfo: GroupInfo.sampleData)
@@ -22,6 +22,8 @@ struct GroupChatInfoView: View {
@State private var connectionStats: ConnectionStats?
@State private var connectionCode: String?
@AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false
@State private var searchText: String = ""
@FocusState private var searchFocussed
enum GroupChatInfoViewAlert: Identifiable {
case deleteGroupAlert
@@ -67,8 +69,14 @@ struct GroupChatInfoView: View {
addMembersButton()
}
}
if members.count > 8 {
searchFieldView(text: $searchText, focussed: $searchFocussed)
.padding(.leading, 8)
}
let s = searchText.trimmingCharacters(in: .whitespaces).localizedLowercase
let filteredMembers = s == "" ? members : members.filter { $0.chatViewName.localizedLowercase.contains(s) }
memberView(groupInfo.membership, user: true)
ForEach(members) { member in
ForEach(filteredMembers) { member in
ZStack {
NavigationLink {
memberInfoView(member.groupMemberId)
@@ -144,6 +152,7 @@ struct GroupChatInfoView: View {
NavigationLink {
AddGroupMembersView(chat: chat, groupInfo: groupInfo)
.onAppear {
searchFocussed = false
Task {
let groupMembers = await apiListMembers(groupInfo.groupId)
await MainActor.run {
@@ -26,6 +26,7 @@ struct GroupMemberInfoView: View {
case removeMemberAlert(mem: GroupMember)
case changeMemberRoleAlert(mem: GroupMember, role: GroupMemberRole)
case switchAddressAlert
case abortSwitchAddressAlert
case connRequestSentAlert(type: ConnReqType)
case error(title: LocalizedStringKey, error: LocalizedStringKey)
case other(alert: Alert)
@@ -35,6 +36,7 @@ struct GroupMemberInfoView: View {
case .removeMemberAlert: return "removeMemberAlert"
case let .changeMemberRoleAlert(_, role): return "changeMemberRoleAlert \(role.rawValue)"
case .switchAddressAlert: return "switchAddressAlert"
case .abortSwitchAddressAlert: return "abortSwitchAddressAlert"
case .connRequestSentAlert: return "connRequestSentAlert"
case let .error(title, _): return "error \(title)"
case let .other(alert): return "other \(alert)"
@@ -127,8 +129,15 @@ struct GroupMemberInfoView: View {
Button("Change receiving address") {
alert = .switchAddressAlert
}
smpServers("Receiving via", connStats.rcvServers)
smpServers("Sending via", connStats.sndServers)
.disabled(connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil })
if connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil } {
Button("Abort changing address") {
alert = .abortSwitchAddressAlert
}
.disabled(connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil && !$0.canAbortSwitch })
}
smpServers("Receiving via", connStats.rcvQueuesInfo.map { $0.rcvServer })
smpServers("Sending via", connStats.sndQueuesInfo.map { $0.sndServer })
}
}
@@ -175,6 +184,7 @@ struct GroupMemberInfoView: View {
case let .removeMemberAlert(mem): return removeMemberAlert(mem)
case let .changeMemberRoleAlert(mem, _): return changeMemberRoleAlert(mem)
case .switchAddressAlert: return switchAddressAlert(switchMemberAddress)
case .abortSwitchAddressAlert: return abortSwitchAddressAlert(abortSwitchMemberAddress)
case let .connRequestSentAlert(type): return connReqSentAlert(type)
case let .error(title, error): return Alert(title: Text(title), message: Text(error))
case let .other(alert): return alert
@@ -346,7 +356,8 @@ struct GroupMemberInfoView: View {
private func switchMemberAddress() {
Task {
do {
try await apiSwitchGroupMember(groupInfo.apiId, member.groupMemberId)
let stats = try apiSwitchGroupMember(groupInfo.apiId, member.groupMemberId)
connectionStats = stats
} catch let error {
logger.error("switchMemberAddress apiSwitchGroupMember error: \(responseError(error))")
let a = getErrorAlert(error, "Error changing address")
@@ -356,6 +367,21 @@ struct GroupMemberInfoView: View {
}
}
}
private func abortSwitchMemberAddress() {
Task {
do {
let stats = try apiAbortSwitchGroupMember(groupInfo.apiId, member.groupMemberId)
connectionStats = stats
} catch let error {
logger.error("abortSwitchMemberAddress apiAbortSwitchGroupMember error: \(responseError(error))")
let a = getErrorAlert(error, "Error aborting address change")
await MainActor.run {
alert = .error(title: a.title, error: a.message)
}
}
}
}
}
struct GroupMemberInfoView_Previews: PreviewProvider {
@@ -25,8 +25,10 @@ struct GroupPreferencesView: View {
featureSection(.timedMessages, $preferences.timedMessages.enable)
featureSection(.fullDelete, $preferences.fullDelete.enable)
featureSection(.directMessages, $preferences.directMessages.enable)
// featureSection(.reactions, $preferences.reactions.enable)
featureSection(.reactions, $preferences.reactions.enable)
featureSection(.voice, $preferences.voice.enable)
// TODO uncomment in 5.3
// featureSection(.files, $preferences.files.enable)
if groupInfo.canEdit {
Section {
@@ -79,7 +81,7 @@ struct GroupPreferencesView: View {
DropdownCustomTimePicker(
selection: $preferences.timedMessages.ttl,
label: "Delete after",
dropdownValues: TimedMessagesPreference.ttlValues.filter { $0 != nil }, // TODO in 5.2 - allow "off"
dropdownValues: TimedMessagesPreference.ttlValues,
customPickerConfirmButtonText: "Select",
customPickerDescription: "Delete after"
)
@@ -27,7 +27,7 @@ private let rowHeights: [DynamicTypeSize: CGFloat] = [
struct ChatListNavLink: View {
@EnvironmentObject var chatModel: ChatModel
@Environment(\.dynamicTypeSize) private var dynamicTypeSize
@State var chat: Chat
@ObservedObject var chat: Chat
@State private var showContactRequestDialog = false
@State private var showJoinGroupDialog = false
@State private var showContactConnectionInfo = false
@@ -57,6 +57,8 @@ struct ChatListNavLink: View {
)
.swipeActions(edge: .leading, allowsFullSwipe: true) {
markReadButton()
toggleFavoriteButton()
toggleNtfsButton(chat)
}
.swipeActions(edge: .trailing, allowsFullSwipe: true) {
if !chat.chatItems.isEmpty {
@@ -126,6 +128,8 @@ struct ChatListNavLink: View {
.frame(height: rowHeights[dynamicTypeSize])
.swipeActions(edge: .leading, allowsFullSwipe: true) {
markReadButton()
toggleFavoriteButton()
toggleNtfsButton(chat)
}
.swipeActions(edge: .trailing, allowsFullSwipe: true) {
if !chat.chatItems.isEmpty {
@@ -134,8 +138,6 @@ struct ChatListNavLink: View {
if (groupInfo.membership.memberCurrent) {
leaveGroupChatButton(groupInfo)
}
}
.swipeActions(edge: .trailing) {
if groupInfo.canDelete {
deleteGroupChatButton(groupInfo)
}
@@ -171,6 +173,24 @@ struct ChatListNavLink: View {
}
@ViewBuilder private func toggleFavoriteButton() -> some View {
if chat.chatInfo.chatSettings?.favorite == true {
Button {
toggleChatFavorite(chat, favorite: false)
} label: {
Label("Unfav.", systemImage: "star.slash")
}
.tint(.green)
} else {
Button {
toggleChatFavorite(chat, favorite: true)
} label: {
Label("Favorite", systemImage: "star.fill")
}
.tint(.green)
}
}
private func clearChatButton() -> some View {
Button {
AlertManager.shared.showAlert(clearChatAlert())
@@ -14,7 +14,8 @@ struct ChatListView: View {
@Binding var showSettings: Bool
@State private var searchText = ""
@State private var showAddChat = false
@State var userPickerVisible = false
@State private var userPickerVisible = false
@AppStorage(DEFAULT_SHOW_UNREAD_AND_FAVORITES) private var showUnreadAndFavorites = false
var body: some View {
ZStack(alignment: .topLeading) {
@@ -56,7 +57,6 @@ struct ChatListView: View {
.onDisappear() { withAnimation { userPickerVisible = false } }
.offset(x: -8)
.listStyle(.plain)
.navigationTitle("Your chats")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
@@ -84,17 +84,19 @@ struct ChatListView: View {
}
}
ToolbarItem(placement: .principal) {
if (chatModel.incognito) {
HStack {
if (chatModel.chats.count > 8) {
Text("Your chats").font(.headline)
Spacer().frame(width: 16)
}
Image(systemName: "theatermasks").frame(maxWidth: 24, maxHeight: 24, alignment: .center).foregroundColor(.indigo)
HStack(spacing: 4) {
if (chatModel.incognito) {
Image(systemName: "theatermasks")
.foregroundColor(.indigo)
.padding(.trailing, 8)
}
Text("Chats")
.font(.headline)
if chatModel.chats.count > 0 {
toggleFilterButton()
}
} else {
Text("Your chats").font(.headline)
}
.frame(maxWidth: .infinity, alignment: .center)
}
ToolbarItem(placement: .navigationBarTrailing) {
switch chatModel.chatRunning {
@@ -106,18 +108,33 @@ struct ChatListView: View {
}
}
private var chatList: some View {
List {
ForEach(filteredChats(), id: \.viewId) { chat in
ChatListNavLink(chat: chat)
.padding(.trailing, -16)
.disabled(chatModel.chatRunning != true)
}
private func toggleFilterButton() -> some View {
Button {
showUnreadAndFavorites = !showUnreadAndFavorites
} label: {
Image(systemName: "line.3.horizontal.decrease.circle" + (showUnreadAndFavorites ? ".fill" : ""))
.foregroundColor(.accentColor)
}
.onChange(of: chatModel.chatId) { _ in
if chatModel.chatId == nil, let chatId = chatModel.chatToTop {
chatModel.chatToTop = nil
chatModel.popChat(chatId)
}
@ViewBuilder private var chatList: some View {
let cs = filteredChats()
ZStack {
List {
ForEach(cs, id: \.viewId) { chat in
ChatListNavLink(chat: chat)
.padding(.trailing, -16)
.disabled(chatModel.chatRunning != true)
}
}
.onChange(of: chatModel.chatId) { _ in
if chatModel.chatId == nil, let chatId = chatModel.chatToTop {
chatModel.chatToTop = nil
chatModel.popChat(chatId)
}
}
if cs.isEmpty && !chatModel.chats.isEmpty {
Text("No filtered chats").foregroundColor(.secondary)
}
}
}
@@ -181,19 +198,37 @@ struct ChatListView: View {
private func filteredChats() -> [Chat] {
let s = searchText.trimmingCharacters(in: .whitespaces).localizedLowercase
return s == ""
return s == "" && !showUnreadAndFavorites
? chatModel.chats
: chatModel.chats.filter { chat in
let contains = chat.chatInfo.chatViewName.localizedLowercase.contains(s)
switch chat.chatInfo {
let cInfo = chat.chatInfo
switch cInfo {
case let .direct(contact):
return contains
|| contact.profile.displayName.localizedLowercase.contains(s)
|| contact.fullName.localizedLowercase.contains(s)
case .contactConnection: return false
default: return contains
return s == ""
? filtered(chat)
: (viewNameContains(cInfo, s) ||
contact.profile.displayName.localizedLowercase.contains(s) ||
contact.fullName.localizedLowercase.contains(s))
case let .group(gInfo):
return s == ""
? (filtered(chat) || gInfo.membership.memberStatus == .memInvited)
: viewNameContains(cInfo, s)
case .contactRequest:
return s == "" || viewNameContains(cInfo, s)
case let .contactConnection(conn):
return s != "" && conn.localAlias.localizedLowercase.contains(s)
case .invalidJSON:
return false
}
}
func filtered(_ chat: Chat) -> Bool {
(chat.chatInfo.chatSettings?.favorite ?? false) || chat.chatStats.unreadCount > 0 || chat.chatStats.unreadChat
}
func viewNameContains(_ cInfo: ChatInfo, _ s: String) -> Bool {
cInfo.chatViewName.localizedLowercase.contains(s)
}
}
}
@@ -126,6 +126,13 @@ struct ChatPreviewView: View {
} else if !chat.chatInfo.ntfsEnabled {
Image(systemName: "speaker.slash.fill")
.foregroundColor(.secondary)
} else if chat.chatInfo.chatSettings?.favorite ?? false {
Image(systemName: "star.fill")
.resizable()
.scaledToFill()
.frame(width: 18, height: 18)
.padding(.trailing, 1)
.foregroundColor(.secondary.opacity(0.65))
}
}
}
@@ -26,8 +26,8 @@ struct CustomTimePicker: View {
case .minute: return TimeUnitLimits.init(timeUnit: .minute, maxValue: 120)
case .hour: return TimeUnitLimits.init(timeUnit: .hour, maxValue: 72)
case .day: return TimeUnitLimits.init(timeUnit: .day, maxValue: 60)
case .week: return TimeUnitLimits.init(timeUnit: .week, maxValue: 12) // TODO in 5.2 - 54
case .month: return TimeUnitLimits.init(timeUnit: .month, maxValue: 3) // TODO in 5.2 - 12
case .week: return TimeUnitLimits.init(timeUnit: .week, maxValue: 52)
case .month: return TimeUnitLimits.init(timeUnit: .month, maxValue: 12)
}
}
@@ -81,12 +81,11 @@ struct CreateSimpleXAddress: View {
DispatchQueue.main.async {
m.userAddress = UserContactLink(connReqContact: connReqContact)
}
// TODO uncomment in v5.2
// if let u = try await apiSetProfileAddress(on: true) {
// DispatchQueue.main.async {
// m.updateUser(u)
// }
// }
if let u = try await apiSetProfileAddress(on: true) {
DispatchQueue.main.async {
m.updateUser(u)
}
}
await MainActor.run { progressIndicator = false }
} catch let error {
logger.error("CreateSimpleXAddress create address: \(responseError(error))")
@@ -102,11 +101,9 @@ struct CreateSimpleXAddress: View {
Text("Create SimpleX address").font(.title)
}
Text("Your contacts in SimpleX will see it.\nYou can change it in Settings.")
// TODO remove in in v5.2
.foregroundColor(.clear)
.multilineTextAlignment(.center)
.font(.footnote)
.padding(.horizontal, 32)
.multilineTextAlignment(.center)
.font(.footnote)
.padding(.horizontal, 32)
}
}
@@ -20,7 +20,7 @@ struct PreferencesView: View {
List {
timedMessagesFeatureSection($preferences.timedMessages.allow)
featureSection(.fullDelete, $preferences.fullDelete.allow)
// featureSection(.reactions, $preferences.reactions.allow)
featureSection(.reactions, $preferences.reactions.allow)
featureSection(.voice, $preferences.voice.allow)
featureSection(.calls, $preferences.calls.allow)
@@ -49,6 +49,7 @@ let DEFAULT_SHOW_MUTE_PROFILE_ALERT = "showMuteProfileAlert"
let DEFAULT_WHATS_NEW_VERSION = "defaultWhatsNewVersion"
let DEFAULT_ONBOARDING_STAGE = "onboardingStage"
let DEFAULT_CUSTOM_DISAPPEARING_MESSAGE_TIME = "customDisappearingMessageTime"
let DEFAULT_SHOW_UNREAD_AND_FAVORITES = "showUnreadAndFavorites"
let appDefaults: [String: Any] = [
DEFAULT_SHOW_LA_NOTICE: false,
@@ -78,6 +79,7 @@ let appDefaults: [String: Any] = [
DEFAULT_SHOW_MUTE_PROFILE_ALERT: true,
DEFAULT_ONBOARDING_STAGE: OnboardingStage.onboardingComplete.rawValue,
DEFAULT_CUSTOM_DISAPPEARING_MESSAGE_TIME: 300,
DEFAULT_SHOW_UNREAD_AND_FAVORITES: false
]
enum SimpleXLinkMode: String, Identifiable {
@@ -195,8 +195,7 @@ struct UserAddressView: View {
if MFMailComposeViewController.canSendMail() {
shareViaEmailButton(userAddress)
}
// TODO uncomment in 5.2
// shareWithContactsButton()
shareWithContactsButton()
autoAcceptToggle()
learnMoreButton()
} header: {
@@ -223,8 +222,7 @@ struct UserAddressView: View {
let connReqContact = try await apiCreateUserAddress()
DispatchQueue.main.async {
chatModel.userAddress = UserContactLink(connReqContact: connReqContact)
// TODO uncomment in 5.2
// alert = .shareOnCreate
alert = .shareOnCreate
progressIndicator = false
}
} catch let error {
@@ -9,7 +9,6 @@ import SimpleXChat
struct UserProfilesView: View {
@EnvironmentObject private var m: ChatModel
@Environment(\.editMode) private var editMode
@AppStorage(DEFAULT_PERFORM_LA) private var prefPerformLA = false
@AppStorage(DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE) private var showHiddenProfilesNotice = true
@AppStorage(DEFAULT_SHOW_MUTE_PROFILE_ALERT) private var showMuteProfileAlert = true
@State private var showDeleteConfirmation = false
@@ -157,7 +156,7 @@ struct UserProfilesView: View {
case .hiddenProfilesNotice:
return Alert(
title: Text("Make profile private!"),
message: Text("You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled."),
message: Text("You can hide or mute a user profile - swipe it to the right."),
primaryButton: .default(Text("Don't show again")) {
showHiddenProfilesNotice = false
},
@@ -338,7 +337,7 @@ struct UserProfilesView: View {
}
.tint(.green)
} else {
if visibleUsersCount > 1 && prefPerformLA {
if visibleUsersCount > 1 {
Button("Hide") {
selectedUser = user
}
@@ -400,6 +400,18 @@
**Upozornění**: Pokud máte mnoho připojení, spotřeba baterie a provozu může být podstatně vyšší a některá připojení mohou selhat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort" xml:space="preserve">
<source>Abort</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address" xml:space="preserve">
<source>Abort changing address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address?" xml:space="preserve">
<source>Abort changing address?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
<source>About SimpleX</source>
<target>O SimpleX</target>
@@ -481,6 +493,10 @@
<target>Adresa</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Address change will be aborted. Old receiving address will be used." xml:space="preserve">
<source>Address change will be aborted. Old receiving address will be used.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Správci mohou vytvářet odkazy pro připojení ke skupinám.</target>
@@ -1780,6 +1796,10 @@
<target>Chyba</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error aborting address change" xml:space="preserve">
<source>Error aborting address change</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error accepting contact request" xml:space="preserve">
<source>Error accepting contact request</source>
<target>Chyba při přijímání žádosti o kontakt</target>
@@ -2040,6 +2060,10 @@
<target>Rychle a bez čekání, než bude odesílatel online!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>Soubor bude smazán ze serverů.</target>
@@ -3397,6 +3421,10 @@
<target>Přijatá zpráva</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>Příjem souboru bude zastaven.</target>
@@ -4002,6 +4030,11 @@
<target>Přeskočené zprávy</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
<target>Během importu došlo k nezávažným chybám - podrobnosti naleznete v chat konzoli.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Somebody" xml:space="preserve">
<source>Somebody</source>
<target>Někdo</target>
@@ -4294,11 +4327,6 @@ Může se to stát kvůli nějaké chybě, nebo pokud je spojení kompromitován
<target>Tato chyba je pro toto připojení trvalá, připojte se znovu.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member).</source>
<target>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.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group no longer exists." xml:space="preserve">
<source>This group no longer exists.</source>
<target>Tato skupina již neexistuje.</target>
@@ -4411,6 +4439,10 @@ Před zapnutím této funkce budete vyzváni k dokončení ověření.</target>
<target>Neočekávaný stav přenášení</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<target>Odkrýt</target>
@@ -4758,11 +4790,9 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<target>Můžete vytvořit později</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<target>Profil uživatele můžete skrýt nebo ztlumit - přejeďte prstem doprava.
SimpleX zámek musí být povolen.</target>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Profil uživatele můžete skrýt nebo ztlumit - přejeďte prstem doprava.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -4970,11 +5000,6 @@ SimpleX zámek musí být povolen.</target>
<target>Vaše chat profily</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>Vaše konverzace</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your contact needs to be online for the connection to complete.&#10;You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
<source>Your contact needs to be online for the connection to complete.
You can cancel this connection and remove the contact (and try later with a new link).</source>
@@ -301,9 +301,9 @@
<source>- voice messages up to 5 minutes.
- custom time to disappear.
- editing history.</source>
<target>- Bis zu 5 Minuten lange Sprachnachrichten
- Zeit für verschwindende Nachrichten anpassen
- Vergangenheit bearbeiten</target>
<target>- Bis zu 5 Minuten lange Sprachnachrichten.
- Zeitdauer für verschwindende Nachrichten anpassen.
- Nachrichten-Historie bearbeiten.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="." xml:space="preserve">
@@ -400,6 +400,18 @@
**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="Abort" xml:space="preserve">
<source>Abort</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address" xml:space="preserve">
<source>Abort changing address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address?" xml:space="preserve">
<source>Abort changing address?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
<source>About SimpleX</source>
<target>Über SimpleX</target>
@@ -481,6 +493,10 @@
<target>Adresse</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Address change will be aborted. Old receiving address will be used." xml:space="preserve">
<source>Address change will be aborted. Old receiving address will be used.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Administratoren können Links für den Beitritt zu Gruppen erzeugen.</target>
@@ -493,7 +509,7 @@
</trans-unit>
<trans-unit id="All app data is deleted." xml:space="preserve">
<source>All app data is deleted.</source>
<target>App-Daten werden komplett gelöscht.</target>
<target>Werden die App-Daten komplett gelöscht.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All chats and messages will be deleted - this cannot be undone!" xml:space="preserve">
@@ -503,7 +519,7 @@
</trans-unit>
<trans-unit id="All data is erased when it is entered." xml:space="preserve">
<source>All data is erased when it is entered.</source>
<target>Sobald es eingegeben wird, werden alle Daten gelöscht.</target>
<target>Alle Daten werden gelöscht, sobald diese eingegeben wird.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All group members will remain connected." xml:space="preserve">
@@ -643,12 +659,12 @@
</trans-unit>
<trans-unit id="App passcode" xml:space="preserve">
<source>App passcode</source>
<target>App Passwort</target>
<target>App-Zugangscode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App passcode is replaced with self-destruct passcode." xml:space="preserve">
<source>App passcode is replaced with self-destruct passcode.</source>
<target>Das App Passwort wurde durch das Selbstzerstörungspasswort ersetzt.</target>
<target>App-Zugangscode wurde durch den Selbstzerstörungs-Zugangscode ersetzt.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App version" xml:space="preserve">
@@ -663,7 +679,7 @@
</trans-unit>
<trans-unit id="Appearance" xml:space="preserve">
<source>Appearance</source>
<target>Design</target>
<target>Erscheinungsbild</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve">
@@ -838,7 +854,7 @@
</trans-unit>
<trans-unit id="Change passcode" xml:space="preserve">
<source>Change passcode</source>
<target>Passwort ändern</target>
<target>Zugangscode ändern</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change receiving address" xml:space="preserve">
@@ -863,7 +879,7 @@
</trans-unit>
<trans-unit id="Change self-destruct passcode" xml:space="preserve">
<source>Change self-destruct passcode</source>
<target>Selbstzerstörungspasswort ändern</target>
<target>Selbstzerstörungs-Zugangscode ändern</target>
<note>authentication reason
set passcode view</note>
</trans-unit>
@@ -874,7 +890,7 @@
</trans-unit>
<trans-unit id="Chat console" xml:space="preserve">
<source>Chat console</source>
<target>Chat Konsole</target>
<target>Chat-Konsole</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat database" xml:space="preserve">
@@ -979,7 +995,7 @@
</trans-unit>
<trans-unit id="Confirm Passcode" xml:space="preserve">
<source>Confirm Passcode</source>
<target>Passwort bestätigen</target>
<target>Zugangscode bestätigen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Confirm database upgrades" xml:space="preserve">
@@ -1184,7 +1200,7 @@
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
<source>Current Passcode</source>
<target>Aktuelles Passwort</target>
<target>Aktueller Zugangscode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current passphrase…" xml:space="preserve">
@@ -1692,7 +1708,7 @@
</trans-unit>
<trans-unit id="Enable self-destruct passcode" xml:space="preserve">
<source>Enable self-destruct passcode</source>
<target>Selbstzerstörungspasswort aktivieren</target>
<target>Selbstzerstörungs-Zugangscode aktivieren</target>
<note>set passcode view</note>
</trans-unit>
<trans-unit id="Encrypt" xml:space="preserve">
@@ -1742,7 +1758,7 @@
</trans-unit>
<trans-unit id="Enter Passcode" xml:space="preserve">
<source>Enter Passcode</source>
<target>Passwort eingeben</target>
<target>Zugangscode eingeben</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter correct passphrase." xml:space="preserve">
@@ -1780,6 +1796,10 @@
<target>Fehler</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error aborting address change" xml:space="preserve">
<source>Error aborting address change</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error accepting contact request" xml:space="preserve">
<source>Error accepting contact request</source>
<target>Fehler beim Annehmen der Kontaktanfrage</target>
@@ -1927,7 +1947,7 @@
</trans-unit>
<trans-unit id="Error saving passcode" xml:space="preserve">
<source>Error saving passcode</source>
<target>Fehler beim Speichern des Passworts</target>
<target>Fehler beim Speichern des Zugangscodes</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error saving passphrase to keychain" xml:space="preserve">
@@ -2040,6 +2060,10 @@
<target>Schnell und ohne warten auf den Absender, bis er online ist!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>Die Datei wird von den Servern gelöscht.</target>
@@ -2307,12 +2331,12 @@
</trans-unit>
<trans-unit id="If you enter this passcode when opening the app, all app data will be irreversibly removed!" xml:space="preserve">
<source>If you enter this passcode when opening the app, all app data will be irreversibly removed!</source>
<target>Wenn Sie dieses Passwort während des Öffnens der App eingeben, werden alle App-Daten unwiederbringlich gelöscht!</target>
<target>Wenn Sie diesen Zugangscode während des Öffnens der App eingeben, werden alle App-Daten unwiederbringlich gelöscht!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If you enter your self-destruct passcode while opening the app:" xml:space="preserve">
<source>If you enter your self-destruct passcode while opening the app:</source>
<target>Wenn Sie Ihr Selbstzerstörungspasswort während des Öffnens der App eingeben:</target>
<target>Wenn Sie Ihren Selbstzerstörungs-Zugangscode während des Öffnens der App eingeben:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app)." xml:space="preserve">
@@ -2412,7 +2436,7 @@
</trans-unit>
<trans-unit id="Incorrect passcode" xml:space="preserve">
<source>Incorrect passcode</source>
<target>Passwort falsch</target>
<target>Zugangscode ist falsch</target>
<note>PIN entry</note>
</trans-unit>
<trans-unit id="Incorrect security code!" xml:space="preserve">
@@ -2835,7 +2859,7 @@
</trans-unit>
<trans-unit id="New Passcode" xml:space="preserve">
<source>New Passcode</source>
<target>Neues Passwort</target>
<target>Neuer Zugangscode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
@@ -3094,27 +3118,27 @@
</trans-unit>
<trans-unit id="Passcode" xml:space="preserve">
<source>Passcode</source>
<target>Passwort</target>
<target>Zugangscode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode changed!" xml:space="preserve">
<source>Passcode changed!</source>
<target>Passwort geändert!</target>
<target>Zugangscode wurde geändert!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode entry" xml:space="preserve">
<source>Passcode entry</source>
<target>Passworteingabe</target>
<target>Eingabe des Zugangscodes</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode not changed!" xml:space="preserve">
<source>Passcode not changed!</source>
<target>Passwort wurde nicht geändert!</target>
<target>Der Zugangscode wurde nicht geändert!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Passcode set!" xml:space="preserve">
<source>Passcode set!</source>
<target>Passwort wurde geändert!</target>
<target>Zugangscode eingestellt!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Password to show" xml:space="preserve">
@@ -3194,7 +3218,7 @@
</trans-unit>
<trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve">
<source>Please remember or store it securely - there is no way to recover a lost passcode!</source>
<target>Es gibt keine Möglichkeit ein vergessenes Passwort wiederherzustellen - bitte erinnern Sie sich gut daran oder speichern Sie es sicher ab!</target>
<target>Es gibt keine Möglichkeit einen vergessenen Zugangscode wiederherzustellen - bitte erinnern Sie sich gut daran oder speichern Sie ihn sicher ab!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please report it to the developers." xml:space="preserve">
@@ -3397,6 +3421,10 @@
<target>Empfangene Nachricht</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>Der Empfang der Datei wird beendet.</target>
@@ -3704,17 +3732,17 @@
</trans-unit>
<trans-unit id="Self-destruct passcode" xml:space="preserve">
<source>Self-destruct passcode</source>
<target>Selbstzerstörungspasswort</target>
<target>Selbstzerstörungs-Zugangscode</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Self-destruct passcode changed!" xml:space="preserve">
<source>Self-destruct passcode changed!</source>
<target>Das Selbstzerstörungspasswort wurde geändert!</target>
<target>Der Selbstzerstörungs-Zugangscode wurde geändert!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Self-destruct passcode enabled!" xml:space="preserve">
<source>Self-destruct passcode enabled!</source>
<target>Das Selbstzerstörungspasswort wurde aktiviert!</target>
<target>Der Selbstzerstörungs-Zugangscode wurde aktiviert!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send" xml:space="preserve">
@@ -3854,7 +3882,7 @@
</trans-unit>
<trans-unit id="Set passcode" xml:space="preserve">
<source>Set passcode</source>
<target>Passwort eingeben</target>
<target>Zugangscode einstellen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passphrase to export" xml:space="preserve">
@@ -4002,6 +4030,11 @@
<target>Übersprungene Nachrichten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
<target>Während des Imports sind einige nicht schwerwiegende Fehler aufgetreten - in der Chat-Konsole finden Sie weitere Einzelheiten.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Somebody" xml:space="preserve">
<source>Somebody</source>
<target>Jemand</target>
@@ -4074,7 +4107,7 @@
</trans-unit>
<trans-unit id="Submit" xml:space="preserve">
<source>Submit</source>
<target>Übermitteln</target>
<target>Bestätigen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Support SimpleX Chat" xml:space="preserve">
@@ -4294,11 +4327,6 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro
<target>Es handelt sich um einen permanenten Fehler für diese Verbindung - bitte verbinden Sie sich neu.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member).</source>
<target>Diese Funktion ist experimentell! Sie wird nur funktionieren, wenn der Kontakt ebenfalls eine SimpleX-Version ab v4.2 installiert hat. Sobald der Adress-Wechsel abgeschlossen ist, sollten Sie die Nachricht im Chat-Verlauf sehen. Bitte prüfen Sie, ob Sie weiterhin Nachrichten von diesem Kontakt (oder Gruppenmitglied) empfangen können.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group no longer exists." xml:space="preserve">
<source>This group no longer exists.</source>
<target>Diese Gruppe existiert nicht mehr.</target>
@@ -4411,6 +4439,10 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt
<target>Unerwarteter Migrationsstatus</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<target>Verbergen aufheben</target>
@@ -4758,11 +4790,9 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Sie können dies später erstellen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<target>Sie können ein Benutzerprofil verbergen oder stummschalten - wischen Sie es nach rechts.
Dafür muss die SimpleX Sperre aktiviert sein.</target>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Sie können ein Benutzerprofil verbergen oder stummschalten - wischen Sie es nach rechts.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -4970,11 +5000,6 @@ Dafür muss die SimpleX Sperre aktiviert sein.</target>
<target>Meine Chat-Profile</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>Meine Chats</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your contact needs to be online for the connection to complete.&#10;You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
<source>Your contact needs to be online for the connection to complete.
You can cancel this connection and remove the contact (and try later with a new link).</source>
@@ -5669,7 +5694,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</trans-unit>
<trans-unit id="you are invited to group" xml:space="preserve">
<source>you are invited to group</source>
<target>Sie sind zur Gruppe eingeladen</target>
<target>Sie sind zu der Gruppe eingeladen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="you are observer" xml:space="preserve">
@@ -400,6 +400,21 @@
**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort" xml:space="preserve">
<source>Abort</source>
<target>Abort</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address" xml:space="preserve">
<source>Abort changing address</source>
<target>Abort changing address</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address?" xml:space="preserve">
<source>Abort changing address?</source>
<target>Abort changing address?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
<source>About SimpleX</source>
<target>About SimpleX</target>
@@ -481,6 +496,11 @@
<target>Address</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Address change will be aborted. Old receiving address will be used." xml:space="preserve">
<source>Address change will be aborted. Old receiving address will be used.</source>
<target>Address change will be aborted. Old receiving address will be used.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Admins can create the links to join groups.</target>
@@ -1780,6 +1800,11 @@
<target>Error</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error aborting address change" xml:space="preserve">
<source>Error aborting address change</source>
<target>Error aborting address change</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error accepting contact request" xml:space="preserve">
<source>Error accepting contact request</source>
<target>Error accepting contact request</target>
@@ -2040,6 +2065,11 @@
<target>Fast and no wait until the sender is online!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<target>Favorite</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>File will be deleted from servers.</target>
@@ -3397,6 +3427,11 @@
<target>Received message</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
<target>Receiving address will be changed to a different server. Address change will complete after sender comes online.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>Receiving file will be stopped.</target>
@@ -4002,6 +4037,11 @@
<target>Skipped messages</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
<target>Some non-fatal errors occurred during import - you may see Chat console for more details.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Somebody" xml:space="preserve">
<source>Somebody</source>
<target>Somebody</target>
@@ -4294,11 +4334,6 @@ It can happen because of some bug or when the connection is compromised.</target
<target>This error is permanent for this connection, please re-connect.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member).</source>
<target>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group no longer exists." xml:space="preserve">
<source>This group no longer exists.</source>
<target>This group no longer exists.</target>
@@ -4411,6 +4446,11 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Unexpected migration state</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<target>Unfav.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<target>Unhide</target>
@@ -4758,11 +4798,9 @@ To connect, please ask your contact to create another connection link and check
<target>You can create it later</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<target>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</target>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>You can hide or mute a user profile - swipe it to the right.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -4970,11 +5008,6 @@ SimpleX Lock must be enabled.</target>
<target>Your chat profiles</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>Your chats</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your contact needs to be online for the connection to complete.&#10;You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
<source>Your contact needs to be online for the connection to complete.
You can cancel this connection and remove the contact (and try later with a new link).</source>
@@ -400,6 +400,18 @@
**Atención**: si tienes muchas conexiones, tu consumo de batería y tráfico pueden ser sustancialmente mayores y algunas conexiones pueden fallar.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort" xml:space="preserve">
<source>Abort</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address" xml:space="preserve">
<source>Abort changing address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address?" xml:space="preserve">
<source>Abort changing address?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
<source>About SimpleX</source>
<target>Acerca de SimpleX</target>
@@ -481,6 +493,10 @@
<target>Dirección</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Address change will be aborted. Old receiving address will be used." xml:space="preserve">
<source>Address change will be aborted. Old receiving address will be used.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Los administradores pueden crear enlaces para unirse a grupos.</target>
@@ -498,7 +514,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>Se eliminarán todos los chats y mensajes. ¡No se puede deshacer!</target>
<target>Se eliminarán todos los chats y mensajes. ¡No podrá deshacerse!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All data is erased when it is entered." xml:space="preserve">
@@ -513,7 +529,7 @@
</trans-unit>
<trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve">
<source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source>
<target>Se eliminarán todos los mensajes SOLO para tí. ¡No se puede deshacer!</target>
<target>Se eliminarán todos los mensajes SOLO para tí. ¡No podrá deshacerse!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
@@ -1079,7 +1095,7 @@
</trans-unit>
<trans-unit id="Contact and all messages will be deleted - this cannot be undone!" xml:space="preserve">
<source>Contact and all messages will be deleted - this cannot be undone!</source>
<target>El contacto y todos los mensajes serán eliminados. ¡No se puede deshacer!</target>
<target>El contacto y todos los mensajes serán eliminados. ¡No podrá deshacerse!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Contact hidden:" xml:space="preserve">
@@ -1139,7 +1155,7 @@
</trans-unit>
<trans-unit id="Create an address to let people connect with you." xml:space="preserve">
<source>Create an address to let people connect with you.</source>
<target>Crear una dirección para que la gente se pueda conectar contigo.</target>
<target>Crear una dirección para que otras personas se puedan conectar contigo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create file" xml:space="preserve">
@@ -1780,6 +1796,10 @@
<target>Error</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error aborting address change" xml:space="preserve">
<source>Error aborting address change</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error accepting contact request" xml:space="preserve">
<source>Error accepting contact request</source>
<target>Error aceptando la solicitud del contacto</target>
@@ -2040,6 +2060,10 @@
<target>¡Rápido y sin necesidad de esperar a que el remitente esté en línea!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>El archivo será eliminado de los servidores.</target>
@@ -2212,12 +2236,12 @@
</trans-unit>
<trans-unit id="Group will be deleted for all members - this cannot be undone!" xml:space="preserve">
<source>Group will be deleted for all members - this cannot be undone!</source>
<target>El grupo se eliminará para todos los miembros. ¡No se puede deshacer!</target>
<target>El grupo se eliminará para todos los miembros. ¡No podrá deshacerse!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group will be deleted for you - this cannot be undone!" xml:space="preserve">
<source>Group will be deleted for you - this cannot be undone!</source>
<target>El grupo se eliminará para tí. ¡No se puede deshacer!</target>
<target>El grupo se eliminará para tí. ¡No podrá deshacerse!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Help" xml:space="preserve">
@@ -2550,7 +2574,7 @@
</trans-unit>
<trans-unit id="Joining group" xml:space="preserve">
<source>Joining group</source>
<target>Únete al grupo</target>
<target>Entrando al grupo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="KeyChain error" xml:space="preserve">
@@ -2705,7 +2729,7 @@
</trans-unit>
<trans-unit id="Member will be removed from group - this cannot be undone!" xml:space="preserve">
<source>Member will be removed from group - this cannot be undone!</source>
<target>El miembro será expulsado del grupo. ¡No se puede deshacer!</target>
<target>El miembro será expulsado del grupo. ¡No podrá deshacerse!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message delivery error" xml:space="preserve">
@@ -2870,7 +2894,7 @@
</trans-unit>
<trans-unit id="New message" xml:space="preserve">
<source>New message</source>
<target>mensaje nuevo</target>
<target>Mensaje nuevo</target>
<note>notification</note>
</trans-unit>
<trans-unit id="New passphrase…" xml:space="preserve">
@@ -3154,7 +3178,7 @@
</trans-unit>
<trans-unit id="Permanent decryption error" xml:space="preserve">
<source>Permanent decryption error</source>
<target>Error de descifrado</target>
<target>Error de descifrado permanente</target>
<note>message decrypt error item</note>
</trans-unit>
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
@@ -3194,7 +3218,7 @@
</trans-unit>
<trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve">
<source>Please remember or store it securely - there is no way to recover a lost passcode!</source>
<target>Por favor, recuerda y guarda el código de acceso en un lugar seguro. ¡No hay ninguna manera de recuperar un código perdido!</target>
<target>Por favor, recuerda y guarda el código de acceso en un lugar seguro. ¡No hay forma de recuperar un código perdido!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please report it to the developers." xml:space="preserve">
@@ -3397,6 +3421,10 @@
<target>Mensaje entrante</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>Se detendrá la recepción del archivo.</target>
@@ -4002,6 +4030,11 @@
<target>Mensajes omitidos</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
<target>Algunos errores no críticos ocurrieron durante la importación - para más detalles puedes ver la consola de Chat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Somebody" xml:space="preserve">
<source>Somebody</source>
<target>Alguien</target>
@@ -4294,11 +4327,6 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida.</target>
<target>El error es permanente para esta conexión, por favor vuelve a conectarte.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member).</source>
<target>¡Experimental! Sólo funcionará si el otro cliente tiene instalada la versión 4.2. Deberías ver el mensaje en la conversación una vez completado el cambio de dirección. Comprueba que puedes seguir recibiendo mensajes de este contacto (o miembro del grupo).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group no longer exists." xml:space="preserve">
<source>This group no longer exists.</source>
<target>Este grupo ya no existe.</target>
@@ -4411,6 +4439,10 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t
<target>Estado de migración inesperado</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<target>Mostrar</target>
@@ -4759,11 +4791,9 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
<target>Puedes crearlo más tarde</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<target>Puedes ocultar o silenciar un perfil de usuario: deslízalo hacia la derecha.
Bloqueo SimpleX debe estar activado.</target>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Puedes ocultar o silenciar un perfil de usuario: deslízalo hacia la derecha.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -4843,7 +4873,7 @@ Bloqueo SimpleX debe estar activado.</target>
</trans-unit>
<trans-unit id="You joined this group. Connecting to inviting group member." xml:space="preserve">
<source>You joined this group. Connecting to inviting group member.</source>
<target>Te has unido a este grupo. Conectando con el miembro que emite la invitacíon.</target>
<target>Te has unido a este grupo. Conectando con el emisor de la invitacíon.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts." xml:space="preserve">
@@ -4923,12 +4953,12 @@ Bloqueo SimpleX debe estar activado.</target>
</trans-unit>
<trans-unit id="Your ICE servers" xml:space="preserve">
<source>Your ICE servers</source>
<target>Mis servidores ICE</target>
<target>Servidores ICE</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your SMP servers" xml:space="preserve">
<source>Your SMP servers</source>
<target>Mis servidores SMP</target>
<target>Servidores SMP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your SimpleX address" xml:space="preserve">
@@ -4938,12 +4968,12 @@ Bloqueo SimpleX debe estar activado.</target>
</trans-unit>
<trans-unit id="Your XFTP servers" xml:space="preserve">
<source>Your XFTP servers</source>
<target>Mis servidores XFTP</target>
<target>Servidores XFTP</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your calls" xml:space="preserve">
<source>Your calls</source>
<target>Mis llamadas</target>
<target>Llamadas</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chat database" xml:space="preserve">
@@ -4971,11 +5001,6 @@ Bloqueo SimpleX debe estar activado.</target>
<target>Mis perfiles</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>Mis chats</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your contact needs to be online for the connection to complete.&#10;You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
<source>Your contact needs to be online for the connection to complete.
You can cancel this connection and remove the contact (and try later with a new link).</source>
@@ -5,137 +5,171 @@
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="&#10;" xml:space="preserve">
<trans-unit id="&#10;" xml:space="preserve" approved="no">
<source>
</source>
<target state="translated">
</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
<trans-unit id=" " xml:space="preserve" approved="no">
<source> </source>
<target state="translated"> </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
<trans-unit id=" " xml:space="preserve" approved="no">
<source> </source>
<target state="translated"> </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
<trans-unit id=" " xml:space="preserve" approved="no">
<source> </source>
<target state="translated"> </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" (" xml:space="preserve">
<trans-unit id=" (" xml:space="preserve" approved="no">
<source> (</source>
<target state="translated"> (</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" (can be copied)" xml:space="preserve">
<trans-unit id=" (can be copied)" xml:space="preserve" approved="no">
<source> (can be copied)</source>
<target state="translated"> (voidaan kopioida)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="!1 colored!" xml:space="preserve">
<trans-unit id="!1 colored!" xml:space="preserve" approved="no">
<source>!1 colored!</source>
<target state="translated">!1 värillinen!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="#secret#" xml:space="preserve">
<trans-unit id="#secret#" xml:space="preserve" approved="no">
<source>#secret#</source>
<target state="translated">#salaisuus#</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@" xml:space="preserve">
<trans-unit id="%@" xml:space="preserve" approved="no">
<source>%@</source>
<target state="translated">% @</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ %@" xml:space="preserve">
<trans-unit id="%@ %@" xml:space="preserve" approved="no">
<source>%@ %@</source>
<target state="translated">%@ % @</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ / %@" xml:space="preserve">
<trans-unit id="%@ / %@" xml:space="preserve" approved="no">
<source>%@ / %@</source>
<target state="translated">%@ / % @</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<trans-unit id="%@ is connected!" xml:space="preserve" approved="no">
<source>%@ is connected!</source>
<target state="translated">%@ on yhdistetty!</target>
<note>notification title</note>
</trans-unit>
<trans-unit id="%@ is not verified" xml:space="preserve">
<trans-unit id="%@ is not verified" xml:space="preserve" approved="no">
<source>%@ is not verified</source>
<target state="translated">%@ ei ole vahvistettu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is verified" xml:space="preserve">
<trans-unit id="%@ is verified" xml:space="preserve" approved="no">
<source>%@ is verified</source>
<target state="translated">%@ on vahvistettu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<trans-unit id="%@ wants to connect!" xml:space="preserve" approved="no">
<source>%@ wants to connect!</source>
<target state="translated">%@ haluaa muodostaa yhteyden!</target>
<note>notification title</note>
</trans-unit>
<trans-unit id="%d days" xml:space="preserve">
<trans-unit id="%d days" xml:space="preserve" approved="no">
<source>%d days</source>
<target state="translated">%d päivää</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d hours" xml:space="preserve">
<trans-unit id="%d hours" xml:space="preserve" approved="no">
<source>%d hours</source>
<target state="translated">%d tuntia</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d min" xml:space="preserve">
<trans-unit id="%d min" xml:space="preserve" approved="no">
<source>%d min</source>
<target state="translated">%d min</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d months" xml:space="preserve">
<trans-unit id="%d months" xml:space="preserve" approved="no">
<source>%d months</source>
<target state="translated">%d kuukautta</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d sec" xml:space="preserve">
<trans-unit id="%d sec" xml:space="preserve" approved="no">
<source>%d sec</source>
<target state="translated">%d sek</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d skipped message(s)" xml:space="preserve">
<trans-unit id="%d skipped message(s)" xml:space="preserve" approved="no">
<source>%d skipped message(s)</source>
<target state="translated">%d ohitettua viestiä</target>
<note>integrity error chat item</note>
</trans-unit>
<trans-unit id="%lld" xml:space="preserve">
<trans-unit id="%lld" xml:space="preserve" approved="no">
<source>%lld</source>
<target state="translated">%lld</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld %@" xml:space="preserve">
<trans-unit id="%lld %@" xml:space="preserve" approved="no">
<source>%lld %@</source>
<target state="translated">%lld %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld contact(s) selected" xml:space="preserve">
<trans-unit id="%lld contact(s) selected" xml:space="preserve" approved="no">
<source>%lld contact(s) selected</source>
<target state="translated">%lld kontaktia valittu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld file(s) with total size of %@" xml:space="preserve">
<trans-unit id="%lld file(s) with total size of %@" xml:space="preserve" approved="no">
<source>%lld file(s) with total size of %@</source>
<target state="translated">%lld tiedosto(a), joiden kokonaiskoko on %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld members" xml:space="preserve">
<trans-unit id="%lld members" xml:space="preserve" approved="no">
<source>%lld members</source>
<target state="translated">%lld jäsenet</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld second(s)" xml:space="preserve">
<trans-unit id="%lld second(s)" xml:space="preserve" approved="no">
<source>%lld second(s)</source>
<target state="translated">%lld sekunti(a)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldd" xml:space="preserve">
<trans-unit id="%lldd" xml:space="preserve" approved="no">
<source>%lldd</source>
<target state="translated">%lldd</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldh" xml:space="preserve">
<trans-unit id="%lldh" xml:space="preserve" approved="no">
<source>%lldh</source>
<target state="translated">%lldh</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldk" xml:space="preserve">
<trans-unit id="%lldk" xml:space="preserve" approved="no">
<source>%lldk</source>
<target state="translated">%lldk</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldm" xml:space="preserve">
<trans-unit id="%lldm" xml:space="preserve" approved="no">
<source>%lldm</source>
<target state="translated">%lldm</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldmth" xml:space="preserve">
<trans-unit id="%lldmth" xml:space="preserve" approved="no">
<source>%lldmth</source>
<target state="translated">%lldmth</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%llds" xml:space="preserve">
<trans-unit id="%llds" xml:space="preserve" approved="no">
<source>%llds</source>
<target state="translated">%llds</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldw" xml:space="preserve">
@@ -3750,6 +3784,41 @@ SimpleX servers cannot see your profile.</source>
<source>\~strike~</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ (current)" xml:space="preserve" approved="no">
<source>%@ (current)</source>
<target state="translated">%@ (nykyinen)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ (current):" xml:space="preserve" approved="no">
<source>%@ (current):</source>
<target state="translated">% (nykyinen):</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="%@ servers" xml:space="preserve" approved="no">
<source>%@ servers</source>
<target state="translated">%@ palvelimet</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve" approved="no">
<source>%lld minutes</source>
<target state="translated">%lld minuuttia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@:" xml:space="preserve" approved="no">
<source>%@:</source>
<target state="needs-translation">%@:</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="%d weeks" xml:space="preserve" approved="no">
<source>%d weeks</source>
<target state="translated">%d viikkoa</target>
<note>time interval</note>
</trans-unit>
<trans-unit id="%lld seconds" xml:space="preserve" approved="no">
<source>%lld seconds</source>
<target state="translated">%lld sekuntia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
</body>
</file>
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="fi" datatype="plaintext">
@@ -400,6 +400,18 @@
**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="Abort" xml:space="preserve">
<source>Abort</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address" xml:space="preserve">
<source>Abort changing address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address?" xml:space="preserve">
<source>Abort changing address?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
<source>About SimpleX</source>
<target>À propos de SimpleX</target>
@@ -481,6 +493,10 @@
<target>Adresse</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Address change will be aborted. Old receiving address will be used." xml:space="preserve">
<source>Address change will be aborted. Old receiving address will be used.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Les admins peuvent créer les liens qui permettent de rejoindre les groupes.</target>
@@ -1780,6 +1796,10 @@
<target>Erreur</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error aborting address change" xml:space="preserve">
<source>Error aborting address change</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error accepting contact request" xml:space="preserve">
<source>Error accepting contact request</source>
<target>Erreur de validation de la demande de contact</target>
@@ -2040,6 +2060,10 @@
<target>Rapide et ne nécessitant pas d'attendre que l'expéditeur soit en ligne !</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>Le fichier sera supprimé des serveurs.</target>
@@ -3397,6 +3421,10 @@
<target>Message reçu</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>La réception du fichier sera interrompue.</target>
@@ -4002,6 +4030,11 @@
<target>Messages manqués</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
<target>Des erreurs non fatales se sont produites lors de l'importation - vous pouvez consulter la console de chat pour plus de détails.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Somebody" xml:space="preserve">
<source>Somebody</source>
<target>Quelqu'un</target>
@@ -4294,11 +4327,6 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise.
<target>Cette erreur est persistante pour cette connexion, veuillez vous reconnecter.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member).</source>
<target>Cette fonctionnalité est expérimentale ! Elle ne fonctionnera que si l'autre client a la version 4.2 installée. Vous devriez voir le message dans la conversation une fois le changement d'adresse effectué. Vérifiez que vous pouvez toujours recevoir des messages de ce contact (ou membre du groupe).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group no longer exists." xml:space="preserve">
<source>This group no longer exists.</source>
<target>Ce groupe n'existe plus.</target>
@@ -4411,6 +4439,10 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s
<target>État de la migration inattendu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<target>Dévoiler</target>
@@ -4758,11 +4790,9 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Vous pouvez la créer plus tard</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<target>Vous pouvez masquer ou mettre en sourdine un profil d'utilisateur - faites-le glisser vers la droite.
SimpleX Lock doit être activé.</target>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Vous pouvez masquer ou mettre en sourdine un profil d'utilisateur - faites-le glisser vers la droite.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -4970,11 +5000,6 @@ SimpleX Lock doit être activé.</target>
<target>Vos profils de chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>Vos chats</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your contact needs to be online for the connection to complete.&#10;You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
<source>Your contact needs to be online for the connection to complete.
You can cancel this connection and remove the contact (and try later with a new link).</source>
@@ -5,9 +5,11 @@
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
</header>
<body>
<trans-unit id="&#10;" xml:space="preserve">
<trans-unit id="&#10;" xml:space="preserve" approved="no">
<source>
</source>
<target state="translated">
</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="&#10;Available in v5.1" xml:space="preserve">
@@ -15,168 +17,209 @@
Available in v5.1</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
<trans-unit id=" " xml:space="preserve" approved="no">
<source> </source>
<target state="translated"> </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
<trans-unit id=" " xml:space="preserve" approved="no">
<source> </source>
<target state="translated"> </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" " xml:space="preserve">
<trans-unit id=" " xml:space="preserve" approved="no">
<source> </source>
<target state="translated"> </target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" (" xml:space="preserve">
<trans-unit id=" (" xml:space="preserve" approved="no">
<source> (</source>
<target state="translated"> (</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=" (can be copied)" xml:space="preserve">
<trans-unit id=" (can be copied)" xml:space="preserve" approved="no">
<source> (can be copied)</source>
<target state="translated"> (ניתן להעתקה)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="!1 colored!" xml:space="preserve">
<trans-unit id="!1 colored!" xml:space="preserve" approved="no">
<source>!1 colored!</source>
<target state="translated">!1 צבעוני!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="#secret#" xml:space="preserve">
<trans-unit id="#secret#" xml:space="preserve" approved="no">
<source>#secret#</source>
<target state="translated">#סוד#</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@" xml:space="preserve">
<trans-unit id="%@" xml:space="preserve" approved="no">
<source>%@</source>
<target state="translated">%@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ %@" xml:space="preserve">
<trans-unit id="%@ %@" xml:space="preserve" approved="no">
<source>%@ %@</source>
<target state="translated">%@ %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ / %@" xml:space="preserve">
<trans-unit id="%@ / %@" xml:space="preserve" approved="no">
<source>%@ / %@</source>
<target state="translated">%@ / %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<trans-unit id="%@ is connected!" xml:space="preserve" approved="no">
<source>%@ is connected!</source>
<target state="translated">%@ מחובר/ת!</target>
<note>notification title</note>
</trans-unit>
<trans-unit id="%@ is not verified" xml:space="preserve">
<trans-unit id="%@ is not verified" xml:space="preserve" approved="no">
<source>%@ is not verified</source>
<target state="translated">%@ לא מאומת/ת</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is verified" xml:space="preserve">
<trans-unit id="%@ is verified" xml:space="preserve" approved="no">
<source>%@ is verified</source>
<target state="translated">%@ מאומת/ת</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ servers" xml:space="preserve">
<trans-unit id="%@ servers" xml:space="preserve" approved="no">
<source>%@ servers</source>
<target state="translated">%@ שרתים</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<trans-unit id="%@ wants to connect!" xml:space="preserve" approved="no">
<source>%@ wants to connect!</source>
<target state="translated">%@ רוצה שתתחברו!</target>
<note>notification title</note>
</trans-unit>
<trans-unit id="%d days" xml:space="preserve">
<trans-unit id="%d days" xml:space="preserve" approved="no">
<source>%d days</source>
<target state="translated">%d ימים</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d hours" xml:space="preserve">
<trans-unit id="%d hours" xml:space="preserve" approved="no">
<source>%d hours</source>
<target state="translated">%d שעות</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d min" xml:space="preserve">
<trans-unit id="%d min" xml:space="preserve" approved="no">
<source>%d min</source>
<target state="translated">%d דקה</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d months" xml:space="preserve">
<trans-unit id="%d months" xml:space="preserve" approved="no">
<source>%d months</source>
<target state="translated">%d חודשים</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d sec" xml:space="preserve">
<trans-unit id="%d sec" xml:space="preserve" approved="no">
<source>%d sec</source>
<target state="translated">%d שנייה</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d skipped message(s)" xml:space="preserve">
<trans-unit id="%d skipped message(s)" xml:space="preserve" approved="no">
<source>%d skipped message(s)</source>
<target state="translated">%d הודעות שדולגו</target>
<note>integrity error chat item</note>
</trans-unit>
<trans-unit id="%lld" xml:space="preserve">
<trans-unit id="%lld" xml:space="preserve" approved="no">
<source>%lld</source>
<target state="translated">%lld</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld %@" xml:space="preserve">
<trans-unit id="%lld %@" xml:space="preserve" approved="no">
<source>%lld %@</source>
<target state="translated">%lld %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld contact(s) selected" xml:space="preserve">
<trans-unit id="%lld contact(s) selected" xml:space="preserve" approved="no">
<source>%lld contact(s) selected</source>
<target state="translated">%lld אנשי קשר נבחרו</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld file(s) with total size of %@" xml:space="preserve">
<trans-unit id="%lld file(s) with total size of %@" xml:space="preserve" approved="no">
<source>%lld file(s) with total size of %@</source>
<target state="translated">%lld קבצים בגודל כולל של %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld members" xml:space="preserve">
<trans-unit id="%lld members" xml:space="preserve" approved="no">
<source>%lld members</source>
<target state="translated">%lld חברי קבוצה</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld minutes" xml:space="preserve">
<trans-unit id="%lld minutes" xml:space="preserve" approved="no">
<source>%lld minutes</source>
<target state="translated">%lld דקות</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld second(s)" xml:space="preserve">
<trans-unit id="%lld second(s)" xml:space="preserve" approved="no">
<source>%lld second(s)</source>
<target state="translated">%lld שניות</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lld seconds" xml:space="preserve">
<trans-unit id="%lld seconds" xml:space="preserve" approved="no">
<source>%lld seconds</source>
<target state="translated">%lld שניות</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldd" xml:space="preserve">
<trans-unit id="%lldd" xml:space="preserve" approved="no">
<source>%lldd</source>
<target state="translated">%lld ימ׳</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldh" xml:space="preserve">
<trans-unit id="%lldh" xml:space="preserve" approved="no">
<source>%lldh</source>
<target state="translated">%lld שע׳</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldk" xml:space="preserve">
<trans-unit id="%lldk" xml:space="preserve" approved="no">
<source>%lldk</source>
<target state="translated">%lld אלף</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldm" xml:space="preserve">
<trans-unit id="%lldm" xml:space="preserve" approved="no">
<source>%lldm</source>
<target state="translated">%lld דק׳</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldmth" xml:space="preserve">
<trans-unit id="%lldmth" xml:space="preserve" approved="no">
<source>%lldmth</source>
<target state="translated">%lld ח׳</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%llds" xml:space="preserve">
<trans-unit id="%llds" xml:space="preserve" approved="no">
<source>%llds</source>
<target state="translated">%lld שנ׳</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%lldw" xml:space="preserve">
<trans-unit id="%lldw" xml:space="preserve" approved="no">
<source>%lldw</source>
<target state="translated">%lld שב׳</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%u messages failed to decrypt." xml:space="preserve">
<trans-unit id="%u messages failed to decrypt." xml:space="preserve" approved="no">
<source>%u messages failed to decrypt.</source>
<target state="translated">%u הודעות לא הצליחו לעבור פענוח.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%u messages skipped." xml:space="preserve">
<trans-unit id="%u messages skipped." xml:space="preserve" approved="no">
<source>%u messages skipped.</source>
<target state="translated">%u הודעות דולגו.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="(" xml:space="preserve">
<trans-unit id="(" xml:space="preserve" approved="no">
<source>(</source>
<target state="translated">(</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=")" xml:space="preserve">
<trans-unit id=")" xml:space="preserve" approved="no">
<source>)</source>
<target state="translated">)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve">
<trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve" approved="no">
<source>**Add new contact**: to create your one-time QR Code or link for your contact.</source>
<target state="translated">**הוסיפו איש קשר חדש**: ליצירת קוד QR או קישור חד־פעמיים עבור איש הקשר שלכם.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Create link / QR code** for your contact to use." xml:space="preserve">
@@ -4162,6 +4205,26 @@ SimpleX servers cannot see your profile.</source>
<source>\~strike~</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ (current)" xml:space="preserve" approved="no">
<source>%@ (current)</source>
<target state="translated">%@ (נוכחי)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ (current):" xml:space="preserve" approved="no">
<source>%@ (current):</source>
<target state="translated">%@ (נוכחי):</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="%@:" xml:space="preserve" approved="no">
<source>%@:</source>
<target state="translated">%@:</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="%d weeks" xml:space="preserve" approved="no">
<source>%d weeks</source>
<target state="translated">%d שבועות</target>
<note>time interval</note>
</trans-unit>
</body>
</file>
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="he" datatype="plaintext">
@@ -74,7 +74,7 @@
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
<source>%@ is connected!</source>
<target>%@ è connesso!</target>
<target>%@ è connesso/a!</target>
<note>notification title</note>
</trans-unit>
<trans-unit id="%@ is not verified" xml:space="preserve">
@@ -400,6 +400,18 @@
** 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="Abort" xml:space="preserve">
<source>Abort</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address" xml:space="preserve">
<source>Abort changing address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address?" xml:space="preserve">
<source>Abort changing address?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
<source>About SimpleX</source>
<target>Riguardo SimpleX</target>
@@ -481,6 +493,10 @@
<target>Indirizzo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Address change will be aborted. Old receiving address will be used." xml:space="preserve">
<source>Address change will be aborted. Old receiving address will be used.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Gli amministratori possono creare i link per entrare nei gruppi.</target>
@@ -613,7 +629,7 @@
</trans-unit>
<trans-unit id="Already connected?" xml:space="preserve">
<source>Already connected?</source>
<target>Già connesso?</target>
<target>Già connesso/a?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Always use relay" xml:space="preserve">
@@ -1054,7 +1070,7 @@
</trans-unit>
<trans-unit id="Connection request" xml:space="preserve">
<source>Connection request</source>
<target>Richieste di connessione</target>
<target>Richiesta di connessione</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connection request sent!" xml:space="preserve">
@@ -1780,6 +1796,10 @@
<target>Errore</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error aborting address change" xml:space="preserve">
<source>Error aborting address change</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error accepting contact request" xml:space="preserve">
<source>Error accepting contact request</source>
<target>Errore nell'accettazione della richiesta di contatto</target>
@@ -2040,6 +2060,10 @@
<target>Veloce e senza aspettare che il mittente sia in linea!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>Il file verrà eliminato dai server.</target>
@@ -3397,6 +3421,10 @@
<target>Messaggio ricevuto</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>La ricezione del file verrà interrotta.</target>
@@ -4002,6 +4030,11 @@
<target>Messaggi saltati</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
<target>Si sono verificati alcuni errori non gravi durante l'importazione: vedi la console della chat per i dettagli.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Somebody" xml:space="preserve">
<source>Somebody</source>
<target>Qualcuno</target>
@@ -4294,11 +4327,6 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa.</ta
<target>L'errore è permanente per questa connessione, riconnettiti.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member).</source>
<target>Questa funzionalità è sperimentale! Funzionerà solo se l'altro client ha la versione 4.2 installata. Dovresti vedere il messaggio nella conversazione una volta completato il cambio di indirizzo. Controlla di potere ancora ricevere messaggi da questo contatto (o membro del gruppo).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group no longer exists." xml:space="preserve">
<source>This group no longer exists.</source>
<target>Questo gruppo non esiste più.</target>
@@ -4411,6 +4439,10 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio
<target>Stato di migrazione imprevisto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<target>Svela</target>
@@ -4470,7 +4502,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
</trans-unit>
<trans-unit id="Unmute" xml:space="preserve">
<source>Unmute</source>
<target>Riattiva audio</target>
<target>Riattiva notifiche</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unread" xml:space="preserve">
@@ -4735,7 +4767,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
</trans-unit>
<trans-unit id="You are connected to the server used to receive messages from this contact." xml:space="preserve">
<source>You are connected to the server used to receive messages from this contact.</source>
<target>Sei connesso al server usato per ricevere messaggi da questo contatto.</target>
<target>Sei connesso/a al server usato per ricevere messaggi da questo contatto.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You are invited to group" xml:space="preserve">
@@ -4758,11 +4790,9 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Puoi crearlo più tardi</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<target>Puoi nascondere o silenziare un profilo utente - scorrilo verso destra.
SimpleX Lock deve essere attivato.</target>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Puoi nascondere o silenziare un profilo utente - scorrilo verso destra.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -4970,11 +5000,6 @@ SimpleX Lock deve essere attivato.</target>
<target>I tuoi profili di chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>Le tue chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your contact needs to be online for the connection to complete.&#10;You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
<source>Your contact needs to be online for the connection to complete.
You can cancel this connection and remove the contact (and try later with a new link).</source>
@@ -5188,7 +5213,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
</trans-unit>
<trans-unit id="connected" xml:space="preserve">
<source>connected</source>
<target>connesso</target>
<target>connesso/a</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="connecting" xml:space="preserve">
@@ -5398,12 +5423,12 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
</trans-unit>
<trans-unit id="invited" xml:space="preserve">
<source>invited</source>
<target>invitato</target>
<target>ha invitato</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="invited %@" xml:space="preserve">
<source>invited %@</source>
<target>invitato %@</target>
<target>ha invitato %@</target>
<note>rcv group event chat item</note>
</trans-unit>
<trans-unit id="invited to connect" xml:space="preserve">
@@ -5428,7 +5453,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
</trans-unit>
<trans-unit id="left" xml:space="preserve">
<source>left</source>
<target>uscito/a</target>
<target>è uscito/a</target>
<note>rcv group event chat item</note>
</trans-unit>
<trans-unit id="marked deleted" xml:space="preserve">
@@ -5443,7 +5468,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
</trans-unit>
<trans-unit id="member connected" xml:space="preserve">
<source>connected</source>
<target>connesso</target>
<target>connesso/a</target>
<note>rcv group event chat item</note>
</trans-unit>
<trans-unit id="message received" xml:space="preserve">
@@ -5498,6 +5523,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
</trans-unit>
<trans-unit id="no text" xml:space="preserve">
<source>no text</source>
<target>nessun testo</target>
<note>copied message info in history</note>
</trans-unit>
<trans-unit id="observer" xml:space="preserve">
@@ -5558,12 +5584,12 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
</trans-unit>
<trans-unit id="removed" xml:space="preserve">
<source>removed</source>
<target>rimosso</target>
<target>ha rimosso</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="removed %@" xml:space="preserve">
<source>removed %@</source>
<target>rimosso %@</target>
<target>ha rimosso %@</target>
<note>rcv group event chat item</note>
</trans-unit>
<trans-unit id="removed you" xml:space="preserve">
@@ -400,6 +400,18 @@
**注意**:多くの接続がある場合、バッテリーと通信量の消費が大幅に増加し、一部の接続に失敗することがあります。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort" xml:space="preserve">
<source>Abort</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address" xml:space="preserve">
<source>Abort changing address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address?" xml:space="preserve">
<source>Abort changing address?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
<source>About SimpleX</source>
<target>SimpleXについて</target>
@@ -481,6 +493,10 @@
<target>アドレス</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Address change will be aborted. Old receiving address will be used." xml:space="preserve">
<source>Address change will be aborted. Old receiving address will be used.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>管理者はグループの参加リンクを生成できます。</target>
@@ -1779,6 +1795,10 @@
<target>エラー</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error aborting address change" xml:space="preserve">
<source>Error aborting address change</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error accepting contact request" xml:space="preserve">
<source>Error accepting contact request</source>
<target>連絡先リクエストの承諾にエラー発生</target>
@@ -2039,6 +2059,10 @@
<target>送信者がオンラインになるまでの待ち時間がなく、速い!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>ファイルはサーバーから削除されます。</target>
@@ -3395,6 +3419,10 @@
<target>受信したメッセージ</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>ファイルの受信を停止します。</target>
@@ -4000,6 +4028,10 @@
<target>飛ばしたメッセージ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Somebody" xml:space="preserve">
<source>Somebody</source>
<target>誰か</target>
@@ -4292,11 +4324,6 @@ It can happen because of some bug or when the connection is compromised.</source
<target>このエラーはこの接続では永続的なものです。再接続してください。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member).</source>
<target>開発中の機能です!相手のクライアントが4.2でなければ機能しません。アドレス変更が完了すると、会話にメッセージが出ます。連絡相手 (またはグループのメンバー) からメッセージを受信できないかをご確認ください。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group no longer exists." xml:space="preserve">
<source>This group no longer exists.</source>
<target>このグループはもう存在しません。</target>
@@ -4409,6 +4436,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>予期しない移行状態</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<target>表示にする</target>
@@ -4756,11 +4787,9 @@ 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 can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<target>ユーザープロファイルを右にスワイプすると、非表示またはミュートにすることができます。
SimpleXロックが有効になっている必要があります。</target>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>ユーザープロファイルを右にスワイプすると、非表示またはミュートにすることができます。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -4968,11 +4997,6 @@ SimpleXロックが有効になっている必要があります。</target>
<target>あなたのチャットプロフィール</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>あなたのチャット</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your contact needs to be online for the connection to complete.&#10;You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
<source>Your contact needs to be online for the connection to complete.
You can cancel this connection and remove the contact (and try later with a new link).</source>
File diff suppressed because it is too large Load Diff
@@ -400,6 +400,18 @@
**Let op**: als u veel verbindingen heeft, kan uw batterij- en verkeersverbruik aanzienlijk hoger zijn en kunnen sommige verbindingen uitvallen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort" xml:space="preserve">
<source>Abort</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address" xml:space="preserve">
<source>Abort changing address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address?" xml:space="preserve">
<source>Abort changing address?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
<source>About SimpleX</source>
<target>Over SimpleX</target>
@@ -481,6 +493,10 @@
<target>Adres</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Address change will be aborted. Old receiving address will be used." xml:space="preserve">
<source>Address change will be aborted. Old receiving address will be used.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Beheerders kunnen de uitnodiging links naar groepen aanmaken.</target>
@@ -1780,6 +1796,10 @@
<target>Fout</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error aborting address change" xml:space="preserve">
<source>Error aborting address change</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error accepting contact request" xml:space="preserve">
<source>Error accepting contact request</source>
<target>Fout bij het accepteren van een contactverzoek</target>
@@ -2040,6 +2060,10 @@
<target>Snel en niet wachten tot de afzender online is!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>Het bestand wordt van de servers verwijderd.</target>
@@ -3397,6 +3421,10 @@
<target>Ontvangen bericht</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>Het ontvangen van het bestand wordt gestopt.</target>
@@ -4002,6 +4030,11 @@
<target>Overgeslagen berichten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
<target>Er zijn enkele niet-fatale fouten opgetreden tijdens het importeren - u kunt de Chat console raadplegen voor meer details.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Somebody" xml:space="preserve">
<source>Somebody</source>
<target>Iemand</target>
@@ -4294,11 +4327,6 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast.</target>
<target>Deze fout is permanent voor deze verbinding, maak opnieuw verbinding.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member).</source>
<target>Deze functie is experimenteel! Het werkt alleen als op de andere client versie 4.2 is geïnstalleerd. U zou het bericht in het gesprek moeten zien zodra de adreswijziging is voltooid. Controleer of u nog steeds berichten van dit contact (of groepslid) kunt ontvangen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group no longer exists." xml:space="preserve">
<source>This group no longer exists.</source>
<target>Deze groep bestaat niet meer.</target>
@@ -4411,6 +4439,10 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc
<target>Onverwachte migratiestatus</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<target>zichtbaar maken</target>
@@ -4758,11 +4790,9 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link
<target>U kan het later maken</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<target>U kunt een gebruikers profiel verbergen of dempen - veeg het naar rechts.
SimpleX Lock moet ingeschakeld zijn.</target>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>U kunt een gebruikers profiel verbergen of dempen - veeg het naar rechts.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -4970,11 +5000,6 @@ SimpleX Lock moet ingeschakeld zijn.</target>
<target>Uw chat profielen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>Jouw gesprekken</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your contact needs to be online for the connection to complete.&#10;You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
<source>Your contact needs to be online for the connection to complete.
You can cancel this connection and remove the contact (and try later with a new link).</source>
@@ -400,6 +400,18 @@
**Uwaga**: jeśli masz wiele połączeń, zużycie baterii i ruchu może być znacznie wyższe, a niektóre połączenia mogą się nie udać.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort" xml:space="preserve">
<source>Abort</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address" xml:space="preserve">
<source>Abort changing address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address?" xml:space="preserve">
<source>Abort changing address?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
<source>About SimpleX</source>
<target>O SimpleX</target>
@@ -481,6 +493,10 @@
<target>Adres</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Address change will be aborted. Old receiving address will be used." xml:space="preserve">
<source>Address change will be aborted. Old receiving address will be used.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Administratorzy mogą tworzyć linki do dołączania do grup.</target>
@@ -1780,6 +1796,10 @@
<target>Błąd</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error aborting address change" xml:space="preserve">
<source>Error aborting address change</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error accepting contact request" xml:space="preserve">
<source>Error accepting contact request</source>
<target>Błąd przyjmowania prośby o kontakt</target>
@@ -2040,6 +2060,10 @@
<target>Szybko i bez czekania aż nadawca będzie online!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>Plik zostanie usunięty z serwerów.</target>
@@ -3397,6 +3421,10 @@
<target>Otrzymano wiadomość</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>Odbieranie pliku zostanie przerwane.</target>
@@ -4002,6 +4030,10 @@
<target>Pominięte wiadomości</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Somebody" xml:space="preserve">
<source>Somebody</source>
<target>Ktoś</target>
@@ -4294,11 +4326,6 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom
<target>Ten błąd jest trwały dla tego połączenia, proszę o ponowne połączenie.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member).</source>
<target>Ta funkcja jest eksperymentalna! Będzie działać tylko wtedy, gdy drugi klient ma zainstalowaną wersję 4.2. Po zakończeniu zmiany adresu powinieneś zobaczyć wiadomość w konwersacji - sprawdź, czy nadal możesz otrzymywać wiadomości od tego kontaktu (lub członka grupy).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group no longer exists." xml:space="preserve">
<source>This group no longer exists.</source>
<target>Ta grupa już nie istnieje.</target>
@@ -4411,6 +4438,10 @@ Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania.</ta
<target>Nieoczekiwany stan migracji</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<target>Odkryj</target>
@@ -4758,11 +4789,9 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
<target>Możesz go utworzyć później</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<target>Możesz ukryć lub wyciszyć profil użytkownika - przesuń palcem w prawo.
Funkcja blokady SimpleX musi być włączona.</target>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Możesz ukryć lub wyciszyć profil użytkownika - przesuń palcem w prawo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -4970,11 +4999,6 @@ Funkcja blokady SimpleX musi być włączona.</target>
<target>Twoje profile czatu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>Twoje czaty</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your contact needs to be online for the connection to complete.&#10;You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
<source>Your contact needs to be online for the connection to complete.
You can cancel this connection and remove the contact (and try later with a new link).</source>
@@ -587,8 +587,9 @@
<target state="translated">Cancelar</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve" approved="no">
<source>Cannot access keychain to save database password</source>
<target state="translated">Não conseguimos acessar a keychain para guardar a palavra-passe da base de dados</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cannot receive file" xml:space="preserve" approved="no">
@@ -611,12 +612,14 @@
<target state="translated">Mudar a função de membro?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change receiving address" xml:space="preserve">
<trans-unit id="Change receiving address" xml:space="preserve" approved="no">
<source>Change receiving address</source>
<target state="translated">Mudar endereço de recepção</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change receiving address?" xml:space="preserve">
<trans-unit id="Change receiving address?" xml:space="preserve" approved="no">
<source>Change receiving address?</source>
<target state="translated">Mudar endereço de recepção?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change role" xml:space="preserve" approved="no">
@@ -861,8 +864,9 @@
<source>Core built at: %@</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Core version: v%@" xml:space="preserve">
<trans-unit id="Core version: v%@" xml:space="preserve" approved="no">
<source>Core version: v%@</source>
<target state="translated">Versão Núcleo: v%@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create" xml:space="preserve" approved="no">
@@ -904,8 +908,9 @@
<target state="translated">Crie seu perfil</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Created on %@" xml:space="preserve">
<trans-unit id="Created on %@" xml:space="preserve" approved="no">
<source>Created on %@</source>
<target state="translated">Criado em %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current passphrase…" xml:space="preserve" approved="no">
@@ -913,8 +918,9 @@
<target state="translated">Senha atual…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Currently maximum supported file size is %@." xml:space="preserve">
<trans-unit id="Currently maximum supported file size is %@." xml:space="preserve" approved="no">
<source>Currently maximum supported file size is %@.</source>
<target state="translated">O tamanho de ficheiro máximo suportado atualmente é %@.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Dark" xml:space="preserve" approved="no">
@@ -936,9 +942,11 @@
<target state="translated">Banco de dados criptografado!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database encryption passphrase will be updated and stored in the keychain.&#10;" xml:space="preserve">
<trans-unit id="Database encryption passphrase will be updated and stored in the keychain.&#10;" xml:space="preserve" approved="no">
<source>Database encryption passphrase will be updated and stored in the keychain.
</source>
<target state="translated">A frase-passe criptográfica da base de dados vai ser atualizada e armazenada na keychain.
</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database encryption passphrase will be updated.&#10;" xml:space="preserve" approved="no">
@@ -973,8 +981,9 @@
<target state="translated">Senha e exportação do banco de dados</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database passphrase is different from saved in the keychain." xml:space="preserve">
<trans-unit id="Database passphrase is different from saved in the keychain." xml:space="preserve" approved="no">
<source>Database passphrase is different from saved in the keychain.</source>
<target state="translated">A frase-passe da base de dados é diferente daquela guardada na keychain.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database passphrase is required to open chat." xml:space="preserve" approved="no">
@@ -982,9 +991,11 @@
<target state="translated">Senha do banco de dados é necessária para abrir o chat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database will be encrypted and the passphrase stored in the keychain.&#10;" xml:space="preserve">
<trans-unit id="Database will be encrypted and the passphrase stored in the keychain.&#10;" xml:space="preserve" approved="no">
<source>Database will be encrypted and the passphrase stored in the keychain.
</source>
<target state="translated">A base de dados vai ser encriptada e a frase-passe armazenada na keychain.
</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database will be encrypted.&#10;" xml:space="preserve" approved="no">
@@ -994,8 +1005,9 @@
</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database will be migrated when the app restarts" xml:space="preserve">
<trans-unit id="Database will be migrated when the app restarts" xml:space="preserve" approved="no">
<source>Database will be migrated when the app restarts</source>
<target state="translated">A base de dados vai ser migrada quando o aplicativo reiniciar</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Decentralized" xml:space="preserve" approved="no">
@@ -1048,8 +1060,9 @@
<target state="translated">Excluir perfil de chat?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete connection" xml:space="preserve">
<trans-unit id="Delete connection" xml:space="preserve" approved="no">
<source>Delete connection</source>
<target state="translated">Excluir conexão</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete contact" xml:space="preserve" approved="no">
@@ -1131,16 +1144,19 @@
<target state="translated">Excluir mensagens após</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete old database" xml:space="preserve">
<trans-unit id="Delete old database" xml:space="preserve" approved="no">
<source>Delete old database</source>
<target state="translated">Excluir base de dados velha</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete old database?" xml:space="preserve">
<trans-unit id="Delete old database?" xml:space="preserve" approved="no">
<source>Delete old database?</source>
<target state="translated">Apagar base de dados velha?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete pending connection" xml:space="preserve">
<trans-unit id="Delete pending connection" xml:space="preserve" approved="no">
<source>Delete pending connection</source>
<target state="translated">Excluir conexão pendente</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete pending connection?" xml:space="preserve" approved="no">
@@ -1153,8 +1169,9 @@
<target state="translated">Excluir fila</target>
<note>server test step</note>
</trans-unit>
<trans-unit id="Delete user profile?" xml:space="preserve">
<trans-unit id="Delete user profile?" xml:space="preserve" approved="no">
<source>Delete user profile?</source>
<target state="translated">Apagar o perfil de utilizador?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Description" xml:space="preserve" approved="no">
@@ -1162,8 +1179,9 @@
<target state="translated">Descrição</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Develop" xml:space="preserve">
<trans-unit id="Develop" xml:space="preserve" approved="no">
<source>Develop</source>
<target state="translated">Desenvolver</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Developer tools" xml:space="preserve" approved="no">
@@ -1171,8 +1189,9 @@
<target state="translated">Ferramentas de desenvolvimento</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Device" xml:space="preserve">
<trans-unit id="Device" xml:space="preserve" approved="no">
<source>Device</source>
<target state="translated">Dispositivo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Device authentication is disabled. Turning off SimpleX Lock." xml:space="preserve" approved="no">
@@ -1185,8 +1204,9 @@
<target state="translated">A autenticação do dispositivo não está habilitada. Você pode ativar o Bloqueio SimpleX em Configurações, depois de ativar a autenticação do dispositivo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Direct messages" xml:space="preserve">
<trans-unit id="Direct messages" xml:space="preserve" approved="no">
<source>Direct messages</source>
<target state="translated">Mensagens diretas</target>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Direct messages between members are prohibited in this group." xml:space="preserve" approved="no">
@@ -1229,12 +1249,14 @@
<target state="translated">Nome de exibição:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve">
<trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve" approved="no">
<source>Do NOT use SimpleX for emergency calls.</source>
<target state="translated">NÃO use SimpleX para chamadas de emergência.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do it later" xml:space="preserve">
<trans-unit id="Do it later" xml:space="preserve" approved="no">
<source>Do it later</source>
<target state="translated">Fazer mais tarde</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Edit" xml:space="preserve" approved="no">
@@ -1247,8 +1269,9 @@
<target state="translated">Editar perfil do grupo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable" xml:space="preserve">
<trans-unit id="Enable" xml:space="preserve" approved="no">
<source>Enable</source>
<target state="translated">Ativar</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable SimpleX Lock" xml:space="preserve" approved="no">
@@ -1266,16 +1289,19 @@
<target state="translated">Ativar exclusão automática de mensagens?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable instant notifications?" xml:space="preserve">
<trans-unit id="Enable instant notifications?" xml:space="preserve" approved="no">
<source>Enable instant notifications?</source>
<target state="translated">Ativar notificações instantâneas?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable notifications" xml:space="preserve">
<trans-unit id="Enable notifications" xml:space="preserve" approved="no">
<source>Enable notifications</source>
<target state="translated">Ativar notificações</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable periodic notifications?" xml:space="preserve">
<trans-unit id="Enable periodic notifications?" xml:space="preserve" approved="no">
<source>Enable periodic notifications?</source>
<target state="translated">Ativar notificações periódicas?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Encrypt" xml:space="preserve" approved="no">
@@ -1293,24 +1319,29 @@
<target state="translated">Banco de dados criptografado</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Encrypted message or another event" xml:space="preserve">
<trans-unit id="Encrypted message or another event" xml:space="preserve" approved="no">
<source>Encrypted message or another event</source>
<target state="translated">Mensagem encriptada ou outro evento</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: database error" xml:space="preserve">
<trans-unit id="Encrypted message: database error" xml:space="preserve" approved="no">
<source>Encrypted message: database error</source>
<target state="translated">Mensagem encriptada: erro da base de dados</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: keychain error" xml:space="preserve">
<trans-unit id="Encrypted message: keychain error" xml:space="preserve" approved="no">
<source>Encrypted message: keychain error</source>
<target state="translated">Mensagem encriptada: erro na keychain</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: no passphrase" xml:space="preserve">
<trans-unit id="Encrypted message: no passphrase" xml:space="preserve" approved="no">
<source>Encrypted message: no passphrase</source>
<target state="translated">Mensagem encriptada: sem frase-passe</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: unexpected error" xml:space="preserve">
<trans-unit id="Encrypted message: unexpected error" xml:space="preserve" approved="no">
<source>Encrypted message: unexpected error</source>
<target state="translated">Mensagem encriptada: erro inesperado</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Enter correct passphrase." xml:space="preserve" approved="no">
@@ -1338,8 +1369,9 @@
<target state="translated">Erro ao aceitar solicitação de contato</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error accessing database file" xml:space="preserve">
<trans-unit id="Error accessing database file" xml:space="preserve" approved="no">
<source>Error accessing database file</source>
<target state="translated">Erro acessando ficheiro da base de dados</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error adding member(s)" xml:space="preserve" approved="no">
@@ -1367,8 +1399,9 @@
<target state="translated">Erro ao criar endereço</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error creating group" xml:space="preserve">
<trans-unit id="Error creating group" xml:space="preserve" approved="no">
<source>Error creating group</source>
<target state="translated">Erro ao criar grupo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error creating group link" xml:space="preserve" approved="no">
@@ -1381,12 +1414,14 @@
<target state="translated">Erro ao excluir banco de dados de chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error deleting chat!" xml:space="preserve">
<trans-unit id="Error deleting chat!" xml:space="preserve" approved="no">
<source>Error deleting chat!</source>
<target state="translated">Erro ao apagar chat!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error deleting connection" xml:space="preserve">
<trans-unit id="Error deleting connection" xml:space="preserve" approved="no">
<source>Error deleting connection</source>
<target state="translated">Erro excluindo conexão</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error deleting contact" xml:space="preserve" approved="no">
@@ -1394,8 +1429,9 @@
<target state="translated">Erro ao excluir contato</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error deleting database" xml:space="preserve">
<trans-unit id="Error deleting database" xml:space="preserve" approved="no">
<source>Error deleting database</source>
<target state="translated">Erro excluindo base de dados</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error deleting old database" xml:space="preserve">
@@ -4958,6 +4994,201 @@ Isso pode acontecer por causa de algum bug ou quando a conexão está comprometi
<target state="translated">Criar endereço SimpleX</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Authentication is required before the call is connected, but you may miss calls." xml:space="preserve" approved="no">
<source>Authentication is required before the call is connected, but you may miss calls.</source>
<target state="translated">Autenticação é requerida antes da chamada ser conectada, mas pode perder chamadas.</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" approved="no">
<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 state="translated">Por perfil de chat (predefinição) ou [por conexão](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="Encrypted message: database migration error" xml:space="preserve" approved="no">
<source>Encrypted message: database migration error</source>
<target state="translated">Mensagem encriptada: erro na migração da base de dados</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Enter password above to show!" xml:space="preserve" approved="no">
<source>Enter password above to show!</source>
<target state="translated">Introduzir palavra-passe acima para mostrar!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter welcome message… (optional)" xml:space="preserve" approved="no">
<source>Enter welcome message… (optional)</source>
<target state="translated">Introduzir mensagem de boas-vindas… (opcional)</target>
<note>placeholder</note>
</trans-unit>
<trans-unit id="%@ (current)" xml:space="preserve" approved="no">
<source>%@ (current)</source>
<target state="translated">%@ (atual)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ (current):" xml:space="preserve" approved="no">
<source>%@ (current):</source>
<target state="translated">%@ (atual):</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="%@:" xml:space="preserve" approved="no">
<source>%@:</source>
<target state="translated">%@:</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="%d weeks" xml:space="preserve" approved="no">
<source>%d weeks</source>
<target state="translated">%d semanas</target>
<note>time interval</note>
</trans-unit>
<trans-unit id="Duration" xml:space="preserve" approved="no">
<source>Duration</source>
<target state="translated">Duração</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable self-destruct" xml:space="preserve" approved="no">
<source>Enable self-destruct</source>
<target state="translated">Ativar auto-destruição</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve" approved="no">
<source>Don't create address</source>
<target state="translated">Não criar endereço</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enter welcome message…" xml:space="preserve" approved="no">
<source>Enter welcome message…</source>
<target state="translated">Introduzir mensagem de boas-vindas…</target>
<note>placeholder</note>
</trans-unit>
<trans-unit id="Change self-destruct mode" xml:space="preserve" approved="no">
<source>Change self-destruct mode</source>
<target state="translated">Mudar modo de auto-destruição</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change self-destruct passcode" xml:space="preserve" approved="no">
<source>Change self-destruct passcode</source>
<target state="translated">Mudar senha auto-destrutiva</target>
<note>authentication reason
set passcode view</note>
</trans-unit>
<trans-unit id="Disappears at" xml:space="preserve" approved="no">
<source>Disappears at</source>
<target state="translated">Desaparecerá</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable self-destruct passcode" xml:space="preserve" approved="no">
<source>Enable self-destruct passcode</source>
<target state="translated">Ativar senha auto-destrutiva</target>
<note>set passcode view</note>
</trans-unit>
<trans-unit id="1 minute" xml:space="preserve" approved="no">
<source>1 minute</source>
<target state="translated">1 minuto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="30 seconds" xml:space="preserve" approved="no">
<source>30 seconds</source>
<target state="translated">30 segundos</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="0s" xml:space="preserve" approved="no">
<source>0s</source>
<target state="translated">0s</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="5 minutes" xml:space="preserve" approved="no">
<source>5 minutes</source>
<target state="translated">5 minutos</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="- voice messages up to 5 minutes.&#10;- custom time to disappear.&#10;- editing history." xml:space="preserve" approved="no">
<source>- voice messages up to 5 minutes.
- custom time to disappear.
- editing history.</source>
<target state="translated">- mensagens de voz até 5 minutos.
- tempo personalizado para desaparecer.
- histórico de edição.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All app data is deleted." xml:space="preserve" approved="no">
<source>All app data is deleted.</source>
<target state="translated">Todos os dados da app são apagados.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All data is erased when it is entered." xml:space="preserve" approved="no">
<source>All data is erased when it is entered.</source>
<target state="translated">Todos os dados são apagados quando introduzidos.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve" approved="no">
<source>Allow message reactions only if your contact allows them.</source>
<target state="translated">Permitir reações a mensagens só se o seu contacto as permitir.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions." xml:space="preserve" approved="no">
<source>Allow message reactions.</source>
<target state="translated">Permitir reações a mensagens.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts adding message reactions." xml:space="preserve" approved="no">
<source>Allow your contacts adding message reactions.</source>
<target state="translated">Permitir que os seus contactos adicionem reações a mensagens.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="An empty chat profile with the provided name is created, and the app opens as usual." xml:space="preserve" approved="no">
<source>An empty chat profile with the provided name is created, and the app opens as usual.</source>
<target state="translated">Um perfil vazio é criado com o nome fornecido, e a aplicação abre como de costume.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App passcode is replaced with self-destruct passcode." xml:space="preserve" approved="no">
<source>App passcode is replaced with self-destruct passcode.</source>
<target state="translated">A senha é substituída por uma senha auto-destrutiva.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Better messages" xml:space="preserve" approved="no">
<source>Better messages</source>
<target state="translated">Mensagens melhores</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can add message reactions." xml:space="preserve" approved="no">
<source>Both you and your contact can add message reactions.</source>
<target state="translated">Ambos você e o seu contato podem adicionar reações a mensagens.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Create an address to let people connect with you." xml:space="preserve" approved="no">
<source>Create an address to let people connect with you.</source>
<target state="translated">Crie um endereço para que outras pessoas se possam conectar a você.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Custom time" xml:space="preserve" approved="no">
<source>Custom time</source>
<target state="translated">Tempo personalizado</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database ID: %d" xml:space="preserve" approved="no">
<source>Database ID: %d</source>
<target state="translated">ID da base de dados: %d</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted at" xml:space="preserve" approved="no">
<source>Deleted at</source>
<target state="translated">Apagado em</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deleted at: %@" xml:space="preserve" approved="no">
<source>Deleted at: %@</source>
<target state="translated">Apagado a: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Disappearing message" xml:space="preserve" approved="no">
<source>Disappearing message</source>
<target state="translated">Mensagens temporárias</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Disappears at: %@" xml:space="preserve" approved="no">
<source>Disappears at: %@</source>
<target state="translated">Desaparecerá: %@</target>
<note>copied message info</note>
</trans-unit>
</body>
</file>
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="pt-BR" datatype="plaintext">
@@ -400,6 +400,18 @@
**Обратите внимание**: если у Вас много контактов, потребление батареи и трафика может быть значительно выше, и некоторые соединения могут не работать.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort" xml:space="preserve">
<source>Abort</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address" xml:space="preserve">
<source>Abort changing address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address?" xml:space="preserve">
<source>Abort changing address?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
<source>About SimpleX</source>
<target>О SimpleX</target>
@@ -481,6 +493,10 @@
<target>Адрес</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Address change will be aborted. Old receiving address will be used." xml:space="preserve">
<source>Address change will be aborted. Old receiving address will be used.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>Админы могут создать ссылки для вступления в группу.</target>
@@ -1780,6 +1796,10 @@
<target>Ошибка</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error aborting address change" xml:space="preserve">
<source>Error aborting address change</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error accepting contact request" xml:space="preserve">
<source>Error accepting contact request</source>
<target>Ошибка при принятии запроса на соединение</target>
@@ -2040,6 +2060,10 @@
<target>Быстрые и не нужно ждать, когда отправитель онлайн!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>Файл будет удалён с серверов.</target>
@@ -3397,6 +3421,10 @@
<target>Полученное сообщение</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>Приём файла будет прекращён.</target>
@@ -4002,6 +4030,10 @@
<target>Пропущенные сообщения</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Somebody" xml:space="preserve">
<source>Somebody</source>
<target>Контакт</target>
@@ -4294,11 +4326,6 @@ It can happen because of some bug or when the connection is compromised.</source
<target>Эта ошибка постоянная для этого соединения, пожалуйста, соединитесь снова.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member).</source>
<target>Это экспериментальная функция! Она будет работать, только если на другом клиенте установлена версия 4.2. После завершения смены адреса Вы увидите сообщение — убедитесь, что Вы все еще можете получать сообщения от этого контакта (или члена группы).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group no longer exists." xml:space="preserve">
<source>This group no longer exists.</source>
<target>Эта группа больше не существует.</target>
@@ -4411,6 +4438,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>Неожиданная ошибка при перемещении данных чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<target>Раскрыть</target>
@@ -4758,11 +4789,9 @@ 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 can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<target>Вы можете скрыть профиль или выключить уведомления - потяните его вправо.
Блокировка SimpleX должна быть включена.</target>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>Вы можете скрыть профиль или выключить уведомления - потяните его вправо.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -4970,11 +4999,6 @@ SimpleX Lock must be enabled.</source>
<target>Ваши профили чата</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>Ваши чаты</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your contact needs to be online for the connection to complete.&#10;You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
<source>Your contact needs to be online for the connection to complete.
You can cancel this connection and remove the contact (and try later with a new link).</source>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -400,6 +400,18 @@
请注意:如果您有许多连接,将会消耗更多的电量和流量,并且某些连接可能会失败。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort" xml:space="preserve">
<source>Abort</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address" xml:space="preserve">
<source>Abort changing address</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address?" xml:space="preserve">
<source>Abort changing address?</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
<source>About SimpleX</source>
<target>关于SimpleX</target>
@@ -481,6 +493,10 @@
<target>地址</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Address change will be aborted. Old receiving address will be used." xml:space="preserve">
<source>Address change will be aborted. Old receiving address will be used.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
<source>Admins can create the links to join groups.</source>
<target>管理员可以创建链接以加入群组。</target>
@@ -1780,6 +1796,10 @@
<target>错误</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error aborting address change" xml:space="preserve">
<source>Error aborting address change</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error accepting contact request" xml:space="preserve">
<source>Error accepting contact request</source>
<target>接受联系人请求错误</target>
@@ -2040,6 +2060,10 @@
<target>快速且无需等待发件人在线!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Favorite" xml:space="preserve">
<source>Favorite</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve">
<source>File will be deleted from servers.</source>
<target>文件将从服务器中删除。</target>
@@ -3397,6 +3421,10 @@
<target>收到的信息</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
<source>Receiving file will be stopped.</source>
<target>即将停止接收文件。</target>
@@ -4002,6 +4030,11 @@
<target>已跳过消息</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
<target>导入过程中发生了一些非致命错误——您可以查看聊天控制台了解更多详细信息。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Somebody" xml:space="preserve">
<source>Somebody</source>
<target>某人</target>
@@ -4294,11 +4327,6 @@ It can happen because of some bug or when the connection is compromised.</source
<target>此错误对于此连接是永久性的,请重新连接。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member).</source>
<target>此功能是实验性的! 它仅在其他客户端安装了 4.2 版时才有效。 地址更改完成后,您应该会在对话中看到该消息——请检查您是否仍能收到来自该联系人(或群组成员)的消息。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group no longer exists." xml:space="preserve">
<source>This group no longer exists.</source>
<target>该群组已不存在。</target>
@@ -4411,6 +4439,10 @@ You will be prompted to complete authentication before this feature is enabled.<
<target>未预料的迁移状态</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unfav." xml:space="preserve">
<source>Unfav.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unhide" xml:space="preserve">
<source>Unhide</source>
<target>取消隐藏</target>
@@ -4758,11 +4790,9 @@ 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 can hide or mute a user profile - swipe it to the right.&#10;SimpleX Lock must be enabled." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.
SimpleX Lock must be enabled.</source>
<target>您可以隐藏或静音用户个人资料——只需向右滑动。
必须启用 SimpleX Lock。</target>
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
<source>You can hide or mute a user profile - swipe it to the right.</source>
<target>您可以隐藏或静音用户个人资料——只需向右滑动。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -4970,11 +5000,6 @@ SimpleX Lock must be enabled.</source>
<target>您的聊天资料</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your chats" xml:space="preserve">
<source>Your chats</source>
<target>您的聊天</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your contact needs to be online for the connection to complete.&#10;You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
<source>Your contact needs to be online for the connection to complete.
You can cancel this connection and remove the contact (and try later with a new link).</source>
@@ -84,7 +84,7 @@
</trans-unit>
<trans-unit id="%d days" xml:space="preserve" approved="no">
<source>%d days</source>
<target state="translated">%d </target>
<target state="translated">%d </target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="%d hours" xml:space="preserve" approved="no">
@@ -234,12 +234,12 @@
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve" approved="no">
<source>**e2e encrypted** audio call</source>
<target state="translated">**已經完成端對端加密的**語音通話</target>
<target state="translated">**端對端加密的**語音通話</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** video call" xml:space="preserve" approved="no">
<source>**e2e encrypted** video call</source>
<target state="translated">**已經完成端對端加密的**視頻通話</target>
<target state="translated">**端對端加密的**視頻通話</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="*bold*" xml:space="preserve" approved="no">
@@ -259,7 +259,7 @@
</trans-unit>
<trans-unit id="1 day" xml:space="preserve" approved="no">
<source>1 day</source>
<target state="translated">一日</target>
<target state="translated">1天</target>
<note>message ttl</note>
</trans-unit>
<trans-unit id="1 hour" xml:space="preserve" approved="no">
@@ -355,22 +355,22 @@
</trans-unit>
<trans-unit id="Add servers by scanning QR codes." xml:space="preserve" approved="no">
<source>Add servers by scanning QR codes.</source>
<target state="translated">使用二維碼掃描新增伺服器。</target>
<target state="translated">使用二維碼掃描新增伺服器。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add server…" xml:space="preserve" approved="no">
<source>Add server…</source>
<target state="translated">新增伺服器 …</target>
<target state="translated">新增伺服器…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add to another device" xml:space="preserve" approved="no">
<source>Add to another device</source>
<target state="translated">加入到另一個裝置上</target>
<target state="translated">新增到另一個裝置上</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve" approved="no">
<source>Admins can create the links to join groups.</source>
<target state="translated">管理員可以建立可以加入群組的連結。</target>
<target state="translated">管理員可以建立加入群組的連結。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Advanced network settings" xml:space="preserve" approved="no">
@@ -410,7 +410,7 @@
</trans-unit>
<trans-unit id="Allow sending direct messages to members." xml:space="preserve" approved="no">
<source>Allow sending direct messages to members.</source>
<target state="translated">允許群組內選擇成員傳送訊。</target>
<target state="translated">允許群組內成員傳送訊。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow sending disappearing messages." xml:space="preserve" approved="no">
@@ -430,7 +430,7 @@
</trans-unit>
<trans-unit id="Allow voice messages only if your contact allows them." xml:space="preserve" approved="no">
<source>Allow voice messages only if your contact allows them.</source>
<target state="translated">只能在你的聯絡人允許使用語言訊息的時候,才能使用語音訊息。</target>
<target state="translated">只能在你的聯絡人允許的情況下,才允許語言訊息。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow voice messages?" xml:space="preserve" approved="no">
@@ -465,7 +465,7 @@
</trans-unit>
<trans-unit id="App build: %@" xml:space="preserve" approved="no">
<source>App build: %@</source>
<target state="translated">程式建構:%@</target>
<target state="translated">應用程式建構:%@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App icon" xml:space="preserve" approved="no">
@@ -485,7 +485,7 @@
</trans-unit>
<trans-unit id="Appearance" xml:space="preserve" approved="no">
<source>Appearance</source>
<target state="translated">主題</target>
<target state="translated">樣式</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Attach" xml:space="preserve" approved="no">
@@ -560,7 +560,7 @@
</trans-unit>
<trans-unit id="Can't invite contacts!" xml:space="preserve" approved="no">
<source>Can't invite contacts!</source>
<target state="translated">無法邀請聯絡人!</target>
<target state="translated">無法邀請聯絡人!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel" xml:space="preserve" approved="no">
@@ -585,7 +585,7 @@
</trans-unit>
<trans-unit id="Change database passphrase?" xml:space="preserve" approved="no">
<source>Change database passphrase?</source>
<target state="translated">改數據庫密碼?</target>
<target state="translated">改數據庫密碼?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change member role?" xml:space="preserve" approved="no">
@@ -710,7 +710,7 @@
</trans-unit>
<trans-unit id="Confirm new passphrase…" xml:space="preserve" approved="no">
<source>Confirm new passphrase…</source>
<target state="translated">確定新密碼 …</target>
<target state="translated">確定新密碼…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect" xml:space="preserve" approved="no">
@@ -735,7 +735,7 @@
</trans-unit>
<trans-unit id="Connect via link / QR code" xml:space="preserve" approved="no">
<source>Connect via link / QR code</source>
<target state="translated">使用連結連接 / 使用二維碼連接</target>
<target state="translated">透過連結 / 二維碼連接</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect via one-time link?" xml:space="preserve" approved="no">
@@ -779,7 +779,7 @@
</trans-unit>
<trans-unit id="Connection request sent!" xml:space="preserve" approved="no">
<source>Connection request sent!</source>
<target state="translated">連線請求已傳送</target>
<target state="translated">已傳送連線請求!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connection timeout" xml:space="preserve" approved="no">
@@ -1026,7 +1026,7 @@
</trans-unit>
<trans-unit id="Delete archive" xml:space="preserve" approved="no">
<source>Delete archive</source>
<target state="translated">刪除存</target>
<target state="translated">刪除存</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete chat archive?" xml:space="preserve" approved="no">
@@ -2224,7 +2224,7 @@ We will be adding server redundancy to prevent lost messages.</source>
</trans-unit>
<trans-unit id="Only group owners can change group preferences." xml:space="preserve" approved="no">
<source>Only group owners can change group preferences.</source>
<target state="translated">只有這個群組的負責人才能修改群組內的設定。</target>
<target state="translated">只有群組的負責人才能修改群組內的設定。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only group owners can enable voice messages." xml:space="preserve" approved="no">
@@ -2239,7 +2239,7 @@ We will be adding server redundancy to prevent lost messages.</source>
</trans-unit>
<trans-unit id="Only you can send disappearing messages." xml:space="preserve" approved="no">
<source>Only you can send disappearing messages.</source>
<target state="translated">只有你傳送自動銷毀的訊息。</target>
<target state="translated">只有你可以傳送自動銷毀的訊息。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can send voice messages." xml:space="preserve" approved="no">
@@ -2249,7 +2249,7 @@ We will be adding server redundancy to prevent lost messages.</source>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve" approved="no">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<target state="translated">只有你的絡人可以不可逆的刪除訊息(你可以將它標記為刪除)。</target>
<target state="translated">只有你的絡人可以不可逆的刪除訊息(你可以將它標記為刪除)。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can send disappearing messages." xml:space="preserve" approved="no">
@@ -2469,7 +2469,7 @@ We will be adding server redundancy to prevent lost messages.</source>
</trans-unit>
<trans-unit id="Recipients see updates as you type them." xml:space="preserve" approved="no">
<source>Recipients see updates as you type them.</source>
<target state="translated">當你輸入訊息時侯,對方將可以即時看到你輸入的內容。</target>
<target state="translated">當你輸入訊息時侯,對方即時看到你輸入的內容。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reject" xml:space="preserve" approved="no">
@@ -2779,7 +2779,7 @@ We will be adding server redundancy to prevent lost messages.</source>
</trans-unit>
<trans-unit id="Set 1 day" xml:space="preserve" approved="no">
<source>Set 1 day</source>
<target state="translated">設定為一日</target>
<target state="translated">設定為1天</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set contact name…" xml:space="preserve" approved="no">
@@ -3702,7 +3702,7 @@ SimpleX 伺服器並不會看到你的個人檔案。</target>
</trans-unit>
<trans-unit id="above, then choose:" xml:space="preserve" approved="no">
<source>above, then choose:</source>
<target state="translated">然後選按:</target>
<target state="translated">然後選按:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="accepted call" xml:space="preserve" approved="no">
@@ -3892,7 +3892,7 @@ SimpleX 伺服器並不會看到你的個人檔案。</target>
</trans-unit>
<trans-unit id="e2e encrypted" xml:space="preserve" approved="no">
<source>e2e encrypted</source>
<target state="translated">已完成端對端加密</target>
<target state="translated">端對端加密</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="enabled" xml:space="preserve" approved="no">
@@ -4343,7 +4343,7 @@ SimpleX 伺服器並不會看到你的個人檔案。</target>
</trans-unit>
<trans-unit id="Add welcome message" xml:space="preserve" approved="no">
<source>Add welcome message</source>
<target state="translated">添加歡迎訊息</target>
<target state="translated">新增歡迎訊息</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All chats and messages will be deleted - this cannot be undone!" xml:space="preserve" approved="no">
@@ -4398,7 +4398,7 @@ SimpleX 伺服器並不會看到你的個人檔案。</target>
</trans-unit>
<trans-unit id="Delete files for all chat profiles" xml:space="preserve" approved="no">
<source>Delete files for all chat profiles</source>
<target state="translated">刪除所有你的個人對話檔案及媒體檔案</target>
<target state="translated">刪除所有你的個人對話資料的檔案</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete user profile?" xml:space="preserve" approved="no">
@@ -4510,7 +4510,7 @@ SimpleX 伺服器並不會看到你的個人檔案。</target>
</trans-unit>
<trans-unit id="Add profile" xml:space="preserve" approved="no">
<source>Add profile</source>
<target state="translated">加入新的個人檔案</target>
<target state="translated">新增新的個人檔案</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve" approved="no">
@@ -4545,7 +4545,7 @@ SimpleX 伺服器並不會看到你的個人檔案。</target>
</trans-unit>
<trans-unit id="App passcode" xml:space="preserve" approved="no">
<source>App passcode</source>
<target state="translated">程式密碼</target>
<target state="translated">應用程式密碼</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="File will be deleted from servers." xml:space="preserve" approved="no">
@@ -4732,7 +4732,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Audio/video calls are prohibited." xml:space="preserve" approved="no">
<source>Audio/video calls are prohibited.</source>
<target state="translated">禁用語言/視通話。</target>
<target state="translated">禁用語言/視通話。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Bad message ID" xml:space="preserve" approved="no">
@@ -4742,7 +4742,7 @@ Available in v5.1</source>
</trans-unit>
<trans-unit id="Bad message hash" xml:space="preserve" approved="no">
<source>Bad message hash</source>
<target state="translated">錯誤訊息雜湊值</target>
<target state="translated">錯誤訊息雜湊值</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change lock mode" xml:space="preserve" approved="no">
@@ -5411,7 +5411,7 @@ SimpleX Lock must be enabled.</source>
</trans-unit>
<trans-unit id="You can share your address as a link or QR code - anybody can connect to you." xml:space="preserve" approved="no">
<source>You can share your address as a link or QR code - anybody can connect to you.</source>
<target state="translated">你可以將你的地址作為連或二維碼以分享 - 任何人都可以連接到你。</target>
<target state="translated">你可以將你的地址作為連或二維碼以分享 - 任何人都可以連接到你。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You won't lose your contacts if you later delete your address." xml:space="preserve" approved="no">
@@ -5438,7 +5438,7 @@ You can change it in Settings.</source>
</trans-unit>
<trans-unit id="Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." xml:space="preserve" approved="no">
<source>Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts.</source>
<target state="translated">將聯絡地址加入到你的個人檔案中,以便你的聯絡人與其他人分享你的聯絡地址。更新了的個人檔案將傳送給你的聯絡人。</target>
<target state="translated">將聯絡地址新增到你的個人檔案中,以便你的聯絡人與其他人分享你的聯絡地址。更新了的個人檔案將傳送給你的聯絡人。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve" approved="no">
@@ -5493,6 +5493,381 @@ It can happen because of some bug or when the connection is compromised.</source
<target state="translated">影片和檔案和最大上限為1gb</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%d weeks" xml:space="preserve" approved="no">
<source>%d weeks</source>
<target state="translated">%d 個星期</target>
<note>time interval</note>
</trans-unit>
<trans-unit id="5 minutes" xml:space="preserve" approved="no">
<source>5 minutes</source>
<target state="translated">5分鐘</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All app data is deleted." xml:space="preserve" approved="no">
<source>All app data is deleted.</source>
<target state="translated">已刪除所有的應用程式數據。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="App passcode is replaced with self-destruct passcode." xml:space="preserve" approved="no">
<source>App passcode is replaced with self-destruct passcode.</source>
<target state="translated">應用程式密碼已替換為自毀密碼。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Disappearing message" xml:space="preserve" approved="no">
<source>Disappearing message</source>
<target state="translated">自動銷毀訊息</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable self-destruct passcode" xml:space="preserve" approved="no">
<source>Enable self-destruct passcode</source>
<target state="translated">啟用自毀密碼</target>
<note>set passcode view</note>
</trans-unit>
<trans-unit id="Group members can add message reactions." xml:space="preserve" approved="no">
<source>Group members can add message reactions.</source>
<target state="translated">群組內的成員可以新增訊息互動。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="If you enter your self-destruct passcode while opening the app:" xml:space="preserve" approved="no">
<source>If you enter your self-destruct passcode while opening the app:</source>
<target state="translated">如果你在開啟應用程式時輸入自毀密碼:</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Self-destruct" xml:space="preserve" approved="no">
<source>Self-destruct</source>
<target state="translated">自毁</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Select" xml:space="preserve" approved="no">
<source>Select</source>
<target state="translated">選擇</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ (current)" xml:space="preserve" approved="no">
<source>%@ (current)</source>
<target state="translated">%@ (目前的)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ (current):" xml:space="preserve" approved="no">
<source>%@ (current):</source>
<target state="translated">%@ (目前的)</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="%@:" xml:space="preserve" approved="no">
<source>%@:</source>
<target state="translated">%@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Deleted at" xml:space="preserve" approved="no">
<source>Deleted at</source>
<target state="translated">已刪除在</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Deleted at: %@" xml:space="preserve" approved="no">
<source>Deleted at: %@</source>
<target state="translated">已刪除在:%@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="New display name" xml:space="preserve" approved="no">
<source>New display name</source>
<target state="translated">新的顯示名稱</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Opening database…" xml:space="preserve" approved="no">
<source>Opening database…</source>
<target state="translated">開啟數據庫中…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sent at" xml:space="preserve" approved="no">
<source>Sent at</source>
<target state="translated">已傳送在</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Set passcode" xml:space="preserve" approved="no">
<source>Set passcode</source>
<target state="translated">設定密碼</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sent message" xml:space="preserve" approved="no">
<source>Sent message</source>
<target state="translated">已傳送訊息</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Sent at: %@" xml:space="preserve" approved="no">
<source>Sent at: %@</source>
<target state="translated">已傳送在:%@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="custom" xml:space="preserve" approved="no">
<source>custom</source>
<target state="translated">自定義</target>
<note>dropdown time picker choice</note>
</trans-unit>
<trans-unit id="days" xml:space="preserve" approved="no">
<source>days</source>
<target state="translated">天</target>
<note>time unit</note>
</trans-unit>
<trans-unit id="0s" xml:space="preserve" approved="no">
<source>0s</source>
<target state="translated">0秒</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="1 minute" xml:space="preserve" approved="no">
<source>1 minute</source>
<target state="translated">1分鐘</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions." xml:space="preserve" approved="no">
<source>Allow message reactions.</source>
<target state="translated">允許訊息回應。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="An empty chat profile with the provided name is created, and the app opens as usual." xml:space="preserve" approved="no">
<source>An empty chat profile with the provided name is created, and the app opens as usual.</source>
<target state="translated">已建立一個具有所提供名稱的空白對話檔案,而應用程式將照常開啟。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Better messages" xml:space="preserve" approved="no">
<source>Better messages</source>
<target state="translated">更佳的訊息</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change self-destruct mode" xml:space="preserve" approved="no">
<source>Change self-destruct mode</source>
<target state="translated">修改自毁模式</target>
<note>authentication reason</note>
</trans-unit>
<trans-unit id="Change self-destruct passcode" xml:space="preserve" approved="no">
<source>Change self-destruct passcode</source>
<target state="translated">修改自毀密碼</target>
<note>authentication reason
set passcode view</note>
</trans-unit>
<trans-unit id="Custom time" xml:space="preserve" approved="no">
<source>Custom time</source>
<target state="translated">自定義時間</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Database ID: %d" xml:space="preserve" approved="no">
<source>Database ID: %d</source>
<target state="translated">數據庫 ID%d</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Enable self-destruct" xml:space="preserve" approved="no">
<source>Enable self-destruct</source>
<target state="translated">啟用自毀</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve" approved="no">
<source>Finally, we have them! 🚀</source>
<target state="translated">終於,我們有了它們!🚀</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History" xml:space="preserve" approved="no">
<source>History</source>
<target state="translated">紀錄</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="If you enter this passcode when opening the app, all app data will be irreversibly removed!" xml:space="preserve" approved="no">
<source>If you enter this passcode when opening the app, all app data will be irreversibly removed!</source>
<target state="translated">如果你在開啟應用程式時輸入此密碼,所有應用程式資料將被不可逆轉地刪除!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Info" xml:space="preserve" approved="no">
<source>Info</source>
<target state="translated">個人訊息</target>
<note>chat item action</note>
</trans-unit>
<trans-unit id="Japanese interface" xml:space="preserve" approved="no">
<source>Japanese interface</source>
<target state="translated">日本語言界面</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message reactions" xml:space="preserve" approved="no">
<source>Message reactions</source>
<target state="translated">訊息互動</target>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Moderated at: %@" xml:space="preserve" approved="no">
<source>Moderated at: %@</source>
<target state="translated">已移除在:%@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Moderated at" xml:space="preserve" approved="no">
<source>Moderated at</source>
<target state="translated">已移除在</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Message reactions are prohibited in this group." xml:space="preserve" approved="no">
<source>Message reactions are prohibited in this group.</source>
<target state="translated">訊息互動於這個群組內是禁用的。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can add message reactions." xml:space="preserve" approved="no">
<source>Only you can add message reactions.</source>
<target state="translated">只有你可以新增訊息互動。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can add message reactions." xml:space="preserve" approved="no">
<source>Only your contact can add message reactions.</source>
<target state="translated">只有你的聯絡人可以新增訊息互動。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Prohibit message reactions." xml:space="preserve" approved="no">
<source>Prohibit message reactions.</source>
<target state="translated">禁止訊息互動。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Read more" xml:space="preserve" approved="no">
<source>Read more</source>
<target state="translated">查看更多</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="React..." xml:space="preserve" approved="no">
<source>React...</source>
<target state="translated">互動...</target>
<note>chat item menu</note>
</trans-unit>
<trans-unit id="Prohibit messages reactions." xml:space="preserve" approved="no">
<source>Prohibit messages reactions.</source>
<target state="translated">禁止訊息互動。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Received message" xml:space="preserve" approved="no">
<source>Received message</source>
<target state="translated">已接收訊息</target>
<note>message info title</note>
</trans-unit>
<trans-unit id="Received at: %@" xml:space="preserve" approved="no">
<source>Received at: %@</source>
<target state="translated">已接收在:%@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Received at" xml:space="preserve" approved="no">
<source>Received at</source>
<target state="translated">已接收在</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Record updated at: %@" xml:space="preserve" approved="no">
<source>Record updated at: %@</source>
<target state="translated">紀錄已更新在:%@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="Record updated at" xml:space="preserve" approved="no">
<source>Record updated at</source>
<target state="translated">紀錄已更新在</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Self-destruct passcode enabled!" xml:space="preserve" approved="no">
<source>Self-destruct passcode enabled!</source>
<target state="translated">已啟用自毀密碼!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Self-destruct passcode changed!" xml:space="preserve" approved="no">
<source>Self-destruct passcode changed!</source>
<target state="translated">已修改自毀密碼!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Self-destruct passcode" xml:space="preserve" approved="no">
<source>Self-destruct passcode</source>
<target state="translated">自毀密碼</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send disappearing message" xml:space="preserve" approved="no">
<source>Send disappearing message</source>
<target state="translated">傳送自動銷毀訊息</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Unit" xml:space="preserve" approved="no">
<source>Unit</source>
<target state="translated">單位</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="hours" xml:space="preserve" approved="no">
<source>hours</source>
<target state="translated">小時</target>
<note>time unit</note>
</trans-unit>
<trans-unit id="minutes" xml:space="preserve" approved="no">
<source>minutes</source>
<target state="translated">分鐘</target>
<note>time unit</note>
</trans-unit>
<trans-unit id="weeks" xml:space="preserve" approved="no">
<source>weeks</source>
<target state="translated">星期</target>
<note>time unit</note>
</trans-unit>
<trans-unit id="seconds" xml:space="preserve" approved="no">
<source>seconds</source>
<target state="translated">秒</target>
<note>time unit</note>
</trans-unit>
<trans-unit id="months" xml:space="preserve" approved="no">
<source>months</source>
<target state="translated">個月</target>
<note>time unit</note>
</trans-unit>
<trans-unit id="no text" xml:space="preserve" approved="no">
<source>no text</source>
<target state="translated">沒有文字</target>
<note>copied message info in history</note>
</trans-unit>
<trans-unit id="Message reactions are prohibited in this chat." xml:space="preserve" approved="no">
<source>Message reactions are prohibited in this chat.</source>
<target state="translated">訊息互動於這個聊天室是禁用的。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="30 seconds" xml:space="preserve" approved="no">
<source>30 seconds</source>
<target state="translated">30秒</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Duration" xml:space="preserve" approved="no">
<source>Duration</source>
<target state="translated">持續時間</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts adding message reactions." xml:space="preserve" approved="no">
<source>Allow your contacts adding message reactions.</source>
<target state="translated">允許你的聯絡人新增訊息互動。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Disappears at" xml:space="preserve" approved="no">
<source>Disappears at</source>
<target state="translated">銷毀於</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Disappears at: %@" xml:space="preserve" approved="no">
<source>Disappears at: %@</source>
<target state="translated">銷毀於: %@</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="- voice messages up to 5 minutes.&#10;- custom time to disappear.&#10;- editing history." xml:space="preserve" approved="no">
<source>- voice messages up to 5 minutes.
- custom time to disappear.
- editing history.</source>
<target state="translated">- 長達5分鐘的語音訊息。
- 自定義銷毀時間。
- 編輯紀錄。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="All data is erased when it is entered." xml:space="preserve" approved="no">
<source>All data is erased when it is entered.</source>
<target state="translated">所有數據會在輸入後刪除。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve" approved="no">
<source>Allow message reactions only if your contact allows them.</source>
<target state="translated">只有你的聯絡人允許的情況下,才允許訊息互動。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can add message reactions." xml:space="preserve" approved="no">
<source>Both you and your contact can add message reactions.</source>
<target state="translated">你和你的聯絡人可以新增訊息互動。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
</body>
</file>
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="zh-Hant" datatype="plaintext">
+31 -31
View File
@@ -147,11 +147,6 @@
5CFE0922282EEAF60002594B /* ZoomableScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CFE0920282EEAF60002594B /* ZoomableScrollView.swift */; };
6407BA83295DA85D0082BA18 /* CIInvalidJSONView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6407BA82295DA85D0082BA18 /* CIInvalidJSONView.swift */; };
6432857C2925443C00FBE5C8 /* GroupPreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6432857B2925443C00FBE5C8 /* GroupPreferencesView.swift */; };
643EE9682A372E8700678085 /* libHSsimplex-chat-5.1.3.0-7OTLHAmjBPvIoz7MIh3bdt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 643EE9632A372E8700678085 /* libHSsimplex-chat-5.1.3.0-7OTLHAmjBPvIoz7MIh3bdt.a */; };
643EE9692A372E8700678085 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 643EE9642A372E8700678085 /* libffi.a */; };
643EE96A2A372E8700678085 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 643EE9652A372E8700678085 /* libgmpxx.a */; };
643EE96B2A372E8700678085 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 643EE9662A372E8700678085 /* libgmp.a */; };
643EE96C2A372E8700678085 /* libHSsimplex-chat-5.1.3.0-7OTLHAmjBPvIoz7MIh3bdt-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 643EE9672A372E8700678085 /* libHSsimplex-chat-5.1.3.0-7OTLHAmjBPvIoz7MIh3bdt-ghc8.10.7.a */; };
6440CA00288857A10062C672 /* CIEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6440C9FF288857A10062C672 /* CIEventView.swift */; };
6440CA03288AECA70062C672 /* AddGroupMembersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6440CA02288AECA70062C672 /* AddGroupMembersView.swift */; };
6442E0BA287F169300CEC0F9 /* AddGroupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6442E0B9287F169300CEC0F9 /* AddGroupView.swift */; };
@@ -170,6 +165,11 @@
648010AB281ADD15009009B9 /* CIFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648010AA281ADD15009009B9 /* CIFileView.swift */; };
649BCDA0280460FD00C3A862 /* ComposeImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCD9F280460FD00C3A862 /* ComposeImageView.swift */; };
649BCDA22805D6EF00C3A862 /* CIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCDA12805D6EF00C3A862 /* CIImageView.swift */; };
64A353102A4C84CE007CD71D /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A3530B2A4C84CE007CD71D /* libgmp.a */; };
64A353112A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A3530C2A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm.a */; };
64A353122A4C84CE007CD71D /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A3530D2A4C84CE007CD71D /* libffi.a */; };
64A353132A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A3530E2A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm-ghc8.10.7.a */; };
64A353142A4C84CE007CD71D /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A3530F2A4C84CE007CD71D /* libgmpxx.a */; };
64AA1C6927EE10C800AC7277 /* ContextItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AA1C6827EE10C800AC7277 /* ContextItemView.swift */; };
64AA1C6C27F3537400AC7277 /* DeletedItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AA1C6B27F3537400AC7277 /* DeletedItemView.swift */; };
64C06EB52A0A4A7C00792D4D /* ChatItemInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C06EB42A0A4A7C00792D4D /* ChatItemInfoView.swift */; };
@@ -253,7 +253,7 @@
18415B08031E8FB0F7FC27F9 /* CallViewRenderers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallViewRenderers.swift; sourceTree = "<group>"; };
18415DAAAD1ADBEDB0EDA852 /* VideoPlayerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoPlayerView.swift; sourceTree = "<group>"; };
18415FD2E36F13F596A45BB4 /* CIVideoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CIVideoView.swift; sourceTree = "<group>"; };
3C714779281C0F6800CB4D4B /* www */ = {isa = PBXFileReference; lastKnownFileType = folder; name = www; path = ../android/app/src/main/assets/www; sourceTree = "<group>"; };
3C714779281C0F6800CB4D4B /* www */ = {isa = PBXFileReference; lastKnownFileType = folder; name = www; path = ../multiplatform/android/src/main/assets/www; sourceTree = "<group>"; };
3C8C548828133C84000A3EC7 /* PasteToConnectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasteToConnectView.swift; sourceTree = "<group>"; };
3CDBCF4127FAE51000354CDD /* ComposeLinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeLinkView.swift; sourceTree = "<group>"; };
3CDBCF4727FF621E00354CDD /* CILinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CILinkView.swift; sourceTree = "<group>"; };
@@ -422,11 +422,6 @@
5CFE0920282EEAF60002594B /* ZoomableScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ZoomableScrollView.swift; path = Shared/Views/ZoomableScrollView.swift; sourceTree = SOURCE_ROOT; };
6407BA82295DA85D0082BA18 /* CIInvalidJSONView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIInvalidJSONView.swift; sourceTree = "<group>"; };
6432857B2925443C00FBE5C8 /* GroupPreferencesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupPreferencesView.swift; sourceTree = "<group>"; };
643EE9632A372E8700678085 /* libHSsimplex-chat-5.1.3.0-7OTLHAmjBPvIoz7MIh3bdt.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.1.3.0-7OTLHAmjBPvIoz7MIh3bdt.a"; sourceTree = "<group>"; };
643EE9642A372E8700678085 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
643EE9652A372E8700678085 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
643EE9662A372E8700678085 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
643EE9672A372E8700678085 /* libHSsimplex-chat-5.1.3.0-7OTLHAmjBPvIoz7MIh3bdt-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.1.3.0-7OTLHAmjBPvIoz7MIh3bdt-ghc8.10.7.a"; sourceTree = "<group>"; };
6440C9FF288857A10062C672 /* CIEventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIEventView.swift; sourceTree = "<group>"; };
6440CA02288AECA70062C672 /* AddGroupMembersView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddGroupMembersView.swift; sourceTree = "<group>"; };
6442E0B9287F169300CEC0F9 /* AddGroupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddGroupView.swift; sourceTree = "<group>"; };
@@ -446,6 +441,11 @@
6493D667280ED77F007A76FB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
649BCD9F280460FD00C3A862 /* ComposeImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeImageView.swift; sourceTree = "<group>"; };
649BCDA12805D6EF00C3A862 /* CIImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIImageView.swift; sourceTree = "<group>"; };
64A3530B2A4C84CE007CD71D /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
64A3530C2A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm.a"; sourceTree = "<group>"; };
64A3530D2A4C84CE007CD71D /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
64A3530E2A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm-ghc8.10.7.a"; sourceTree = "<group>"; };
64A3530F2A4C84CE007CD71D /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
64AA1C6827EE10C800AC7277 /* ContextItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextItemView.swift; sourceTree = "<group>"; };
64AA1C6B27F3537400AC7277 /* DeletedItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeletedItemView.swift; sourceTree = "<group>"; };
64C06EB42A0A4A7C00792D4D /* ChatItemInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemInfoView.swift; sourceTree = "<group>"; };
@@ -498,12 +498,12 @@
buildActionMask = 2147483647;
files = (
5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */,
643EE96A2A372E8700678085 /* libgmpxx.a in Frameworks */,
64A353132A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm-ghc8.10.7.a in Frameworks */,
64A353102A4C84CE007CD71D /* libgmp.a in Frameworks */,
64A353112A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm.a in Frameworks */,
64A353122A4C84CE007CD71D /* libffi.a in Frameworks */,
5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */,
643EE9682A372E8700678085 /* libHSsimplex-chat-5.1.3.0-7OTLHAmjBPvIoz7MIh3bdt.a in Frameworks */,
643EE96B2A372E8700678085 /* libgmp.a in Frameworks */,
643EE9692A372E8700678085 /* libffi.a in Frameworks */,
643EE96C2A372E8700678085 /* libHSsimplex-chat-5.1.3.0-7OTLHAmjBPvIoz7MIh3bdt-ghc8.10.7.a in Frameworks */,
64A353142A4C84CE007CD71D /* libgmpxx.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -564,11 +564,11 @@
5C764E5C279C70B7000C6508 /* Libraries */ = {
isa = PBXGroup;
children = (
643EE9642A372E8700678085 /* libffi.a */,
643EE9662A372E8700678085 /* libgmp.a */,
643EE9652A372E8700678085 /* libgmpxx.a */,
643EE9672A372E8700678085 /* libHSsimplex-chat-5.1.3.0-7OTLHAmjBPvIoz7MIh3bdt-ghc8.10.7.a */,
643EE9632A372E8700678085 /* libHSsimplex-chat-5.1.3.0-7OTLHAmjBPvIoz7MIh3bdt.a */,
64A3530D2A4C84CE007CD71D /* libffi.a */,
64A3530B2A4C84CE007CD71D /* libgmp.a */,
64A3530F2A4C84CE007CD71D /* libgmpxx.a */,
64A3530E2A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm-ghc8.10.7.a */,
64A3530C2A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm.a */,
);
path = Libraries;
sourceTree = "<group>";
@@ -1470,7 +1470,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 150;
CURRENT_PROJECT_VERSION = 151;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
ENABLE_PREVIEWS = YES;
@@ -1491,7 +1491,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 5.1.3;
MARKETING_VERSION = 5.2;
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app;
PRODUCT_NAME = SimpleX;
SDKROOT = iphoneos;
@@ -1512,7 +1512,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 150;
CURRENT_PROJECT_VERSION = 151;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
ENABLE_PREVIEWS = YES;
@@ -1533,7 +1533,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 5.1.3;
MARKETING_VERSION = 5.2;
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app;
PRODUCT_NAME = SimpleX;
SDKROOT = iphoneos;
@@ -1550,7 +1550,7 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 9767FTRA3G;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MARKETING_VERSION = 1.0;
@@ -1570,7 +1570,7 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 9767FTRA3G;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MARKETING_VERSION = 1.0;
@@ -1592,7 +1592,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 150;
CURRENT_PROJECT_VERSION = 151;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
GENERATE_INFOPLIST_FILE = YES;
@@ -1605,7 +1605,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.1.3;
MARKETING_VERSION = 5.2;
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -1624,7 +1624,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 150;
CURRENT_PROJECT_VERSION = 151;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
GENERATE_INFOPLIST_FILE = YES;
@@ -1637,7 +1637,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 5.1.3;
MARKETING_VERSION = 5.2;
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE";
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
+48 -5
View File
@@ -71,6 +71,8 @@ public enum ChatCommand {
case apiGroupMemberInfo(groupId: Int64, groupMemberId: Int64)
case apiSwitchContact(contactId: Int64)
case apiSwitchGroupMember(groupId: Int64, groupMemberId: Int64)
case apiAbortSwitchContact(contactId: Int64)
case apiAbortSwitchGroupMember(groupId: Int64, groupMemberId: Int64)
case apiGetContactCode(contactId: Int64)
case apiGetGroupMemberCode(groupId: Int64, groupMemberId: Int64)
case apiVerifyContact(contactId: Int64, connectionCode: String?)
@@ -179,6 +181,8 @@ public enum ChatCommand {
case let .apiGroupMemberInfo(groupId, groupMemberId): return "/_info #\(groupId) \(groupMemberId)"
case let .apiSwitchContact(contactId): return "/_switch @\(contactId)"
case let .apiSwitchGroupMember(groupId, groupMemberId): return "/_switch #\(groupId) \(groupMemberId)"
case let .apiAbortSwitchContact(contactId): return "/_abort switch @\(contactId)"
case let .apiAbortSwitchGroupMember(groupId, groupMemberId): return "/_abort switch #\(groupId) \(groupMemberId)"
case let .apiGetContactCode(contactId): return "/_get code @\(contactId)"
case let .apiGetGroupMemberCode(groupId, groupMemberId): return "/_get code #\(groupId) \(groupMemberId)"
case let .apiVerifyContact(contactId, .some(connectionCode)): return "/_verify code @\(contactId) \(connectionCode)"
@@ -285,6 +289,8 @@ public enum ChatCommand {
case .apiGroupMemberInfo: return "apiGroupMemberInfo"
case .apiSwitchContact: return "apiSwitchContact"
case .apiSwitchGroupMember: return "apiSwitchGroupMember"
case .apiAbortSwitchContact: return "apiAbortSwitchContact"
case .apiAbortSwitchGroupMember: return "apiAbortSwitchGroupMember"
case .apiGetContactCode: return "apiGetContactCode"
case .apiGetGroupMemberCode: return "apiGetGroupMemberCode"
case .apiVerifyContact: return "apiVerifyContact"
@@ -397,6 +403,10 @@ public enum ChatResponse: Decodable, Error {
case networkConfig(networkConfig: NetCfg)
case contactInfo(user: User, contact: Contact, connectionStats: ConnectionStats, customUserProfile: Profile?)
case groupMemberInfo(user: User, groupInfo: GroupInfo, member: GroupMember, connectionStats_: ConnectionStats?)
case contactSwitchStarted(user: User, contact: Contact, connectionStats: ConnectionStats)
case groupMemberSwitchStarted(user: User, groupInfo: GroupInfo, member: GroupMember, connectionStats: ConnectionStats)
case contactSwitchAborted(user: User, contact: Contact, connectionStats: ConnectionStats)
case groupMemberSwitchAborted(user: User, groupInfo: GroupInfo, member: GroupMember, connectionStats: ConnectionStats)
case contactCode(user: User, contact: Contact, connectionCode: String)
case groupMemberCode(user: User, groupInfo: GroupInfo, member: GroupMember, connectionCode: String)
case connectionVerified(user: User, verified: Bool, expectedCode: String)
@@ -516,6 +526,10 @@ public enum ChatResponse: Decodable, Error {
case .networkConfig: return "networkConfig"
case .contactInfo: return "contactInfo"
case .groupMemberInfo: return "groupMemberInfo"
case .contactSwitchStarted: return "contactSwitchStarted"
case .groupMemberSwitchStarted: return "groupMemberSwitchStarted"
case .contactSwitchAborted: return "contactSwitchAborted"
case .groupMemberSwitchAborted: return "groupMemberSwitchAborted"
case .contactCode: return "contactCode"
case .groupMemberCode: return "groupMemberCode"
case .connectionVerified: return "connectionVerified"
@@ -633,7 +647,11 @@ public enum ChatResponse: Decodable, Error {
case let .chatItemTTL(u, chatItemTTL): return withUser(u, String(describing: chatItemTTL))
case let .networkConfig(networkConfig): return String(describing: networkConfig)
case let .contactInfo(u, contact, connectionStats, customUserProfile): return withUser(u, "contact: \(String(describing: contact))\nconnectionStats: \(String(describing: connectionStats))\ncustomUserProfile: \(String(describing: customUserProfile))")
case let .groupMemberInfo(u, groupInfo, member, connectionStats_): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionStats_: \(String(describing: connectionStats_)))")
case let .groupMemberInfo(u, groupInfo, member, connectionStats_): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionStats_: \(String(describing: connectionStats_))")
case let .contactSwitchStarted(u, contact, connectionStats): return withUser(u, "contact: \(String(describing: contact))\nconnectionStats: \(String(describing: connectionStats))")
case let .groupMemberSwitchStarted(u, groupInfo, member, connectionStats): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionStats: \(String(describing: connectionStats))")
case let .contactSwitchAborted(u, contact, connectionStats): return withUser(u, "contact: \(String(describing: contact))\nconnectionStats: \(String(describing: connectionStats))")
case let .groupMemberSwitchAborted(u, groupInfo, member, connectionStats): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionStats: \(String(describing: connectionStats))")
case let .contactCode(u, contact, connectionCode): return withUser(u, "contact: \(String(describing: contact))\nconnectionCode: \(connectionCode)")
case let .groupMemberCode(u, groupInfo, member, connectionCode): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionCode: \(connectionCode)")
case let .connectionVerified(u, verified, expectedCode): return withUser(u, "verified: \(verified)\nconnectionCode: \(expectedCode)")
@@ -1072,17 +1090,42 @@ public struct KeepAliveOpts: Codable, Equatable {
public struct ChatSettings: Codable {
public var enableNtfs: Bool
public var favorite: Bool
public init(enableNtfs: Bool) {
public init(enableNtfs: Bool, favorite: Bool) {
self.enableNtfs = enableNtfs
self.favorite = favorite
}
public static let defaults: ChatSettings = ChatSettings(enableNtfs: true)
public static let defaults: ChatSettings = ChatSettings(enableNtfs: true, favorite: false)
}
public struct ConnectionStats: Codable {
public var rcvServers: [String]?
public var sndServers: [String]?
public var rcvQueuesInfo: [RcvQueueInfo]
public var sndQueuesInfo: [SndQueueInfo]
}
public struct RcvQueueInfo: Codable {
public var rcvServer: String
public var rcvSwitchStatus: RcvSwitchStatus?
public var canAbortSwitch: Bool
}
public enum RcvSwitchStatus: String, Codable {
case switchStarted = "switch_started"
case sendingQADD = "sending_qadd"
case sendingQUSE = "sending_quse"
case receivedMessage = "received_message"
}
public struct SndQueueInfo: Codable {
public var sndServer: String
public var sndSwitchStatus: SndSwitchStatus?
}
public enum SndSwitchStatus: String, Codable {
case sendingQKEY = "sending_qkey"
case sendingQTEST = "sending_qtest"
}
public struct UserContactLink: Decodable {
+37 -9
View File
@@ -667,10 +667,11 @@ public enum ChatFeature: String, Decodable, Feature {
public enum GroupFeature: String, Decodable, Feature {
case timedMessages
case directMessages
case fullDelete
case reactions
case voice
case directMessages
case files
public var id: Self { self }
@@ -688,6 +689,7 @@ public enum GroupFeature: String, Decodable, Feature {
case .fullDelete: return NSLocalizedString("Delete for everyone", comment: "chat feature")
case .reactions: return NSLocalizedString("Message reactions", comment: "chat feature")
case .voice: return NSLocalizedString("Voice messages", comment: "chat feature")
case .files: return NSLocalizedString("Files and media", comment: "chat feature")
}
}
@@ -698,6 +700,7 @@ public enum GroupFeature: String, Decodable, Feature {
case .fullDelete: return "trash.slash"
case .reactions: return "face.smiling"
case .voice: return "mic"
case .files: return "doc"
}
}
@@ -708,6 +711,7 @@ public enum GroupFeature: String, Decodable, Feature {
case .fullDelete: return "trash.slash.fill"
case .reactions: return "face.smiling.fill"
case .voice: return "mic.fill"
case .files: return "doc.fill"
}
}
@@ -746,6 +750,11 @@ public enum GroupFeature: String, Decodable, Feature {
case .on: return "Allow to send voice messages."
case .off: return "Prohibit sending voice messages."
}
case .files:
switch enabled {
case .on: return "Allow to send files and media."
case .off: return "Prohibit sending files and media."
}
}
} else {
switch self {
@@ -774,6 +783,11 @@ public enum GroupFeature: String, Decodable, Feature {
case .on: return "Group members can send voice messages."
case .off: return "Voice messages are prohibited in this group."
}
case .files:
switch enabled {
case .on: return "Group members can send files and media."
case .off: return "Files and media are prohibited in this group."
}
}
}
}
@@ -912,19 +926,22 @@ public struct FullGroupPreferences: Decodable, Equatable {
public var fullDelete: GroupPreference
public var reactions: GroupPreference
public var voice: GroupPreference
public var files: GroupPreference
public init(
timedMessages: TimedMessagesGroupPreference,
directMessages: GroupPreference,
fullDelete: GroupPreference,
reactions: GroupPreference,
voice: GroupPreference
voice: GroupPreference,
files: GroupPreference
) {
self.timedMessages = timedMessages
self.directMessages = directMessages
self.fullDelete = fullDelete
self.reactions = reactions
self.voice = voice
self.files = files
}
public static let sampleData = FullGroupPreferences(
@@ -932,7 +949,8 @@ public struct FullGroupPreferences: Decodable, Equatable {
directMessages: GroupPreference(enable: .off),
fullDelete: GroupPreference(enable: .off),
reactions: GroupPreference(enable: .on),
voice: GroupPreference(enable: .on)
voice: GroupPreference(enable: .on),
files: GroupPreference(enable: .on)
)
}
@@ -942,19 +960,22 @@ public struct GroupPreferences: Codable {
public var fullDelete: GroupPreference?
public var reactions: GroupPreference?
public var voice: GroupPreference?
public var files: GroupPreference?
public init(
timedMessages: TimedMessagesGroupPreference?,
directMessages: GroupPreference?,
fullDelete: GroupPreference?,
reactions: GroupPreference?,
voice: GroupPreference?
voice: GroupPreference?,
files: GroupPreference?
) {
self.timedMessages = timedMessages
self.directMessages = directMessages
self.fullDelete = fullDelete
self.reactions = reactions
self.voice = voice
self.files = files
}
public static let sampleData = GroupPreferences(
@@ -962,7 +983,8 @@ public struct GroupPreferences: Codable {
directMessages: GroupPreference(enable: .off),
fullDelete: GroupPreference(enable: .off),
reactions: GroupPreference(enable: .on),
voice: GroupPreference(enable: .on)
voice: GroupPreference(enable: .on),
files: GroupPreference(enable: .on)
)
}
@@ -972,7 +994,8 @@ public func toGroupPreferences(_ fullPreferences: FullGroupPreferences) -> Group
directMessages: fullPreferences.directMessages,
fullDelete: fullPreferences.fullDelete,
reactions: fullPreferences.reactions,
voice: fullPreferences.voice
voice: fullPreferences.voice,
files: fullPreferences.files
)
}
@@ -1240,10 +1263,14 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat {
}
public var ntfsEnabled: Bool {
self.chatSettings?.enableNtfs ?? false
}
public var chatSettings: ChatSettings? {
switch self {
case let .direct(contact): return contact.chatSettings.enableNtfs
case let .group(groupInfo): return groupInfo.chatSettings.enableNtfs
default: return false
case let .direct(contact): return contact.chatSettings
case let .group(groupInfo): return groupInfo.chatSettings
default: return nil
}
}
@@ -3063,6 +3090,7 @@ public enum SndConnEvent: Decodable {
public enum SwitchPhase: String, Decodable {
case started
case confirmed
case secured
case completed
}
+4 -7
View File
@@ -2698,6 +2698,9 @@
/* No comment provided by engineer. */
"SMP servers" = "SMP servery";
/* No comment provided by engineer. */
"Some non-fatal errors occurred during import - you may see Chat console for more details." = "Během importu došlo k nezávažným chybám - podrobnosti naleznete v chat konzoli.";
/* notification title */
"Somebody" = "Někdo";
@@ -2881,9 +2884,6 @@
/* No comment provided by engineer. */
"This error is permanent for this connection, please re-connect." = "Tato chyba je pro toto připojení trvalá, připojte se znovu.";
/* No comment provided by engineer. */
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." = "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.";
/* No comment provided by engineer. */
"This group no longer exists." = "Tato skupina již neexistuje.";
@@ -3203,7 +3203,7 @@
"You can create it later" = "Můžete vytvořit později";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Profil uživatele můžete skrýt nebo ztlumit - přejeďte prstem doprava.\nSimpleX zámek musí být povolen.";
"You can hide or mute a user profile - swipe it to the right." = "Profil uživatele můžete skrýt nebo ztlumit - přejeďte prstem doprava.";
/* notification body */
"You can now send messages to %@" = "Nyní můžete posílat zprávy %@";
@@ -3343,9 +3343,6 @@
/* No comment provided by engineer. */
"Your chat profiles" = "Vaše chat profily";
/* No comment provided by engineer. */
"Your chats" = "Vaše konverzace";
/* No comment provided by engineer. */
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "K dokončení připojení, musí být váš kontakt online.\nToto připojení můžete zrušit a kontakt odebrat (a zkusit to později s novým odkazem).";
+34 -37
View File
@@ -20,7 +20,7 @@
"_italic_" = "\\_kursiv_";
/* No comment provided by engineer. */
"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- Bis zu 5 Minuten lange Sprachnachrichten\n- Zeit für verschwindende Nachrichten anpassen\n- Vergangenheit bearbeiten";
"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- Bis zu 5 Minuten lange Sprachnachrichten.\n- Zeitdauer für verschwindende Nachrichten anpassen.\n- Nachrichten-Historie bearbeiten.";
/* No comment provided by engineer. */
", " = ", ";
@@ -312,13 +312,13 @@
"Advanced network settings" = "Erweiterte Netzwerkeinstellungen";
/* No comment provided by engineer. */
"All app data is deleted." = "App-Daten werden komplett gelöscht.";
"All app data is deleted." = "Werden die App-Daten komplett gelöscht.";
/* 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 data is erased when it is entered." = "Sobald es eingegeben wird, werden alle Daten gelöscht.";
"All data is erased when it is entered." = "Alle Daten werden gelöscht, sobald diese eingegeben wird.";
/* No comment provided by engineer. */
"All group members will remain connected." = "Alle Gruppenmitglieder bleiben verbunden.";
@@ -405,10 +405,10 @@
"App icon" = "App Icon";
/* No comment provided by engineer. */
"App passcode" = "App Passwort";
"App passcode" = "App-Zugangscode";
/* No comment provided by engineer. */
"App passcode is replaced with self-destruct passcode." = "Das App Passwort wurde durch das Selbstzerstörungspasswort ersetzt.";
"App passcode is replaced with self-destruct passcode." = "App-Zugangscode wurde durch den Selbstzerstörungs-Zugangscode ersetzt.";
/* No comment provided by engineer. */
"App version" = "App Version";
@@ -417,7 +417,7 @@
"App version: v%@" = "App Version: v%@";
/* No comment provided by engineer. */
"Appearance" = "Design";
"Appearance" = "Erscheinungsbild";
/* No comment provided by engineer. */
"Attach" = "Anhängen";
@@ -546,7 +546,7 @@
"Change member role?" = "Die Mitgliederrolle ändern?";
/* authentication reason */
"Change passcode" = "Passwort ändern";
"Change passcode" = "Zugangscode ändern";
/* No comment provided by engineer. */
"Change receiving address" = "Wechseln der Empfängeradresse";
@@ -562,7 +562,7 @@
/* authentication reason
set passcode view */
"Change self-destruct passcode" = "Selbstzerstörungspasswort ändern";
"Change self-destruct passcode" = "Selbstzerstörungs-Zugangscode ändern";
/* chat item text */
"changed address for you" = "wechselte die Adresse für Sie";
@@ -583,7 +583,7 @@
"Chat archive" = "Datenbank Archiv";
/* No comment provided by engineer. */
"Chat console" = "Chat Konsole";
"Chat console" = "Chat-Konsole";
/* No comment provided by engineer. */
"Chat database" = "Chat-Datenbank";
@@ -658,7 +658,7 @@
"Confirm new passphrase…" = "Neues Passwort bestätigen…";
/* No comment provided by engineer. */
"Confirm Passcode" = "Passwort bestätigen";
"Confirm Passcode" = "Zugangscode bestätigen";
/* No comment provided by engineer. */
"Confirm password" = "Passwort bestätigen";
@@ -817,7 +817,7 @@
"creator" = "Ersteller";
/* No comment provided by engineer. */
"Current Passcode" = "Aktuelles Passwort";
"Current Passcode" = "Aktueller Zugangscode";
/* No comment provided by engineer. */
"Current passphrase…" = "Aktuelles Passwort…";
@@ -1141,7 +1141,7 @@
"Enable self-destruct" = "Selbstzerstörung aktivieren";
/* set passcode view */
"Enable self-destruct passcode" = "Selbstzerstörungspasswort aktivieren";
"Enable self-destruct passcode" = "Selbstzerstörungs-Zugangscode aktivieren";
/* authentication reason */
"Enable SimpleX Lock" = "SimpleX Sperre aktivieren";
@@ -1195,7 +1195,7 @@
"Enter correct passphrase." = "Geben Sie das korrekte Passwort ein.";
/* No comment provided by engineer. */
"Enter Passcode" = "Passwort eingeben";
"Enter Passcode" = "Zugangscode eingeben";
/* No comment provided by engineer. */
"Enter passphrase…" = "Passwort eingeben…";
@@ -1306,7 +1306,7 @@
"Error saving ICE servers" = "Fehler beim Speichern der ICE-Server";
/* No comment provided by engineer. */
"Error saving passcode" = "Fehler beim Speichern des Passworts";
"Error saving passcode" = "Fehler beim Speichern des Zugangscodes";
/* No comment provided by engineer. */
"Error saving passphrase to keychain" = "Fehler beim Speichern des Passworts in den Schlüsselbund";
@@ -1543,10 +1543,10 @@
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Wenn Sie sich nicht persönlich treffen können, kann der **QR-Code während eines Videoanrufs gescannt werden**, oder Ihr Kontakt kann den Einladungslink über einen anderen Kanal mit Ihnen teilen.";
/* No comment provided by engineer. */
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Wenn Sie dieses Passwort während des Öffnens der App eingeben, werden alle App-Daten unwiederbringlich gelöscht!";
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Wenn Sie diesen Zugangscode während des Öffnens der App eingeben, werden alle App-Daten unwiederbringlich gelöscht!";
/* No comment provided by engineer. */
"If you enter your self-destruct passcode while opening the app:" = "Wenn Sie Ihr Selbstzerstörungspasswort während des Öffnens der App eingeben:";
"If you enter your self-destruct passcode while opening the app:" = "Wenn Sie Ihren Selbstzerstörungs-Zugangscode während des Öffnens der App eingeben:";
/* No comment provided by engineer. */
"If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app)." = "Tippen Sie unten auf **Später wiederholen**, wenn Sie den Chat jetzt benötigen (es wird Ihnen angeboten, die Datenbank bei einem Neustart der App zu migrieren).";
@@ -1615,7 +1615,7 @@
"Incompatible database version" = "Inkompatible Datenbank-Version";
/* PIN entry */
"Incorrect passcode" = "Passwort falsch";
"Incorrect passcode" = "Zugangscode ist falsch";
/* No comment provided by engineer. */
"Incorrect security code!" = "Falscher Sicherheitscode!";
@@ -1960,7 +1960,7 @@
"New message" = "Neue Nachricht";
/* No comment provided by engineer. */
"New Passcode" = "Neues Passwort";
"New Passcode" = "Neuer Zugangscode";
/* No comment provided by engineer. */
"New passphrase…" = "Neues Passwort…";
@@ -2117,19 +2117,19 @@
"owner" = "Eigentümer";
/* No comment provided by engineer. */
"Passcode" = "Passwort";
"Passcode" = "Zugangscode";
/* No comment provided by engineer. */
"Passcode changed!" = "Passwort geändert!";
"Passcode changed!" = "Zugangscode wurde geändert!";
/* No comment provided by engineer. */
"Passcode entry" = "Passworteingabe";
"Passcode entry" = "Eingabe des Zugangscodes";
/* No comment provided by engineer. */
"Passcode not changed!" = "Passwort wurde nicht geändert!";
"Passcode not changed!" = "Der Zugangscode wurde nicht geändert!";
/* No comment provided by engineer. */
"Passcode set!" = "Passwort wurde geändert!";
"Passcode set!" = "Zugangscode eingestellt!";
/* No comment provided by engineer. */
"Password to show" = "Passwort anzeigen";
@@ -2186,7 +2186,7 @@
"Please enter the previous password after restoring database backup. This action can not be undone." = "Bitte geben Sie das vorherige Passwort ein, nachdem Sie die Datenbanksicherung wiederhergestellt haben. Diese Aktion kann nicht rückgängig gemacht werden.";
/* No comment provided by engineer. */
"Please remember or store it securely - there is no way to recover a lost passcode!" = "Es gibt keine Möglichkeit ein vergessenes Passwort wiederherzustellen - bitte erinnern Sie sich gut daran oder speichern Sie es sicher ab!";
"Please remember or store it securely - there is no way to recover a lost passcode!" = "Es gibt keine Möglichkeit einen vergessenen Zugangscode wiederherzustellen - bitte erinnern Sie sich gut daran oder speichern Sie ihn sicher ab!";
/* No comment provided by engineer. */
"Please report it to the developers." = "Bitte melden Sie es den Entwicklern.";
@@ -2516,13 +2516,13 @@
"Self-destruct" = "Selbstzerstörung";
/* No comment provided by engineer. */
"Self-destruct passcode" = "Selbstzerstörungspasswort";
"Self-destruct passcode" = "Selbstzerstörungs-Zugangscode";
/* No comment provided by engineer. */
"Self-destruct passcode changed!" = "Das Selbstzerstörungspasswort wurde geändert!";
"Self-destruct passcode changed!" = "Der Selbstzerstörungs-Zugangscode wurde geändert!";
/* No comment provided by engineer. */
"Self-destruct passcode enabled!" = "Das Selbstzerstörungspasswort wurde aktiviert!";
"Self-destruct passcode enabled!" = "Der Selbstzerstörungs-Zugangscode wurde aktiviert!";
/* No comment provided by engineer. */
"Send" = "Senden";
@@ -2606,7 +2606,7 @@
"Set it instead of system authentication." = "Anstelle der System-Authentifizierung festlegen.";
/* No comment provided by engineer. */
"Set passcode" = "Passwort eingeben";
"Set passcode" = "Zugangscode einstellen";
/* No comment provided by engineer. */
"Set passphrase to export" = "Passwort für den Export festlegen";
@@ -2698,6 +2698,9 @@
/* No comment provided by engineer. */
"SMP servers" = "SMP-Server";
/* No comment provided by engineer. */
"Some non-fatal errors occurred during import - you may see Chat console for more details." = "Während des Imports sind einige nicht schwerwiegende Fehler aufgetreten - in der Chat-Konsole finden Sie weitere Einzelheiten.";
/* notification title */
"Somebody" = "Jemand";
@@ -2747,7 +2750,7 @@
"strike" = "durchstreichen";
/* No comment provided by engineer. */
"Submit" = "Übermitteln";
"Submit" = "Bestätigen";
/* No comment provided by engineer. */
"Support SimpleX Chat" = "Unterstützung von SimpleX Chat";
@@ -2881,9 +2884,6 @@
/* No comment provided by engineer. */
"This error is permanent for this connection, please re-connect." = "Es handelt sich um einen permanenten Fehler für diese Verbindung - bitte verbinden Sie sich neu.";
/* No comment provided by engineer. */
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." = "Diese Funktion ist experimentell! Sie wird nur funktionieren, wenn der Kontakt ebenfalls eine SimpleX-Version ab v4.2 installiert hat. Sobald der Adress-Wechsel abgeschlossen ist, sollten Sie die Nachricht im Chat-Verlauf sehen. Bitte prüfen Sie, ob Sie weiterhin Nachrichten von diesem Kontakt (oder Gruppenmitglied) empfangen können.";
/* No comment provided by engineer. */
"This group no longer exists." = "Diese Gruppe existiert nicht mehr.";
@@ -3185,7 +3185,7 @@
"You are connected to the server used to receive messages from this contact." = "Sie sind mit dem Server verbunden, der für den Empfang von Nachrichten mit diesem Kontakt genutzt wird.";
/* No comment provided by engineer. */
"you are invited to group" = "Sie sind zur Gruppe eingeladen";
"you are invited to group" = "Sie sind zu der Gruppe eingeladen";
/* No comment provided by engineer. */
"You are invited to group" = "Sie sind zu der Gruppe eingeladen";
@@ -3203,7 +3203,7 @@
"You can create it later" = "Sie können dies später erstellen";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Sie können ein Benutzerprofil verbergen oder stummschalten - wischen Sie es nach rechts.\nDafür muss die SimpleX Sperre aktiviert sein.";
"You can hide or mute a user profile - swipe it to the right." = "Sie können ein Benutzerprofil verbergen oder stummschalten - wischen Sie es nach rechts.";
/* notification body */
"You can now send messages to %@" = "Sie können nun Nachrichten an %@ versenden";
@@ -3343,9 +3343,6 @@
/* No comment provided by engineer. */
"Your chat profiles" = "Meine Chat-Profile";
/* No comment provided by engineer. */
"Your chats" = "Meine Chats";
/* No comment provided by engineer. */
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Damit die Verbindung hergestellt werden kann, muss Ihr Kontakt online sein.\nSie können diese Verbindung abbrechen und den Kontakt entfernen (und es später nochmals mit einem neuen Link versuchen).";
+20 -23
View File
@@ -315,7 +315,7 @@
"All app data is deleted." = "Todos los datos de la aplicación se eliminarán.";
/* No comment provided by engineer. */
"All chats and messages will be deleted - this cannot be undone!" = "Se eliminarán todos los chats y mensajes. ¡No se puede deshacer!";
"All chats and messages will be deleted - this cannot be undone!" = "Se eliminarán todos los chats y mensajes. ¡No podrá deshacerse!";
/* No comment provided by engineer. */
"All data is erased when it is entered." = "Al introducirlo todos los datos son eliminados.";
@@ -324,7 +324,7 @@
"All group members will remain connected." = "Todos los miembros del grupo permanecerán conectados.";
/* No comment provided by engineer. */
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Se eliminarán todos los mensajes SOLO para tí. ¡No se puede deshacer!";
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Se eliminarán todos los mensajes SOLO para tí. ¡No podrá deshacerse!";
/* No comment provided by engineer. */
"All your contacts will remain connected." = "Todos tus contactos permanecerán conectados.";
@@ -745,7 +745,7 @@
"Contact already exists" = "El contácto ya existe";
/* No comment provided by engineer. */
"Contact and all messages will be deleted - this cannot be undone!" = "El contacto y todos los mensajes serán eliminados. ¡No se puede deshacer!";
"Contact and all messages will be deleted - this cannot be undone!" = "El contacto y todos los mensajes serán eliminados. ¡No podrá deshacerse!";
/* No comment provided by engineer. */
"contact has e2e encryption" = "el contacto dispone de cifrado de extremo a extremo";
@@ -784,7 +784,7 @@
"Create" = "Crear";
/* No comment provided by engineer. */
"Create an address to let people connect with you." = "Crear una dirección para que la gente se pueda conectar contigo.";
"Create an address to let people connect with you." = "Crear una dirección para que otras personas se puedan conectar contigo.";
/* server test step */
"Create file" = "Crear archivo";
@@ -1483,10 +1483,10 @@
"Group welcome message" = "Mensaje de bienvenida en grupos";
/* No comment provided by engineer. */
"Group will be deleted for all members - this cannot be undone!" = "El grupo se eliminará para todos los miembros. ¡No se puede deshacer!";
"Group will be deleted for all members - this cannot be undone!" = "El grupo se eliminará para todos los miembros. ¡No podrá deshacerse!";
/* No comment provided by engineer. */
"Group will be deleted for you - this cannot be undone!" = "El grupo se eliminará para tí. ¡No se puede deshacer!";
"Group will be deleted for you - this cannot be undone!" = "El grupo se eliminará para tí. ¡No podrá deshacerse!";
/* No comment provided by engineer. */
"Help" = "Ayuda";
@@ -1732,7 +1732,7 @@
"Join incognito" = "Únete en modo incógnito";
/* No comment provided by engineer. */
"Joining group" = "Únete al grupo";
"Joining group" = "Entrando al grupo";
/* No comment provided by engineer. */
"Keychain error" = "Error en Keychain";
@@ -1837,7 +1837,7 @@
"Member role will be changed to \"%@\". The member will receive a new invitation." = "El rol del miembro cambiará a \"%@\". El miembro recibirá una invitación nueva.";
/* No comment provided by engineer. */
"Member will be removed from group - this cannot be undone!" = "El miembro será expulsado del grupo. ¡No se puede deshacer!";
"Member will be removed from group - this cannot be undone!" = "El miembro será expulsado del grupo. ¡No podrá deshacerse!";
/* No comment provided by engineer. */
"Message delivery error" = "Error en la entrega del mensaje";
@@ -1957,7 +1957,7 @@
"new message" = "mensaje nuevo";
/* notification */
"New message" = "mensaje nuevo";
"New message" = "Mensaje nuevo";
/* No comment provided by engineer. */
"New Passcode" = "Código Nuevo";
@@ -2156,7 +2156,7 @@
"Periodically" = "Periódico";
/* message decrypt error item */
"Permanent decryption error" = "Error de descifrado";
"Permanent decryption error" = "Error de descifrado permanente";
/* No comment provided by engineer. */
"PING count" = "Contador PING";
@@ -2186,7 +2186,7 @@
"Please enter the previous password after restoring database backup. This action can not be undone." = "Introduce la contraseña anterior después de restaurar la copia de seguridad de la base de datos. Esta acción no se puede deshacer.";
/* No comment provided by engineer. */
"Please remember or store it securely - there is no way to recover a lost passcode!" = "Por favor, recuerda y guarda el código de acceso en un lugar seguro. ¡No hay ninguna manera de recuperar un código perdido!";
"Please remember or store it securely - there is no way to recover a lost passcode!" = "Por favor, recuerda y guarda el código de acceso en un lugar seguro. ¡No hay forma de recuperar un código perdido!";
/* No comment provided by engineer. */
"Please report it to the developers." = "Por favor, informa a los desarrolladores.";
@@ -2698,6 +2698,9 @@
/* No comment provided by engineer. */
"SMP servers" = "Servidores SMP";
/* No comment provided by engineer. */
"Some non-fatal errors occurred during import - you may see Chat console for more details." = "Algunos errores no críticos ocurrieron durante la importación - para más detalles puedes ver la consola de Chat.";
/* notification title */
"Somebody" = "Alguien";
@@ -2881,9 +2884,6 @@
/* No comment provided by engineer. */
"This error is permanent for this connection, please re-connect." = "El error es permanente para esta conexión, por favor vuelve a conectarte.";
/* No comment provided by engineer. */
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." = "¡Experimental! Sólo funcionará si el otro cliente tiene instalada la versión 4.2. Deberías ver el mensaje en la conversación una vez completado el cambio de dirección. Comprueba que puedes seguir recibiendo mensajes de este contacto (o miembro del grupo).";
/* No comment provided by engineer. */
"This group no longer exists." = "Este grupo ya no existe.";
@@ -3203,7 +3203,7 @@
"You can create it later" = "Puedes crearlo más tarde";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Puedes ocultar o silenciar un perfil de usuario: deslízalo hacia la derecha.\nBloqueo SimpleX debe estar activado.";
"You can hide or mute a user profile - swipe it to the right." = "Puedes ocultar o silenciar un perfil de usuario: deslízalo hacia la derecha.";
/* notification body */
"You can now send messages to %@" = "Ya puedes enviar mensajes a %@";
@@ -3263,7 +3263,7 @@
"You joined this group" = "Te has unido a este grupo";
/* No comment provided by engineer. */
"You joined this group. Connecting to inviting group member." = "Te has unido a este grupo. Conectando con el miembro que emite la invitacíon.";
"You joined this group. Connecting to inviting group member." = "Te has unido a este grupo. Conectando con el emisor de la invitacíon.";
/* snd group event chat item */
"you left" = "has salido";
@@ -3326,7 +3326,7 @@
"Your %@ servers" = "Mis servidores %@";
/* No comment provided by engineer. */
"Your calls" = "Mis llamadas";
"Your calls" = "Llamadas";
/* No comment provided by engineer. */
"Your chat database" = "Base de datos Chat";
@@ -3343,9 +3343,6 @@
/* No comment provided by engineer. */
"Your chat profiles" = "Mis perfiles";
/* No comment provided by engineer. */
"Your chats" = "Mis chats";
/* No comment provided by engineer. */
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Tu contacto debe estar en línea para que se complete la conexión.\nPuedes cancelar esta conexión y eliminar el contacto (e intentarlo más tarde con un enlace nuevo).";
@@ -3368,7 +3365,7 @@
"Your current profile" = "Tu perfil actual";
/* No comment provided by engineer. */
"Your ICE servers" = "Mis servidores ICE";
"Your ICE servers" = "Servidores ICE";
/* No comment provided by engineer. */
"Your preferences" = "Mis preferencias";
@@ -3401,8 +3398,8 @@
"Your SimpleX address" = "Mi dirección SimpleX";
/* No comment provided by engineer. */
"Your SMP servers" = "Mis servidores SMP";
"Your SMP servers" = "Servidores SMP";
/* No comment provided by engineer. */
"Your XFTP servers" = "Mis servidores XFTP";
"Your XFTP servers" = "Servidores XFTP";
+4 -7
View File
@@ -2698,6 +2698,9 @@
/* No comment provided by engineer. */
"SMP servers" = "Serveurs SMP";
/* No comment provided by engineer. */
"Some non-fatal errors occurred during import - you may see Chat console for more details." = "Des erreurs non fatales se sont produites lors de l'importation - vous pouvez consulter la console de chat pour plus de détails.";
/* notification title */
"Somebody" = "Quelqu'un";
@@ -2881,9 +2884,6 @@
/* No comment provided by engineer. */
"This error is permanent for this connection, please re-connect." = "Cette erreur est persistante pour cette connexion, veuillez vous reconnecter.";
/* No comment provided by engineer. */
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." = "Cette fonctionnalité est expérimentale ! Elle ne fonctionnera que si l'autre client a la version 4.2 installée. Vous devriez voir le message dans la conversation une fois le changement d'adresse effectué. Vérifiez que vous pouvez toujours recevoir des messages de ce contact (ou membre du groupe).";
/* No comment provided by engineer. */
"This group no longer exists." = "Ce groupe n'existe plus.";
@@ -3203,7 +3203,7 @@
"You can create it later" = "Vous pouvez la créer plus tard";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Vous pouvez masquer ou mettre en sourdine un profil d'utilisateur - faites-le glisser vers la droite.\nSimpleX Lock doit être activé.";
"You can hide or mute a user profile - swipe it to the right." = "Vous pouvez masquer ou mettre en sourdine un profil d'utilisateur - faites-le glisser vers la droite.";
/* notification body */
"You can now send messages to %@" = "Vous pouvez maintenant envoyer des messages à %@";
@@ -3343,9 +3343,6 @@
/* No comment provided by engineer. */
"Your chat profiles" = "Vos profils de chat";
/* No comment provided by engineer. */
"Your chats" = "Vos chats";
/* No comment provided by engineer. */
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Votre contact a besoin d'être en ligne pour completer la connexion.\nVous pouvez annuler la connexion et supprimer le contact (et réessayer plus tard avec un autre lien).";
+19 -19
View File
@@ -104,7 +104,7 @@
"%@ %@" = "%@ %@";
/* notification title */
"%@ is connected!" = "%@ è connesso!";
"%@ is connected!" = "%@ è connesso/a!";
/* No comment provided by engineer. */
"%@ is not verified" = "%@ non è verificato/a";
@@ -384,7 +384,7 @@
"Allow your contacts to send voice messages." = "Permetti ai tuoi contatti di inviare messaggi vocali.";
/* No comment provided by engineer. */
"Already connected?" = "Già connesso?";
"Already connected?" = "Già connesso/a?";
/* pref value */
"always" = "sempre";
@@ -685,7 +685,7 @@
"Connect via one-time link?" = "Connettere via link una tantum?";
/* No comment provided by engineer. */
"connected" = "connesso";
"connected" = "connesso/a";
/* No comment provided by engineer. */
"connecting" = "in connessione";
@@ -727,7 +727,7 @@
"connection established" = "connessione stabilita";
/* No comment provided by engineer. */
"Connection request" = "Richieste di connessione";
"Connection request" = "Richiesta di connessione";
/* No comment provided by engineer. */
"Connection request sent!" = "Richiesta di connessione inviata!";
@@ -1672,10 +1672,10 @@
"Invite to group" = "Invita al gruppo";
/* No comment provided by engineer. */
"invited" = "invitato";
"invited" = "ha invitato";
/* rcv group event chat item */
"invited %@" = "invitato %@";
"invited %@" = "ha invitato %@";
/* chat list item title */
"invited to connect" = "invitato a connettersi";
@@ -1756,7 +1756,7 @@
"Leave group?" = "Uscire dal gruppo?";
/* rcv group event chat item */
"left" = "uscito/a";
"left" = "è uscito/a";
/* email subject */
"Let's talk in SimpleX Chat" = "Parliamo in SimpleX Chat";
@@ -1828,7 +1828,7 @@
"Member" = "Membro";
/* rcv group event chat item */
"member connected" = "connesso";
"member connected" = "connesso/a";
/* No comment provided by engineer. */
"Member role will be changed to \"%@\". All group members will be notified." = "Il ruolo del membro verrà cambiato in \"%@\". Tutti i membri del gruppo verranno avvisati.";
@@ -1995,6 +1995,9 @@
/* No comment provided by engineer. */
"No received or sent files" = "Nessun file ricevuto o inviato";
/* copied message info in history */
"no text" = "nessun testo";
/* No comment provided by engineer. */
"Notifications" = "Notifiche";
@@ -2360,10 +2363,10 @@
"Remove passphrase from keychain?" = "Rimuovere la password dal portachiavi?";
/* No comment provided by engineer. */
"removed" = "rimosso";
"removed" = "ha rimosso";
/* rcv group event chat item */
"removed %@" = "rimosso %@";
"removed %@" = "ha rimosso %@";
/* rcv group event chat item */
"removed you" = "sei stato/a rimosso/a";
@@ -2695,6 +2698,9 @@
/* No comment provided by engineer. */
"SMP servers" = "Server SMP";
/* No comment provided by engineer. */
"Some non-fatal errors occurred during import - you may see Chat console for more details." = "Si sono verificati alcuni errori non gravi durante l'importazione: vedi la console della chat per i dettagli.";
/* notification title */
"Somebody" = "Qualcuno";
@@ -2878,9 +2884,6 @@
/* No comment provided by engineer. */
"This error is permanent for this connection, please re-connect." = "L'errore è permanente per questa connessione, riconnettiti.";
/* No comment provided by engineer. */
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." = "Questa funzionalità è sperimentale! Funzionerà solo se l'altro client ha la versione 4.2 installata. Dovresti vedere il messaggio nella conversazione una volta completato il cambio di indirizzo. Controlla di potere ancora ricevere messaggi da questo contatto (o membro del gruppo).";
/* No comment provided by engineer. */
"This group no longer exists." = "Questo gruppo non esiste più.";
@@ -2984,7 +2987,7 @@
"Unlock app" = "Sblocca l'app";
/* No comment provided by engineer. */
"Unmute" = "Riattiva audio";
"Unmute" = "Riattiva notifiche";
/* No comment provided by engineer. */
"Unread" = "Non letto";
@@ -3179,7 +3182,7 @@
"You are already connected to %@." = "Sei già connesso/a a %@.";
/* No comment provided by engineer. */
"You are connected to the server used to receive messages from this contact." = "Sei connesso al server usato per ricevere messaggi da questo contatto.";
"You are connected to the server used to receive messages from this contact." = "Sei connesso/a al server usato per ricevere messaggi da questo contatto.";
/* No comment provided by engineer. */
"you are invited to group" = "sei stato/a invitato/a al gruppo";
@@ -3200,7 +3203,7 @@
"You can create it later" = "Puoi crearlo più tardi";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Puoi nascondere o silenziare un profilo utente - scorrilo verso destra.\nSimpleX Lock deve essere attivato.";
"You can hide or mute a user profile - swipe it to the right." = "Puoi nascondere o silenziare un profilo utente - scorrilo verso destra.";
/* notification body */
"You can now send messages to %@" = "Ora puoi inviare messaggi a %@";
@@ -3340,9 +3343,6 @@
/* No comment provided by engineer. */
"Your chat profiles" = "I tuoi profili di chat";
/* No comment provided by engineer. */
"Your chats" = "Le tue chat";
/* No comment provided by engineer. */
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Il tuo contatto deve essere in linea per completare la connessione.\nPuoi annullare questa connessione e rimuovere il contatto (e riprovare più tardi con un link nuovo).";
+1 -7
View File
@@ -2872,9 +2872,6 @@
/* No comment provided by engineer. */
"This error is permanent for this connection, please re-connect." = "このエラーはこの接続では永続的なものです。再接続してください。";
/* No comment provided by engineer. */
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." = "開発中の機能です!相手のクライアントが4.2でなければ機能しません。アドレス変更が完了すると、会話にメッセージが出ます。連絡相手 (またはグループのメンバー) からメッセージを受信できないかをご確認ください。";
/* No comment provided by engineer. */
"This group no longer exists." = "このグループはもう存在しません。";
@@ -3194,7 +3191,7 @@
"You can create it later" = "後からでも作成できます";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "ユーザープロファイルを右にスワイプすると、非表示またはミュートにすることができます。\nSimpleXロックが有効になっている必要があります。";
"You can hide or mute a user profile - swipe it to the right." = "ユーザープロファイルを右にスワイプすると、非表示またはミュートにすることができます。";
/* notification body */
"You can now send messages to %@" = "%@ にメッセージを送信できるようになりました";
@@ -3334,9 +3331,6 @@
/* No comment provided by engineer. */
"Your chat profiles" = "あなたのチャットプロフィール";
/* No comment provided by engineer. */
"Your chats" = "あなたのチャット";
/* No comment provided by engineer. */
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "接続を完了するには、連絡相手がオンラインになる必要があります。\nこの接続をキャンセルして、連絡先を削除をすることもできます (後でやり直すこともできます)。";
+4 -7
View File
@@ -2698,6 +2698,9 @@
/* No comment provided by engineer. */
"SMP servers" = "SMP servers";
/* No comment provided by engineer. */
"Some non-fatal errors occurred during import - you may see Chat console for more details." = "Er zijn enkele niet-fatale fouten opgetreden tijdens het importeren - u kunt de Chat console raadplegen voor meer details.";
/* notification title */
"Somebody" = "Iemand";
@@ -2881,9 +2884,6 @@
/* No comment provided by engineer. */
"This error is permanent for this connection, please re-connect." = "Deze fout is permanent voor deze verbinding, maak opnieuw verbinding.";
/* No comment provided by engineer. */
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." = "Deze functie is experimenteel! Het werkt alleen als op de andere client versie 4.2 is geïnstalleerd. U zou het bericht in het gesprek moeten zien zodra de adreswijziging is voltooid. Controleer of u nog steeds berichten van dit contact (of groepslid) kunt ontvangen.";
/* No comment provided by engineer. */
"This group no longer exists." = "Deze groep bestaat niet meer.";
@@ -3203,7 +3203,7 @@
"You can create it later" = "U kan het later maken";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "U kunt een gebruikers profiel verbergen of dempen - veeg het naar rechts.\nSimpleX Lock moet ingeschakeld zijn.";
"You can hide or mute a user profile - swipe it to the right." = "U kunt een gebruikers profiel verbergen of dempen - veeg het naar rechts.";
/* notification body */
"You can now send messages to %@" = "Je kunt nu berichten sturen naar %@";
@@ -3343,9 +3343,6 @@
/* No comment provided by engineer. */
"Your chat profiles" = "Uw chat profielen";
/* No comment provided by engineer. */
"Your chats" = "Jouw gesprekken";
/* No comment provided by engineer. */
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Uw contactpersoon moet online zijn om de verbinding te voltooien.\nU kunt deze verbinding verbreken en het contact verwijderen (en later proberen met een nieuwe link).";
+1 -7
View File
@@ -2881,9 +2881,6 @@
/* No comment provided by engineer. */
"This error is permanent for this connection, please re-connect." = "Ten błąd jest trwały dla tego połączenia, proszę o ponowne połączenie.";
/* No comment provided by engineer. */
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." = "Ta funkcja jest eksperymentalna! Będzie działać tylko wtedy, gdy drugi klient ma zainstalowaną wersję 4.2. Po zakończeniu zmiany adresu powinieneś zobaczyć wiadomość w konwersacji - sprawdź, czy nadal możesz otrzymywać wiadomości od tego kontaktu (lub członka grupy).";
/* No comment provided by engineer. */
"This group no longer exists." = "Ta grupa już nie istnieje.";
@@ -3203,7 +3200,7 @@
"You can create it later" = "Możesz go utworzyć później";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Możesz ukryć lub wyciszyć profil użytkownika - przesuń palcem w prawo.\nFunkcja blokady SimpleX musi być włączona.";
"You can hide or mute a user profile - swipe it to the right." = "Możesz ukryć lub wyciszyć profil użytkownika - przesuń palcem w prawo.";
/* notification body */
"You can now send messages to %@" = "Możesz teraz wysyłać wiadomości do %@";
@@ -3343,9 +3340,6 @@
/* No comment provided by engineer. */
"Your chat profiles" = "Twoje profile czatu";
/* No comment provided by engineer. */
"Your chats" = "Twoje czaty";
/* No comment provided by engineer. */
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Twój kontakt musi być online, aby połączenie zostało zakończone.\nMożesz anulować to połączenie i usunąć kontakt (i spróbować później z nowym linkiem).";
+1 -7
View File
@@ -2878,9 +2878,6 @@
/* No comment provided by engineer. */
"This error is permanent for this connection, please re-connect." = "Эта ошибка постоянная для этого соединения, пожалуйста, соединитесь снова.";
/* No comment provided by engineer. */
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." = "Это экспериментальная функция! Она будет работать, только если на другом клиенте установлена версия 4.2. После завершения смены адреса Вы увидите сообщение — убедитесь, что Вы все еще можете получать сообщения от этого контакта (или члена группы).";
/* No comment provided by engineer. */
"This group no longer exists." = "Эта группа больше не существует.";
@@ -3200,7 +3197,7 @@
"You can create it later" = "Вы можете создать его позже";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Вы можете скрыть профиль или выключить уведомления - потяните его вправо.\nБлокировка SimpleX должна быть включена.";
"You can hide or mute a user profile - swipe it to the right." = "Вы можете скрыть профиль или выключить уведомления - потяните его вправо.";
/* notification body */
"You can now send messages to %@" = "Вы теперь можете отправлять сообщения %@";
@@ -3340,9 +3337,6 @@
/* No comment provided by engineer. */
"Your chat profiles" = "Ваши профили чата";
/* No comment provided by engineer. */
"Your chats" = "Ваши чаты";
/* No comment provided by engineer. */
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Ваш контакт должен быть в сети чтобы установить соединение.\nВы можете отменить соединение и удалить контакт (и попробовать позже с другой ссылкой).";
+4 -7
View File
@@ -2698,6 +2698,9 @@
/* No comment provided by engineer. */
"SMP servers" = "SMP 服务器";
/* No comment provided by engineer. */
"Some non-fatal errors occurred during import - you may see Chat console for more details." = "导入过程中发生了一些非致命错误——您可以查看聊天控制台了解更多详细信息。";
/* notification title */
"Somebody" = "某人";
@@ -2881,9 +2884,6 @@
/* No comment provided by engineer. */
"This error is permanent for this connection, please re-connect." = "此错误对于此连接是永久性的,请重新连接。";
/* No comment provided by engineer. */
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed please check that you can still receive messages from this contact (or group member)." = "此功能是实验性的! 它仅在其他客户端安装了 4.2 版时才有效。 地址更改完成后,您应该会在对话中看到该消息——请检查您是否仍能收到来自该联系人(或群组成员)的消息。";
/* No comment provided by engineer. */
"This group no longer exists." = "该群组已不存在。";
@@ -3203,7 +3203,7 @@
"You can create it later" = "您可以以后创建它";
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "您可以隐藏或静音用户个人资料——只需向右滑动。\n必须启用 SimpleX Lock。";
"You can hide or mute a user profile - swipe it to the right." = "您可以隐藏或静音用户个人资料——只需向右滑动。";
/* notification body */
"You can now send messages to %@" = "您现在可以给 %@ 发送消息";
@@ -3343,9 +3343,6 @@
/* No comment provided by engineer. */
"Your chat profiles" = "您的聊天资料";
/* No comment provided by engineer. */
"Your chats" = "您的聊天";
/* No comment provided by engineer. */
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "您的联系人需要在线才能完成连接。\n您可以取消此连接并删除联系人(然后尝试使用新链接)。";
+20
View File
@@ -0,0 +1,20 @@
*.iml
.gradle
/local.properties
/.idea
!/.idea/codeStyles/*
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
common/src/commonMain/cpp/android/libs/
common/src/commonMain/cpp/desktop/libs/
common/src/commonMain/resources/libs/
android/src/main/cpp/libs/
android/build
android/release
common/build
desktop/build
release
@@ -5,16 +5,16 @@ plugins {
}
android {
compileSdk 32
compileSdk 33
defaultConfig {
applicationId "chat.simplex.app"
minSdk 26
targetSdk 32
targetSdk 33
// !!!
// skip version code after release to F-Droid, as it uses two version codes
versionCode 127
versionName "5.1.3"
versionCode 129
versionName "5.2-beta.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
@@ -170,6 +170,7 @@ dependencies {
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
implementation "com.jakewharton:process-phoenix:2.1.2"
}
// Don't do anything if no compression is needed
@@ -231,9 +232,9 @@ tasks.register("compressApk") {
}
if (project.properties['android.injected.signing.key.alias'] != null && buildType == 'release') {
new File(outputDir, "app-release.apk").renameTo(new File(outputDir, "simplex.apk"))
new File(outputDir, "app-armeabi-v7a-release.apk").renameTo(new File(outputDir, "simplex-armv7a.apk"))
new File(outputDir, "app-arm64-v8a-release.apk").renameTo(new File(outputDir, "simplex.apk"))
new File(outputDir, "android-release.apk").renameTo(new File(outputDir, "simplex.apk"))
new File(outputDir, "android-armeabi-v7a-release.apk").renameTo(new File(outputDir, "simplex-armv7a.apk"))
new File(outputDir, "android-arm64-v8a-release.apk").renameTo(new File(outputDir, "simplex.apk"))
}
// View all gradle properties set
@@ -6,6 +6,7 @@
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.VIDEO_CAPTURE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

@@ -10,6 +10,7 @@ import chat.simplex.app.ui.theme.DefaultTheme
import chat.simplex.app.views.helpers.*
import chat.simplex.app.views.onboarding.OnboardingStage
import chat.simplex.app.views.usersettings.NotificationsMode
import com.jakewharton.processphoenix.ProcessPhoenix
import kotlinx.coroutines.*
import kotlinx.serialization.decodeFromString
import java.io.*
@@ -101,6 +102,9 @@ class SimplexApp: Application(), LifecycleEventObserver {
override fun onCreate() {
super.onCreate()
if (ProcessPhoenix.isPhoenixProcess(this)) {
return;
}
context = this
context.getDir("temp", MODE_PRIVATE).deleteRecursively()
withBGApi {
@@ -166,7 +166,6 @@ class SimplexService: Service() {
it.setPackage(packageName)
};
val restartServicePendingIntent: PendingIntent = PendingIntent.getService(this, 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE);
applicationContext.getSystemService(Context.ALARM_SERVICE);
val alarmService: AlarmManager = applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager;
alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, restartServicePendingIntent);
}
@@ -695,6 +695,13 @@ sealed class ChatInfo: SomeChat, NamedChat {
private val invalidChatName = generalGetString(R.string.invalid_chat)
}
}
val chatSettings
get() = when(this) {
is Direct -> contact.chatSettings
is Group -> groupInfo.chatSettings
else -> null
}
}
@Serializable
@@ -783,7 +790,7 @@ data class Contact(
profile = LocalProfile.sampleData,
activeConn = Connection.sampleData,
contactUsed = true,
chatSettings = ChatSettings(true),
chatSettings = ChatSettings(true, false),
userPreferences = ChatPreferences.sampleData,
mergedPreferences = ContactUserPreferences.sampleData,
createdAt = Clock.System.now(),
@@ -931,7 +938,7 @@ data class GroupInfo (
fullGroupPreferences = FullGroupPreferences.sampleData,
membership = GroupMember.sampleData,
hostConnCustomUserProfileId = null,
chatSettings = ChatSettings(true),
chatSettings = ChatSettings(true, false),
createdAt = Clock.System.now(),
updatedAt = Clock.System.now()
)
@@ -2352,6 +2359,7 @@ sealed class SndConnEvent {
enum class SwitchPhase {
@SerialName("started") Started,
@SerialName("confirmed") Confirmed,
@SerialName("secured") Secured,
@SerialName("completed") Completed
}
@@ -106,6 +106,7 @@ class AppPreferences(val context: Context) {
)
val privacyFullBackup = mkBoolPreference(SHARED_PREFS_PRIVACY_FULL_BACKUP, false)
val experimentalCalls = mkBoolPreference(SHARED_PREFS_EXPERIMENTAL_CALLS, false)
val showUnreadAndFavorites = mkBoolPreference(SHARED_PREFS_SHOW_UNREAD_AND_FAVORITES, false)
val chatArchiveName = mkStrPreference(SHARED_PREFS_CHAT_ARCHIVE_NAME, null)
val chatArchiveTime = mkDatePreference(SHARED_PREFS_CHAT_ARCHIVE_TIME, null)
val chatLastStart = mkDatePreference(SHARED_PREFS_CHAT_LAST_START, null)
@@ -249,6 +250,7 @@ class AppPreferences(val context: Context) {
private const val SHARED_PREFS_PRIVACY_SIMPLEX_LINK_MODE = "PrivacySimplexLinkMode"
internal const val SHARED_PREFS_PRIVACY_FULL_BACKUP = "FullBackup"
private const val SHARED_PREFS_EXPERIMENTAL_CALLS = "ExperimentalCalls"
private const val SHARED_PREFS_SHOW_UNREAD_AND_FAVORITES = "ShowUnreadAndFavorites"
private const val SHARED_PREFS_CHAT_ARCHIVE_NAME = "ChatArchiveName"
private const val SHARED_PREFS_CHAT_ARCHIVE_TIME = "ChatArchiveTime"
private const val SHARED_PREFS_APP_LANGUAGE = "AppLanguage"
@@ -736,22 +738,32 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
return null
}
suspend fun apiSwitchContact(contactId: Long) {
return when (val r = sendCmd(CC.APISwitchContact(contactId))) {
is CR.CmdOk -> {}
else -> {
apiErrorAlert("apiSwitchContact", generalGetString(R.string.connection_error), r)
}
}
suspend fun apiSwitchContact(contactId: Long): ConnectionStats? {
val r = sendCmd(CC.APISwitchContact(contactId))
if (r is CR.ContactSwitchStarted) return r.connectionStats
apiErrorAlert("apiSwitchContact", generalGetString(R.string.error_changing_address), r)
return null
}
suspend fun apiSwitchGroupMember(groupId: Long, groupMemberId: Long) {
return when (val r = sendCmd(CC.APISwitchGroupMember(groupId, groupMemberId))) {
is CR.CmdOk -> {}
else -> {
apiErrorAlert("apiSwitchGroupMember", generalGetString(R.string.error_changing_address), r)
}
}
suspend fun apiSwitchGroupMember(groupId: Long, groupMemberId: Long): ConnectionStats? {
val r = sendCmd(CC.APISwitchGroupMember(groupId, groupMemberId))
if (r is CR.GroupMemberSwitchStarted) return r.connectionStats
apiErrorAlert("apiSwitchGroupMember", generalGetString(R.string.error_changing_address), r)
return null
}
suspend fun apiAbortSwitchContact(contactId: Long): ConnectionStats? {
val r = sendCmd(CC.APIAbortSwitchContact(contactId))
if (r is CR.ContactSwitchAborted) return r.connectionStats
apiErrorAlert("apiAbortSwitchContact", generalGetString(R.string.error_aborting_address_change), r)
return null
}
suspend fun apiAbortSwitchGroupMember(groupId: Long, groupMemberId: Long): ConnectionStats? {
val r = sendCmd(CC.APIAbortSwitchGroupMember(groupId, groupMemberId))
if (r is CR.GroupMemberSwitchAborted) return r.connectionStats
apiErrorAlert("apiAbortSwitchGroupMember", generalGetString(R.string.error_aborting_address_change), r)
return null
}
suspend fun apiGetContactCode(contactId: Long): Pair<Contact, String> {
@@ -1939,6 +1951,8 @@ sealed class CC {
class APIGroupMemberInfo(val groupId: Long, val groupMemberId: Long): CC()
class APISwitchContact(val contactId: Long): CC()
class APISwitchGroupMember(val groupId: Long, val groupMemberId: Long): CC()
class APIAbortSwitchContact(val contactId: Long): CC()
class APIAbortSwitchGroupMember(val groupId: Long, val groupMemberId: Long): CC()
class APIGetContactCode(val contactId: Long): CC()
class APIGetGroupMemberCode(val groupId: Long, val groupMemberId: Long): CC()
class APIVerifyContact(val contactId: Long, val connectionCode: String?): CC()
@@ -2032,6 +2046,8 @@ sealed class CC {
is APIGroupMemberInfo -> "/_info #$groupId $groupMemberId"
is APISwitchContact -> "/_switch @$contactId"
is APISwitchGroupMember -> "/_switch #$groupId $groupMemberId"
is APIAbortSwitchContact -> "/_abort switch @$contactId"
is APIAbortSwitchGroupMember -> "/_abort switch #$groupId $groupMemberId"
is APIGetContactCode -> "/_get code @$contactId"
is APIGetGroupMemberCode -> "/_get code #$groupId $groupMemberId"
is APIVerifyContact -> "/_verify code @$contactId" + if (connectionCode != null) " $connectionCode" else ""
@@ -2120,6 +2136,8 @@ sealed class CC {
is APIGroupMemberInfo -> "apiGroupMemberInfo"
is APISwitchContact -> "apiSwitchContact"
is APISwitchGroupMember -> "apiSwitchGroupMember"
is APIAbortSwitchContact -> "apiAbortSwitchContact"
is APIAbortSwitchGroupMember -> "apiAbortSwitchGroupMember"
is APIGetContactCode -> "apiGetContactCode"
is APIGetGroupMemberCode -> "apiGetGroupMemberCode"
is APIVerifyContact -> "apiVerifyContact"
@@ -2503,8 +2521,13 @@ data class KeepAliveOpts(
@Serializable
data class ChatSettings(
val enableNtfs: Boolean
)
val enableNtfs: Boolean,
val favorite: Boolean
) {
companion object {
val defaults: ChatSettings = ChatSettings(enableNtfs = true, favorite = false)
}
}
@Serializable
data class FullChatPreferences(
@@ -2914,7 +2937,8 @@ enum class GroupFeature: Feature {
@SerialName("directMessages") DirectMessages,
@SerialName("fullDelete") FullDelete,
@SerialName("reactions") Reactions,
@SerialName("voice") Voice;
@SerialName("voice") Voice,
@SerialName("files") Files;
override val hasParam: Boolean get() = when(this) {
TimedMessages -> true
@@ -2928,6 +2952,7 @@ enum class GroupFeature: Feature {
FullDelete -> generalGetString(R.string.full_deletion)
Reactions -> generalGetString(R.string.message_reactions)
Voice -> generalGetString(R.string.voice_messages)
Files -> generalGetString(R.string.files_and_media)
}
val icon: Painter
@@ -2937,6 +2962,7 @@ enum class GroupFeature: Feature {
FullDelete -> painterResource(R.drawable.ic_delete_forever)
Reactions -> painterResource(R.drawable.ic_add_reaction)
Voice -> painterResource(R.drawable.ic_keyboard_voice)
Files -> painterResource(R.drawable.ic_draft)
}
@Composable
@@ -2946,6 +2972,7 @@ enum class GroupFeature: Feature {
FullDelete -> painterResource(R.drawable.ic_delete_forever_filled)
Reactions -> painterResource(R.drawable.ic_add_reaction_filled)
Voice -> painterResource(R.drawable.ic_keyboard_voice_filled)
Files -> painterResource(R.drawable.ic_draft_filled)
}
fun enableDescription(enabled: GroupFeatureEnabled, canEdit: Boolean): String =
@@ -2971,6 +2998,10 @@ enum class GroupFeature: Feature {
GroupFeatureEnabled.ON -> generalGetString(R.string.allow_to_send_voice)
GroupFeatureEnabled.OFF -> generalGetString(R.string.prohibit_sending_voice)
}
Files -> when(enabled) {
GroupFeatureEnabled.ON -> generalGetString(R.string.allow_to_send_files)
GroupFeatureEnabled.OFF -> generalGetString(R.string.prohibit_sending_files)
}
}
} else {
when(this) {
@@ -2994,6 +3025,10 @@ enum class GroupFeature: Feature {
GroupFeatureEnabled.ON -> generalGetString(R.string.group_members_can_send_voice)
GroupFeatureEnabled.OFF -> generalGetString(R.string.voice_messages_are_prohibited)
}
Files -> when(enabled) {
GroupFeatureEnabled.ON -> generalGetString(R.string.group_members_can_send_files)
GroupFeatureEnabled.OFF -> generalGetString(R.string.files_are_prohibited_in_group)
}
}
}
}
@@ -3106,7 +3141,8 @@ data class FullGroupPreferences(
val directMessages: GroupPreference,
val fullDelete: GroupPreference,
val reactions: GroupPreference,
val voice: GroupPreference
val voice: GroupPreference,
val files: GroupPreference,
) {
fun toGroupPreferences(): GroupPreferences =
GroupPreferences(
@@ -3114,7 +3150,8 @@ data class FullGroupPreferences(
directMessages = directMessages,
fullDelete = fullDelete,
reactions = reactions,
voice = voice
voice = voice,
files = files,
)
companion object {
@@ -3123,7 +3160,8 @@ data class FullGroupPreferences(
directMessages = GroupPreference(GroupFeatureEnabled.OFF),
fullDelete = GroupPreference(GroupFeatureEnabled.OFF),
reactions = GroupPreference(GroupFeatureEnabled.ON),
voice = GroupPreference(GroupFeatureEnabled.ON)
voice = GroupPreference(GroupFeatureEnabled.ON),
files = GroupPreference(GroupFeatureEnabled.ON),
)
}
}
@@ -3134,7 +3172,8 @@ data class GroupPreferences(
val directMessages: GroupPreference?,
val fullDelete: GroupPreference?,
val reactions: GroupPreference?,
val voice: GroupPreference?
val voice: GroupPreference?,
val files: GroupPreference?,
) {
companion object {
val sampleData = GroupPreferences(
@@ -3142,7 +3181,8 @@ data class GroupPreferences(
directMessages = GroupPreference(GroupFeatureEnabled.OFF),
fullDelete = GroupPreference(GroupFeatureEnabled.OFF),
reactions = GroupPreference(GroupFeatureEnabled.ON),
voice = GroupPreference(GroupFeatureEnabled.ON)
voice = GroupPreference(GroupFeatureEnabled.ON),
files = GroupPreference(GroupFeatureEnabled.ON),
)
}
}
@@ -3277,7 +3317,11 @@ sealed class CR {
@Serializable @SerialName("chatItemTTL") class ChatItemTTL(val user: User, val chatItemTTL: Long? = null): CR()
@Serializable @SerialName("networkConfig") class NetworkConfig(val networkConfig: NetCfg): CR()
@Serializable @SerialName("contactInfo") class ContactInfo(val user: User, val contact: Contact, val connectionStats: ConnectionStats, val customUserProfile: Profile? = null): CR()
@Serializable @SerialName("groupMemberInfo") class GroupMemberInfo(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats_: ConnectionStats?): CR()
@Serializable @SerialName("groupMemberInfo") class GroupMemberInfo(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats_: ConnectionStats? = null): CR()
@Serializable @SerialName("contactSwitchStarted") class ContactSwitchStarted(val user: User, val contact: Contact, val connectionStats: ConnectionStats): CR()
@Serializable @SerialName("groupMemberSwitchStarted") class GroupMemberSwitchStarted(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats: ConnectionStats): CR()
@Serializable @SerialName("contactSwitchAborted") class ContactSwitchAborted(val user: User, val contact: Contact, val connectionStats: ConnectionStats): CR()
@Serializable @SerialName("groupMemberSwitchAborted") class GroupMemberSwitchAborted(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats: ConnectionStats): CR()
@Serializable @SerialName("contactCode") class ContactCode(val user: User, val contact: Contact, val connectionCode: String): CR()
@Serializable @SerialName("groupMemberCode") class GroupMemberCode(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionCode: String): CR()
@Serializable @SerialName("connectionVerified") class ConnectionVerified(val user: User, val verified: Boolean, val expectedCode: String): CR()
@@ -3392,6 +3436,10 @@ sealed class CR {
is NetworkConfig -> "networkConfig"
is ContactInfo -> "contactInfo"
is GroupMemberInfo -> "groupMemberInfo"
is ContactSwitchStarted -> "contactSwitchStarted"
is GroupMemberSwitchStarted -> "groupMemberSwitchStarted"
is ContactSwitchAborted -> "contactSwitchAborted"
is GroupMemberSwitchAborted -> "groupMemberSwitchAborted"
is ContactCode -> "contactCode"
is GroupMemberCode -> "groupMemberCode"
is ConnectionVerified -> "connectionVerified"
@@ -3503,6 +3551,10 @@ sealed class CR {
is NetworkConfig -> json.encodeToString(networkConfig)
is ContactInfo -> withUser(user, "contact: ${json.encodeToString(contact)}\nconnectionStats: ${json.encodeToString(connectionStats)}")
is GroupMemberInfo -> withUser(user, "group: ${json.encodeToString(groupInfo)}\nmember: ${json.encodeToString(member)}\nconnectionStats: ${json.encodeToString(connectionStats_)}")
is ContactSwitchStarted -> withUser(user, "contact: ${json.encodeToString(contact)}\nconnectionStats: ${json.encodeToString(connectionStats)}")
is GroupMemberSwitchStarted -> withUser(user, "group: ${json.encodeToString(groupInfo)}\nmember: ${json.encodeToString(member)}\nconnectionStats: ${json.encodeToString(connectionStats)}")
is ContactSwitchAborted -> withUser(user, "contact: ${json.encodeToString(contact)}\nconnectionStats: ${json.encodeToString(connectionStats)}")
is GroupMemberSwitchAborted -> withUser(user, "group: ${json.encodeToString(groupInfo)}\nmember: ${json.encodeToString(member)}\nconnectionStats: ${json.encodeToString(connectionStats)}")
is ContactCode -> withUser(user, "contact: ${json.encodeToString(contact)}\nconnectionCode: $connectionCode")
is GroupMemberCode -> withUser(user, "groupInfo: ${json.encodeToString(groupInfo)}\nmember: ${json.encodeToString(member)}\nconnectionCode: $connectionCode")
is ConnectionVerified -> withUser(user, "verified: $verified\nconnectionCode: $expectedCode")
@@ -3634,7 +3686,34 @@ abstract class TerminalItem {
}
@Serializable
class ConnectionStats(val rcvServers: List<String>?, val sndServers: List<String>?)
class ConnectionStats(val rcvQueuesInfo: List<RcvQueueInfo>, val sndQueuesInfo: List<SndQueueInfo>)
@Serializable
class RcvQueueInfo(
val rcvServer: String,
val rcvSwitchStatus: RcvSwitchStatus?,
var canAbortSwitch: Boolean
)
@Serializable
enum class RcvSwitchStatus {
@SerialName("switch_started") SwitchStarted,
@SerialName("sending_qadd") SendingQADD,
@SerialName("sending_quse") SendingQUSE,
@SerialName("received_message") ReceivedMessage
}
@Serializable
class SndQueueInfo(
val sndServer: String,
val sndSwitchStatus: SndSwitchStatus?
)
@Serializable
enum class SndSwitchStatus {
@SerialName("sending_qkey") SendingQKEY,
@SerialName("sending_qtest") SendingQTEST
}
@Serializable
class UserContactLinkRec(val connReqContact: String, val autoAccept: AutoAccept? = null) {

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