Compare commits

...

139 Commits

Author SHA1 Message Date
Evgeny Poberezkin 8308651f44 android: 4.6-beta.0 (104) - for f-droid, the build is in armv7a branch 2023-03-22 22:40:35 +00:00
Evgeny Poberezkin ad881bd46a ios: 4.6 (131) 2023-03-22 22:10:31 +00:00
Evgeny Poberezkin c037eb2d24 Revert "mobile: hide observer role from UI (to be reverted after v4.5.4 is released)"
This reverts commit 37d0bc2f14.
2023-03-22 21:38:12 +00:00
Evgeny Poberezkin 8b4353deba ios: 4.6 (130) 2023-03-22 21:35:57 +00:00
Evgeny Poberezkin a2be0d35fb readme: Spanish translation 2023-03-22 20:50:50 +00:00
Evgeny Poberezkin 1909bdc702 android: update string 2023-03-22 20:14:52 +00:00
Evgeny Poberezkin 63909defaf website: translations (#2061)
* Translated using Weblate (Arabic)

Currently translated at 96.2% (203 of 211 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 96.2% (203 of 211 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 97.1% (205 of 211 strings)

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

* Added translation using Weblate (Ukrainian)

* Added translation using Weblate (Chinese (Simplified))

* Translated using Weblate (Dutch)

Currently translated at 100.0% (211 of 211 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (211 of 211 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 11.8% (25 of 211 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% (211 of 211 strings)

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

* Deleted translation using Weblate (Norwegian Bokmål)

* Translated using Weblate (German)

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

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

* Translated using Weblate (Spanish)

Currently translated at 13.7% (29 of 211 strings)

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

---------

Co-authored-by: jonnysemon <johndevand@tutanota.com>
Co-authored-by: John m <jvanmanen@gmail.com>
Co-authored-by: random r <epsilin@yopmail.com>
Co-authored-by: 4 Bi 5aYzVk 93FCVjWLWxh44XH3984teVSfjwFYmUGUrbvnHwGirk9 <userfifteen.seventeen@mailfence.com>
Co-authored-by: Float <float.hu+@gmail.com>
Co-authored-by: mlanp <github@lang.xyz>
2023-03-22 19:42:54 +00:00
Evgeny Poberezkin 8544984b17 core: 4.6.0.0 2023-03-22 19:37:02 +00:00
Stanislav Dmitrenko 563984c0df android: strings for user privacy settings (#2060) 2023-03-22 19:34:43 +00:00
Evgeny Poberezkin 6500ee5fc9 mobile app translations (#2029)
* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (907 of 907 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 1.2% (11 of 907 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 1.2% (11 of 907 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 71.7% (692 of 965 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 99.6% (904 of 907 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (907 of 907 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (907 of 907 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 1.2% (11 of 907 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 1.2% (11 of 907 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 71.7% (692 of 965 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 99.6% (904 of 907 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (907 of 907 strings)

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

* Added translation using Weblate (Ukrainian)

* Added translation using Weblate (Ukrainian)

* Added translation using Weblate (Lithuanian)

* Added translation using Weblate (Lithuanian)

* Translated using Weblate (Spanish)

Currently translated at 84.8% (819 of 965 strings)

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

* Translated using Weblate (Lithuanian)

Currently translated at 0.8% (8 of 965 strings)

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

* Translated using Weblate (Lithuanian)

Currently translated at 0.9% (9 of 907 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (907 of 907 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 96.8% (935 of 965 strings)

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

* Translated using Weblate (Italian)

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

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (907 of 907 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% (965 of 965 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% (965 of 965 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 41.7% (379 of 907 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (907 of 907 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (967 of 967 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 44.9% (408 of 907 strings)

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

* Deleted translation using Weblate (Norwegian Bokmål)

* Deleted translation using Weblate (Polish)

* Deleted translation using Weblate (Norwegian Bokmål)

* Deleted translation using Weblate (Polish)

* Deleted translation using Weblate (Bulgarian)

* Deleted translation using Weblate (Bulgarian)

* Translated using Weblate (German)

Currently translated at 99.2% (900 of 907 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% (967 of 967 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 100.0% (967 of 967 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (967 of 967 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 73.2% (664 of 907 strings)

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

* Translated using Weblate (French)

Currently translated at 100.0% (967 of 967 strings)

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

* Translated using Weblate (French)

Currently translated at 100.0% (907 of 907 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (967 of 967 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (967 of 967 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 44.8% (434 of 967 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (967 of 967 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 99.4% (902 of 907 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (967 of 967 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 85.4% (775 of 907 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% (967 of 967 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (907 of 907 strings)

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

* Translated using Weblate (German)

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

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (967 of 967 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (907 of 907 strings)

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

* Translated using Weblate (Spanish)

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

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (967 of 967 strings)

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

* ios: add Spanish

* ios: import localizations

* export localizations

* fix typo

* android: add Spanish

---------

Co-authored-by: sith-on-mars <groguko36@tuta.io>
Co-authored-by: Nick Lai <nick20080808@gmail.com>
Co-authored-by: No name <CertainBot@users.noreply.hosted.weblate.org>
Co-authored-by: John m <jvanmanen@gmail.com>
Co-authored-by: Moo <hazap@hotmail.com>
Co-authored-by: random r <epsilin@yopmail.com>
Co-authored-by: Luis Morillo Najarro <luis_cnnvd@hotmail.com>
Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
Co-authored-by: Pedro Licio <amaralrj@gmail.com>
Co-authored-by: mlanp <github@lang.xyz>
2023-03-22 19:33:24 +00:00
Evgeny Poberezkin 61d8fa02d4 ios: export localizations 2023-03-22 17:50:41 +00:00
Evgeny Poberezkin 0fac2187f0 mobile: what's new in 4.6 (#2058)
* ios: what's new in 4.6

* android: what's new in 4.6
2023-03-22 17:45:55 +00:00
Evgeny Poberezkin 1db61be860 ios: remove unused type 2023-03-22 15:59:48 +00:00
Evgeny Poberezkin 06a0dbd0f2 core, iOS: hidden and muted user profiles (#2025)
* core, ios: profile privacy design

* migration

* core: user profile privacy

* update nix dependencies

* update simplexmq

* import stateTVar

* update core library

* update UI

* update hide/show user profile

* update API, UI, fix test

* update api, UI, test

* update api call

* fix api

* update UI for hidden profiles

* filter notifications on hidden/muted profiles when inactive, alerts

* updates

* update schema, test, icon
2023-03-22 15:58:01 +00:00
Evgeny Poberezkin bcdf502ce6 core: update simplexmq 2023-03-22 09:10:54 +00:00
Stanislav Dmitrenko f9e2f4931a android: group welcome message (#2042) 2023-03-21 23:00:20 +00:00
Stanislav Dmitrenko 8929d15df0 ios: ability to specify welcome message in a group (#2041)
* ios: ability to specify welcome message in a group

* update state in model
2023-03-21 15:15:48 +00:00
Stanislav Dmitrenko 2f529535b1 android: turn of screen in call (#2037) 2023-03-20 21:17:13 +00:00
Stanislav Dmitrenko 90c9eae283 android: night mode splash screen (#2036) 2023-03-20 18:04:48 +00:00
Stanislav Dmitrenko added6105b android: relay server footer (#2035) 2023-03-20 17:12:15 +00:00
Stanislav Dmitrenko 2df39b5e24 android: catch exceptions while opening a URL (#2034) 2023-03-20 16:18:41 +00:00
Stanislav Dmitrenko 3477dd9400 android: system and in-app language selector (#2033)
* android: system language selector

* in-app language selector

* refactor

* refactor

* different value for Chinese

* change language order/names

* different translation

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-03-20 15:47:09 +00:00
Evgeny Poberezkin 5282551f3d Merge branch 'stable' 2023-03-19 22:59:36 +00:00
Evgeny Poberezkin dcadaaf29b docs: readme (#2031) 2023-03-19 22:58:17 +00:00
Evgeny Poberezkin e9d6baa6ba docs: translations (#2030)
* docs: translations

* update table

* update heading/links

* update table

* update table

* update heading
2023-03-19 20:28:39 +00:00
zenobit 6ae052a7a1 Added translated docs to czech (#1963)
* Added translated docs to czech

* Dates reverted, Added link to CZ WEBRTC.md
2023-03-19 18:10:32 +00:00
Stanislav Dmitrenko 9f750c2516 android: audio session management in calls (#2026)
* android: audio session management in calls

* audio session compatibility with old APIs

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-03-19 17:20:43 +00:00
Evgeny Poberezkin 1fe46834f2 mobile: add Chinese interface language 2023-03-19 17:17:27 +00:00
Evgeny Poberezkin 3db85c7d37 mobile app translations (#2028)
* Translated using Weblate (Russian)

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Russian)

Currently translated at 100.0% (903 of 903 strings)

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

* Translated using Weblate (German)

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

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

* Translated using Weblate (Italian)

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

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

* Translated using Weblate (Dutch)

Currently translated at 99.8% (902 of 903 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (903 of 903 strings)

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

* Translated using Weblate (Russian)

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Russian)

Currently translated at 100.0% (903 of 903 strings)

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

* Translated using Weblate (German)

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

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

* Translated using Weblate (Italian)

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

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

* Translated using Weblate (Dutch)

Currently translated at 99.8% (902 of 903 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (903 of 903 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 59.1% (571 of 965 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 2.9% (27 of 903 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% (965 of 965 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (903 of 903 strings)

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

* ios: remove unused translations

* ios: import/export localizations

---------

Co-authored-by: No name <CertainBot@users.noreply.hosted.weblate.org>
Co-authored-by: John m <jvanmanen@gmail.com>
2023-03-19 13:35:51 +00:00
Evgeny Poberezkin 1e4f1b8891 ios: export localizations 2023-03-19 12:53:41 +00:00
Evgeny Poberezkin 0fcd6d40ee Merge pull request #2001 from simplex-chat/callkit
iOS: native calls using WebRTC library and CallKit
2023-03-19 12:25:44 +00:00
Evgeny Poberezkin aaa4ffe789 Merge branch 'master' into callkit 2023-03-19 12:14:34 +00:00
Evgeny Poberezkin 8c4720d0cb ios: link to set app interface language 2023-03-19 12:14:10 +00:00
Evgeny Poberezkin 94b97f6097 cli: /db export command 2023-03-19 11:49:30 +00:00
Evgeny Poberezkin 85800d96c8 ios: import/export localizations 2023-03-18 18:02:34 +00:00
Evgeny Poberezkin 3b4c06111a ios: update core library 2023-03-18 17:54:40 +00:00
Evgeny Poberezkin 548d695a82 mobile app translations (#2027)
* Translated using Weblate (Dutch)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 92.6% (884 of 954 strings)

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

* Translated using Weblate (Portuguese (Brazil))

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

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 69.1% (660 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

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

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

* Translated using Weblate (Chinese (Simplified))

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

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 26.1% (249 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 0.1% (1 of 893 strings)

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

* Translated using Weblate (Chinese (Simplified))

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

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 27.1% (260 of 959 strings)

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

* Translated using Weblate (Chinese (Simplified))

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

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (959 of 959 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 1.1% (11 of 959 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (959 of 959 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 35.8% (344 of 959 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (French)

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

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 2.5% (25 of 965 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 4.8% (43 of 893 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 0.6% (6 of 893 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (893 of 893 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 32.5% (314 of 965 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 32.5% (314 of 965 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 1.7% (16 of 893 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% (965 of 965 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 45.5% (440 of 965 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 92.6% (884 of 954 strings)

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

* Translated using Weblate (Portuguese (Brazil))

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

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 69.1% (660 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

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

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

* Translated using Weblate (Chinese (Simplified))

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

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 26.1% (249 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 0.1% (1 of 893 strings)

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

* Translated using Weblate (Chinese (Simplified))

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

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 27.1% (260 of 959 strings)

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

* Translated using Weblate (Chinese (Simplified))

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

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (959 of 959 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 1.1% (11 of 959 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (959 of 959 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 35.8% (344 of 959 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (French)

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

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 2.5% (25 of 965 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 4.8% (43 of 893 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 0.6% (6 of 893 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (965 of 965 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (893 of 893 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 32.5% (314 of 965 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 32.5% (314 of 965 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 1.7% (16 of 893 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% (965 of 965 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 45.5% (440 of 965 strings)

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

---------

Co-authored-by: John m <jvanmanen@gmail.com>
Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: Bdd55oo <giggzuv9z.eofjx@aleeas.com>
Co-authored-by: Pedro Licio <amaralrj@gmail.com>
Co-authored-by: Pedro Licio <pedro@agenciaregex.com>
Co-authored-by: Float <float.hu+@gmail.com>
Co-authored-by: sith-on-mars <groguko36@tuta.io>
Co-authored-by: jonnysemon <johndevand@tutanota.com>
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: Nick Lai <nick20080808@gmail.com>
Co-authored-by: M Sarmad Qadeer <msarmadqadeer@gmail.com>
Co-authored-by: No name <CertainBot@users.noreply.hosted.weblate.org>
Co-authored-by: Luis Morillo Najarro <luis_cnnvd@hotmail.com>
2023-03-18 17:46:50 +00:00
Evgeny Poberezkin c986a4b88b website: enable Italian and Dutch translations 2023-03-18 17:20:08 +00:00
Evgeny Poberezkin 09940ccf8d website translations (#1960)
* Added translation using Weblate (Arabic)

* Translated using Weblate (French)

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

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

* Translated using Weblate (Arabic)

Currently translated at 20.3% (43 of 211 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 52.6% (111 of 211 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 61.6% (130 of 211 strings)

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

* Added translation using Weblate (Arabic)

* Translated using Weblate (French)

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

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

* Translated using Weblate (Arabic)

Currently translated at 20.3% (43 of 211 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 52.6% (111 of 211 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 61.6% (130 of 211 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 69.1% (146 of 211 strings)

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

* Translated using Weblate (Czech)

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

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

* Translated using Weblate (Dutch)

Currently translated at 46.4% (98 of 211 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 50.2% (106 of 211 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 95.7% (202 of 211 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 96.6% (204 of 211 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 100.0% (211 of 211 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 100.0% (211 of 211 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (211 of 211 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 100.0% (211 of 211 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (211 of 211 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (211 of 211 strings)

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

* Added translation using Weblate (Italian)

* Translated using Weblate (Italian)

Currently translated at 100.0% (211 of 211 strings)

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

* Added translation using Weblate (Spanish)

* remove "coming soon"

---------

Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
Co-authored-by: jonnysemon <johndevand@tutanota.com>
Co-authored-by: ManeraKai <manerakai@protonmail.com>
Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: John m <jvanmanen@gmail.com>
Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: random r <epsilin@yopmail.com>
2023-03-18 17:12:25 +00:00
Evgeny Poberezkin d8cc867099 update simplexmq 2023-03-18 16:18:59 +00:00
Evgeny Poberezkin dce8a1dff9 update simplexmq 2023-03-18 13:43:01 +00:00
Evgeny Poberezkin 5bc9e014c2 update simplexmq 2023-03-18 13:26:54 +00:00
Evgeny Poberezkin 8a2876fca9 core: uncomment simplexmq QQ git reference, ios: update core 2023-03-18 11:00:19 +00:00
Evgeny Poberezkin 17f39ec6a0 Merge branch 'stable' 2023-03-18 09:59:08 +00:00
Evgeny Poberezkin 498ffe8a71 4.5.4: Android 103, iOS 128 2023-03-18 09:57:19 +00:00
Evgeny Poberezkin 66ea2d5d71 Merge branch 'stable' 2023-03-18 08:38:10 +00:00
Evgeny Poberezkin 3dd5b5d835 core: 4.5.4.2 (add stateTVar imports) 2023-03-18 07:59:43 +00:00
Evgeny Poberezkin 9127b1bbc6 Merge pull request #2022 from simplex-chat/ep/v454
v4.5.4: add support for observer role
2023-03-17 17:14:43 +00:00
Evgeny Poberezkin 1657bcf97d core: 4.5.4.1 2023-03-17 15:02:41 +00:00
Evgeny Poberezkin 428db2f8f4 core: fix unused contact deletion (#2023)
* core: failing test for leaving and deleting the group joined via link

* fix test

* merge logic

* fix

* add condition

* refactor

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

* compiles

---------

Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
2023-03-17 16:03:19 +04:00
Evgeny Poberezkin 4cc59d9fbd core: 4.5.4.0 2023-03-16 23:30:28 +00:00
Evgeny Poberezkin c50306709b mobile: do not show "observer" overlay when user leaves group 2023-03-16 23:29:47 +00:00
Evgeny Poberezkin 37d0bc2f14 mobile: hide observer role from UI (to be reverted after v4.5.4 is released) 2023-03-16 22:58:00 +00:00
Stanislav Dmitrenko 2fda0454e3 android: group link role, add observer role (#1981)
* android: group link role, add observer role

* padding

* disabled tint for buttons

* proper layout for long display name

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-03-16 22:20:42 +00:00
Evgeny Poberezkin be19af62d9 ios: group link role, add observer role (#1978)
* ios: group link role, add observer role

* prevent observers from sending in UI, clear compose state on role change
2023-03-16 22:20:20 +00:00
Evgeny Poberezkin f915eb2a20 core: initial group member role when joining via link (#1975)
* core: initial group member role when joining via link

* fix tests

* set role when joining group via link, enable observer test

* show group link when role changes

* amend test

* check role is member or observer when creating a link
2023-03-16 22:19:51 +00:00
Evgeny Poberezkin 2bc1236a2c terminal: update help, remove user ID from terminal /smp test command (#1973)
* terminal: update help, remove user ID from terminal /smp test command

* update mobile api

* update help
2023-03-16 22:19:22 +00:00
Evgeny Poberezkin 9db1924268 ios: optionally show callkit calls in recents and update settings (#2021)
* ios: optionally show callkit calls in recents and update settings

* refactor, fix call error when starting from recents
2023-03-16 22:08:58 +00:00
Evgeny Poberezkin 7a9f220290 ios: do not suspend chat when switching to another callkit call (#2020) 2023-03-16 20:19:53 +00:00
Evgeny Poberezkin 8145387f77 ios: CallKit changed reporting logic (#2019)
* ios: CallKit changed reporting logic

* refactor, suspend chat after call when app is in background

---------

Co-authored-by: Avently <7953703+avently@users.noreply.github.com>
2023-03-16 19:57:43 +00:00
Evgeny Poberezkin 063440e735 ios: remove sheets in ActiveCallView (does not work when call accepted from background via callkit) 2023-03-16 17:18:25 +00:00
Evgeny Poberezkin 6724de09c9 ios: dismiss sheets on IncomingCallView, send notification if reportNewIncomingVoIPPushPayload fails 2023-03-16 16:59:05 +00:00
Evgeny Poberezkin 809cc1f234 ios: different speaker buttons on call screen 2023-03-16 08:46:13 +00:00
Stanislav Dmitrenko 2643ea9066 ios: reverted some changes related to lockScreen (#2011)
* Revert "ios: CallKit enhancements (#2010)"

This reverts commit 840df89ca6.

* Revert "ios: CallKit integrated with app lock and screen protect (#2007)"

This reverts commit 0404b020e6.

* ios: reverted some changes related to lockScreen

* undo delay

* better support of appLock + call

* refactor

* refactor 2

* refactor 3

* refactor 4

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-03-15 21:09:33 +00:00
Stanislav Dmitrenko 840df89ca6 ios: CallKit enhancements (#2010)
* ios: CallKit enhancements

* better checks
2023-03-15 15:32:27 +00:00
Stanislav Dmitrenko 0404b020e6 ios: CallKit integrated with app lock and screen protect (#2007)
* ios: CallKit integrated with app lock and screen protect

* better lock mechanics

* background color

* logs

* refactor, revert auth changes

* additional state variable to allow connecting call

* fix lock screen, public logs

* show callkit option without dev tools

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-03-15 10:21:21 +00:00
Stanislav Dmitrenko f48cabcc0a ios: CallKit double call in background fix (#2004) 2023-03-14 15:28:34 +00:00
Stanislav Dmitrenko f123a905d5 app icon in CallKit screen (#2003) 2023-03-14 15:19:54 +00:00
Stanislav Dmitrenko 9ec6911005 ios: CallKit integration (#1969)
* ios: CallKit integration

* notifying CallKit about outgoing call

* changes

* switching calls with CallKit

* string

* add NSE filtering entitlement

* add NSE build scheme

* remove some call limitations

* calls enhancments

* fixed calls on lockscreen

* don't display useless notification

* fix app state

* ability to answer on call from chat item via CallKit

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-03-14 08:12:40 +00:00
darkmaster c4c93f881d docs: fixes listening port (server) [FR] (#2000) 2023-03-13 23:57:37 +00:00
Evgeny Poberezkin 13706c4f64 website: remove "coming soon" from released features 2023-03-12 23:44:16 +00:00
Evgeny Poberezkin f2f4b26c35 core: update agent protocol to parameterize by entity type (#1988)
* core: update agent protocol to parameterize by entity type

* update simplexmq
2023-03-10 17:23:04 +00:00
Evgeny Poberezkin 1b7b9da07c ios: update core library 2023-03-09 23:08:53 +00:00
Evgeny Poberezkin 2817306659 core: types to support xftp (#1971)
* core: types to support xftp

* migration, amend types

* update protocol / types

* update protocol, types

* update schema, simplexmq
2023-03-09 11:01:22 +00:00
Stanislav Dmitrenko 5f587c2104 android: group link role, add observer role (#1981)
* android: group link role, add observer role

* padding

* disabled tint for buttons

* proper layout for long display name

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-03-07 22:27:28 +00:00
M Sarmad Qadeer f5670c39da website: add support for overlay hash in URL (#1974)
* website: add support for overlay hash in URL

* website: update the overlay hashes

* website: fix the ui of donate button in join simplex section

* website: make the text selectable of unique & explained swiper

* scroll to popup context

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-03-06 22:25:54 +00:00
Stanislav Dmitrenko c0105d135c android: UI to moderate messages to other members (#1982)
* android: UI to moderate messages to other members

* do not show moderate button on moderated, show alert

* changed item

* limiting number of lines in header

* limit text height
2023-03-06 21:58:44 +00:00
Evgeny Poberezkin f1a9814faa ios: UI to moderate messages of other members (#1980)
* ios: UI to moderate messages of other members

* split moderate action

* do not show moderate button on moderated, show alert
2023-03-06 21:57:58 +00:00
Evgeny Poberezkin 8f0e7512be ios: group link role, add observer role (#1978)
* ios: group link role, add observer role

* prevent observers from sending in UI, clear compose state on role change
2023-03-06 13:54:43 +00:00
Evgeny Poberezkin 7d49209f79 core: initial group member role when joining via link (#1975)
* core: initial group member role when joining via link

* fix tests

* set role when joining group via link, enable observer test

* show group link when role changes

* amend test

* check role is member or observer when creating a link
2023-03-06 09:51:42 +00:00
Evgeny Poberezkin b2e285c2c7 terminal: update help, remove user ID from terminal /smp test command (#1973)
* terminal: update help, remove user ID from terminal /smp test command

* update mobile api

* update help
2023-03-04 22:33:17 +00:00
Stanislav Dmitrenko 54020250dc ios: native WebRTC (#1933)
* ios: native WebRTC

* add video showing

* make async function better working with main thread

* wrapped code in main actor, just in case

* small change

* a little better

* enable relay

* removed unused code

* allow switching calls

* testing

* enable encryption

* testing more

* another test

* one more test

* fix remote unencrypted video

* deleted unused code related to PixelBuffer

* added MediaEncryption playground

* better playground

* better playground

* fixes

* use new encryption api

* media encryption works

* small changes

* added lib dependency

* use commit reference for lib instead of version

* video format, PIP size

* remove sample.js

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-03-02 13:17:01 +00:00
Evgeny Poberezkin 01acbb970a blog: typos 2023-03-01 20:03:06 +00:00
Evgeny Poberezkin 36cad35d46 blog: SimpleX File Transfer Protocol (XFTP) (#1965)
* blog: SimpleX File Transfer Protocol (XFTP)

* update blog

* simplify quick start

* update blog
2023-03-01 19:29:59 +00:00
spacedandy 41c9c84139 4.5.3: iOS 127 2023-03-01 19:38:50 +04:00
spacedandy 9e9ca521b0 4.5.3: Android 102 2023-03-01 18:00:49 +04:00
spaced4ndy 1927862871 android: show "export prohibited" alert on enabling app data backup with random db password set (#1962) 2023-03-01 14:36:08 +04:00
spacedandy c80eaf8550 core: 4.5.3.1 2023-03-01 13:23:34 +04:00
Evgeny Poberezkin 9e6a35bac3 mobile: add Czech, fix translations (#1961)
* ios: import localizations

* re-export localizations

* add Czech language

* fix Czech strings

* add Czech to android
2023-03-01 08:52:56 +00:00
Evgeny Poberezkin 62ffcf94a6 translations (#1956)
* Translated using Weblate (Chinese (Simplified))

Currently translated at 73.6% (658 of 893 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 99.7% (891 of 893 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 78.2% (699 of 893 strings)

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

* Translated using Weblate (French)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (German)

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

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 96.5% (862 of 893 strings)

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

* Added translation using Weblate (Arabic)

* Added translation using Weblate (Arabic)

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 73.6% (658 of 893 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 99.7% (891 of 893 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 78.2% (699 of 893 strings)

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

* Translated using Weblate (French)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (German)

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

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 96.5% (862 of 893 strings)

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

* Added translation using Weblate (Arabic)

* Added translation using Weblate (Arabic)

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 59.2% (565 of 954 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (893 of 893 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 0.6% (6 of 954 strings)

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

---------

Co-authored-by: Aaron H <niximi333@gmail.com>
Co-authored-by: John m <jvanmanen@gmail.com>
Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
Co-authored-by: random r <epsilin@yopmail.com>
Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: M Sarmad Qadeer <msarmadqadeer@gmail.com>
Co-authored-by: Bdd55oo <giggzuv9z.eofjx@aleeas.com>
Co-authored-by: Pedro Licio <pedro@agenciaregex.com>
2023-03-01 08:15:32 +00:00
Evgeny Poberezkin 2b77920dcd teminal: option to log errors and service messages to file, closes #1516 (#1957)
* teminal: option to log errors and service messages to file, closes #1516

* rename function
2023-02-28 23:26:08 +00:00
darkmaster 38b7e4d4a4 docs: fixes listening port (server) (#1958) 2023-02-27 20:15:08 +00:00
Evgeny Poberezkin 3e4d4f04ef ios: allow pasting profile image 2023-02-27 17:46:10 +00:00
Evgeny Poberezkin f6f3d17383 ios: do not show notifications on update events in inactive profiles (#1959) 2023-02-27 16:20:54 +00:00
Evgeny Poberezkin d5f6b76ec5 core: increase default queue sizes to 1024, fix broadcast bot not to lock when queue is smaller than the number of contacts (#1955) 2023-02-26 16:36:11 +00:00
zenobit ae75be56ea blog: string fix (#1952) 2023-02-25 17:53:31 +00:00
Evgeny Poberezkin 50b90c4814 core: use 12 bytes IV for WebRTC frame encryption with AES-GCM (#1951)
* core: use 12 bytes IV for WebRTC frame encryption with AES-GCM

* refactor
2023-02-25 17:52:23 +00:00
+shyfire131 6eddb5f30f fix comment syntax in cabal.project.mac (#1948)
Co-authored-by: +shyfire131 <shyfire131@shyfire131.net>
2023-02-24 21:04:46 +00:00
Evgeny Poberezkin cee8f3a4b6 website internationalization (#1922)
* website Internationalization (#1904)

* added devcontainer config

* internationalization under dev

* internationalization of _data done

* overlays internationalization done

* improved routing

* updated gitignore

* remove .devcontainer

* internationalization in progess
deleted all the intermediate files
added translation of few sections

* remaining website strings are added to translation

* done internationalization
- fully converted to i18n plugin
- wrote bash script for creating a combined translations.json

* internationalization UI done

* a quick fix

* remove jq installation

* Added translation using Weblate (German)

* Translated using Weblate (French)

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

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

* fixes of web Internationalization (#1925)

* a quick fix

* blog route for all languages is shifted to root blog route

* wrote merge_translations.js

* remove language label from dropdown

* update language names

* refactor scripts

* remove catch from script

* Added translation using Weblate (Dutch)

* Added translation using Weblate (Norwegian Bokmål)

* Translated using Weblate (Dutch)

Currently translated at 33.0% (70 of 212 strings)

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

* website: internationalization fixes (#1931)

* added devcontainer config

* internationalization under dev

* internationalization of _data done

* overlays internationalization done

* improved routing

* updated gitignore

* remove .devcontainer

* internationalization in progess
deleted all the intermediate files
added translation of few sections

* remaining website strings are added to translation

* done internationalization
- fully converted to i18n plugin
- wrote bash script for creating a combined translations.json

* internationalization UI done

* a quick fix

* blog route for all languages is shifted to root blog route

* wrote merge_translations.js

* remove flag from blog

* updated nav stylings & logo links

* add enabled key

* updated nav dropdown styling

* gave specific lang to i18n plugin.
overlay translations are now working.

* enable nl & nb_NO

* updated nav stylings

* updated contact.js

---------

Co-authored-by: M Sarmad Qadeer <msarmadqadeer@gmail.com>

* Translated using Weblate (German)

Currently translated at 47.6% (101 of 212 strings)

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

* fixed internationalization issues

* updated strings, refactor contact.js

* updated nav stylings for mobile

* a bit smaller padding on mobile

* Added translation using Weblate (Czech)

* Translated using Weblate (Czech)

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

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

* enabled languages

* check/correct (#1949)

---------

Co-authored-by: M Sarmad Qadeer <MSarmadQadeer@gmail.com>
Co-authored-by: Ophiushi <Ophiushi@users.noreply.hosted.weblate.org>
Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: John m <jvanmanen@gmail.com>
Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
2023-02-24 21:03:57 +00:00
Evgeny Poberezkin a2e5733be6 core: update/fix webrtc frame encryption function to return error (#1950)
* core: update/fix webrtc frame encryption function to return error

* ios: update C header

* more tests
2023-02-24 20:55:59 +00:00
Evgeny Poberezkin 5075657c02 ios: update core library 2023-02-23 23:36:39 +00:00
Evgeny Poberezkin 0450b1ace2 mobile: welcome/about page (#1946)
* mobile: welcome/about page

* scroll view (fixes trimmed texts)

* layout

* bigger frame

* minHeight, to allow scroling with large font

---------

Co-authored-by: spacedandy <8711996+spaced4ndy@users.noreply.github.com>
2023-02-21 15:31:41 +00:00
Evgeny Poberezkin 0ebf1da05d core: WebRTC frames encryption (#1942)
* core: WebRTC frames encryption

* test
2023-02-19 23:51:50 +00:00
Evgeny Poberezkin 07ad3edbc2 4.5.3-beta.0: Android 101, iOS 126 2023-02-19 13:42:32 +00:00
Evgeny Poberezkin b40ed2a7f3 core: 4.5.3.0 2023-02-19 10:09:22 +00:00
Evgeny Poberezkin 29b074607c mobile: add Dutch interface (#1941)
* iOS: add Dutch language

* ios: re-export localizations

* enable Dutch in Android
2023-02-19 08:47:26 +00:00
Evgeny Poberezkin 258a157e44 translations (#1938)
* Translated using Weblate (Italian)

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

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 46.5% (444 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 50.8% (485 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 0.3% (3 of 891 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 57.0% (544 of 953 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 51.6% (460 of 891 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 15.1% (144 of 953 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 15.2% (145 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 14.3% (128 of 891 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 15.1% (135 of 891 strings)

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

* Translated using Weblate (Hindi)

Currently translated at 14.3% (137 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 25.1% (224 of 891 strings)

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

* Translated using Weblate (Hindi)

Currently translated at 15.1% (144 of 953 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 59.4% (567 of 953 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 53.5% (477 of 891 strings)

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

* Translated using Weblate (Hindi)

Currently translated at 15.5% (148 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 29.2% (261 of 891 strings)

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

* Translated using Weblate (Hindi)

Currently translated at 15.6% (149 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 31.6% (282 of 891 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 36.2% (323 of 891 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 7.4% (71 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 41.5% (370 of 891 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 53.9% (481 of 891 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 57.5% (513 of 891 strings)

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

* Added translation using Weblate (Bulgarian)

* Added translation using Weblate (Bulgarian)

* Translated using Weblate (Dutch)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 77.2% (688 of 891 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 83.9% (748 of 891 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 15.9% (152 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (891 of 891 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 7.9% (76 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 99.8% (953 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (891 of 891 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 99.8% (953 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (891 of 891 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 99.8% (953 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (891 of 891 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (954 of 954 strings)

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

* Added translation using Weblate (Norwegian Bokmål)

* Added translation using Weblate (Norwegian Bokmål)

* Translated using Weblate (German)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (French)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (French)

Currently translated at 100.0% (891 of 891 strings)

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

* Translated using Weblate (Japanese)

Currently translated at 67.1% (641 of 954 strings)

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

* Translated using Weblate (Hindi)

Currently translated at 15.7% (150 of 954 strings)

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

* Translated using Weblate (Japanese)

Currently translated at 99.3% (948 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 61.4% (586 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 55.5% (495 of 891 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 27.2% (260 of 954 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 42.5% (406 of 954 strings)

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

* Translated using Weblate (Croatian)

Currently translated at 2.0% (18 of 891 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 66.2% (632 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 61.3% (547 of 891 strings)

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

* Translated using Weblate (Russian)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (891 of 891 strings)

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

* Translated using Weblate (Italian)

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

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 46.5% (444 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 50.8% (485 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 0.3% (3 of 891 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 57.0% (544 of 953 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 51.6% (460 of 891 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 15.1% (144 of 953 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 15.2% (145 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 14.3% (128 of 891 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 15.1% (135 of 891 strings)

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

* Translated using Weblate (Hindi)

Currently translated at 14.3% (137 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 25.1% (224 of 891 strings)

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

* Translated using Weblate (Hindi)

Currently translated at 15.1% (144 of 953 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 59.4% (567 of 953 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 53.5% (477 of 891 strings)

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

* Translated using Weblate (Hindi)

Currently translated at 15.5% (148 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 29.2% (261 of 891 strings)

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

* Translated using Weblate (Hindi)

Currently translated at 15.6% (149 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 31.6% (282 of 891 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 36.2% (323 of 891 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 7.4% (71 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 41.5% (370 of 891 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 53.9% (481 of 891 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 57.5% (513 of 891 strings)

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

* Added translation using Weblate (Bulgarian)

* Added translation using Weblate (Bulgarian)

* Translated using Weblate (Dutch)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 77.2% (688 of 891 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 83.9% (748 of 891 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 15.9% (152 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (891 of 891 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (953 of 953 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 7.9% (76 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 99.8% (953 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (891 of 891 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 99.8% (953 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (891 of 891 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 99.8% (953 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (891 of 891 strings)

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

* Translated using Weblate (Czech)

Currently translated at 100.0% (954 of 954 strings)

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

* Added translation using Weblate (Norwegian Bokmål)

* Added translation using Weblate (Norwegian Bokmål)

* Translated using Weblate (German)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (French)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (French)

Currently translated at 100.0% (891 of 891 strings)

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

* Translated using Weblate (Japanese)

Currently translated at 67.1% (641 of 954 strings)

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

* Translated using Weblate (Hindi)

Currently translated at 15.7% (150 of 954 strings)

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

* Translated using Weblate (Japanese)

Currently translated at 99.3% (948 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 61.4% (586 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 55.5% (495 of 891 strings)

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

* Translated using Weblate (Chinese (Traditional))

Currently translated at 27.2% (260 of 954 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 42.5% (406 of 954 strings)

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

* Translated using Weblate (Croatian)

Currently translated at 2.0% (18 of 891 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 66.2% (632 of 954 strings)

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

* Translated using Weblate (Chinese (Simplified))

Currently translated at 61.3% (547 of 891 strings)

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

* Translated using Weblate (Russian)

Currently translated at 100.0% (954 of 954 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 100.0% (891 of 891 strings)

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

---------

Co-authored-by: random r <epsilin@yopmail.com>
Co-authored-by: xqhjay <137847720@qq.com>
Co-authored-by: sith-on-mars <groguko36@pm.me>
Co-authored-by: John m <jvanmanen@gmail.com>
Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: sith-on-mars <groguko36@tuta.io>
Co-authored-by: Bdd55oo <giggzuv9z.eofjx@aleeas.com>
Co-authored-by: Raman <translations.0l5zc@simplelogin.com>
Co-authored-by: LegendaryInfernalFox <0387agimeno@e-itaca.es>
Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: Ophiushi <Ophiushi@users.noreply.hosted.weblate.org>
Co-authored-by: tomato potato <4ryo49@protonmail.com>
Co-authored-by: Mehmed <pajazetovicmeho@gmail.com>
2023-02-19 08:23:32 +00:00
Evgeny Poberezkin 92d9a1f9f2 ios: export localizations 2023-02-18 19:32:25 +00:00
Evgeny Poberezkin e5009a58df core: update simplexmq v4.4.1 2023-02-18 19:04:59 +00:00
Evgeny Poberezkin 35a1ce4903 core: separate core options to use in bots (#1937)
* core: separate core options to use in bots

* ci: install pkg-config for mac
2023-02-18 17:39:16 +00:00
Evgeny Poberezkin 7c4c627ee9 terminal: support multiline messages (as JSON strings) (#1936)
* terminal: support for multiline messages

* fix

* fix tests
2023-02-18 15:16:50 +00:00
Evgeny Poberezkin b7575ec01d core: encrypt/decrypt WebRTC frames (#1935)
* core: encrypt/decrypt WebRTC frames

* swift API

* add decrypt stub

* change name

* remove unused type

* move functions

* update cabal file

* copy bytes from encrypted string
2023-02-16 20:25:37 +00:00
Evgeny Poberezkin a0351d6f99 apps: update chat bots, readme (#1928)
* apps: update chat bots, readme

* CLI readme

* broadcast bot

* delete messages from non-publishers, better replies, support forwarding low-res images and links

* typo

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

* change

---------

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

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

* different way of doing things

* change

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

* fix the fix

* fix img src

* CONTRIBUTING_fr

* SQL_fr ; fix rev date

* WEBRTC_fr.md ; rev date

* CLI_fr ; rev date

* fix table content link and sum img src

* fix

* fixing the fix

am i dumb?

* polishing...

* README_fr.md (save)

* Update README_fr.md

* README_fr ; starting SIMPLEX_FR ; link fix

* update README (en+fr)

* Blog README_fr ; translators link

* typo

* SIMPLEX_fr ; fixes

* last fixes

* rename folder

* rename files/links

* update line

* remove ...

---------

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

* refactor

* added comments and renamed function

* rename

* rename

---------

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

* allow message deletion to admins/owners

* deleted by types, schema

* check role

* fix test, view

* view, tests

* comment

* test timed deletion events

* refactor

* refactor

* refactor

---------

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

* add doc

* add images, corrections

* spellcheck

* link to translation guide from readme

* change image

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

* naming

* spelling

* spelling

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

* better place for code

* ios: including fully localized languages only

* Revert "ios: including fully localized languages only"

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

* border

* automatic version

* modifier

* make image instead of screenshot

* code folding

* don't use deprecated method

* function refactor

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

* size of circle

* same padding as in android

* add padding to logo

---------

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

* save qr code as jpg for better quality

* bigger logo

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

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2023-02-06 08:45:40 +00:00
Evgeny Poberezkin c8fae0ec43 blog: typo 2023-02-05 23:46:42 +00:00
381 changed files with 43810 additions and 5033 deletions
+4
View File
@@ -91,6 +91,10 @@ jobs:
echo " extra-lib-dirs: /usr/local/opt/openssl@1.1/lib" >> cabal.project.local
echo " flags: +openssl" >> cabal.project.local
- name: Install pkg-config for Mac
if: matrix.os == 'macos-latest'
run: brew install pkg-config
- name: Unix prepare cabal.project.local for Ubuntu
if: matrix.os == 'ubuntu-20.04' || matrix.os == 'ubuntu-18.04'
shell: bash
+3 -1
View File
@@ -45,10 +45,12 @@ tests/tmp
tests/tmp*
logs/
*.devcontainer
# for website
website/node_modules/
website/src/blog/
website/translations.json
website/src/_data/supported_languages.json
website/src/img/images/
website/src/images/
# Generated files
+105 -92
View File
@@ -1,13 +1,29 @@
<img src="images/simplex-chat-logo.svg" alt="SimpleX logo" width="100%">
# SimpleX - the first messaging platform that has no user identifiers of any kind - 100% private by design!
[![build](https://github.com/simplex-chat/simplex-chat/actions/workflows/build.yml/badge.svg?branch=stable)](https://github.com/simplex-chat/simplex-chat/actions/workflows/build.yml)
[![GitHub downloads](https://img.shields.io/github/downloads/simplex-chat/simplex-chat/total)](https://github.com/simplex-chat/simplex-chat/releases)
[![GitHub release](https://img.shields.io/github/v/release/simplex-chat/simplex-chat)](https://github.com/simplex-chat/simplex-chat/releases)
[![Join on Reddit](https://img.shields.io/reddit/subreddit-subscribers/SimpleXChat?style=social)](https://www.reddit.com/r/SimpleXChat)
[![Follow on Mastodon](https://img.shields.io/mastodon/follow/108619463746856738?domain=https%3A%2F%2Fmastodon.social&style=social)](https://mastodon.social/@simplex)
| 19/03/2023 | EN, [FR](/docs/lang/fr/README.md), [CZ](/docs/lang/cs/README.md) |
<img src="images/simplex-chat-logo.svg" alt="SimpleX logo" width="100%">
# SimpleX - the first messaging platform that has no user identifiers of any kind - 100% private by design!
[<img src="./images/trail-of-bits.jpg" height="100">](http://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html) &nbsp;&nbsp;&nbsp; [<img src="./images/privacy-guides.jpg" height="80">](https://www.privacyguides.org/en/real-time-communication/#simplex-chat) &nbsp;&nbsp;&nbsp; [<img src="./images/kuketz-blog.jpg" height="80">](https://www.kuketz-blog.de/simplex-eindruecke-vom-messenger-ohne-identifier/)
## Welcome to SimpleX Chat!
1. 📲 [Install the app](#install-the-app).
2. ↔️ [Connect to the team](#connect-to-the-team-via-the-app) and [join user groups](#join-user-groups).
3. 🤝 [Make a private connection](#make-a-private-connection) with a friend.
4. 🔤 [Help translating SimpleX Chat](#help-translating-simplex-chat).
5. ⚡️ [Contribute](#contribute) and [help us with donations](#help-us-with-donations).
[Learn more about SimpleX Chat](#contents).
## Install the app
[<img src="https://github.com/simplex-chat/.github/blob/master/profile/images/apple_store.svg" alt="iOS app" height="42">](https://apps.apple.com/us/app/simplex-chat/id1605771084)
&nbsp;
[![Android app](https://github.com/simplex-chat/.github/blob/master/profile/images/google_play.svg)](https://play.google.com/store/apps/details?id=chat.simplex.app)
@@ -22,9 +38,87 @@
- 🔐 Double ratchet end-to-end encryption, with additional encryption layer.
- 📱 Mobile apps for Android ([Google Play](https://play.google.com/store/apps/details?id=chat.simplex.app), [APK](https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex.apk)) and [iOS](https://apps.apple.com/us/app/simplex-chat/id1605771084).
- 🚀 [TestFlight preview for iOS](https://testflight.apple.com/join/DWuT2LQu) with the new features 1-2 weeks earlier - **limited to 10,000 users**!
- 🖥 Available as a terminal (console) app / CLI on Linux, MacOS, Windows.
- 🖥 Available as a terminal (console) [app / CLI](#zap-quick-installation-of-a-terminal-app) on Linux, MacOS, Windows.
**NEW**: Security audit by [Trail of Bits](https://www.trailofbits.com/about), the [new website](https://simplex.chat) and v4.2 released! [See the announcement](./blog/20221108-simplex-chat-v4.2-security-audit-new-website.md)
## Connect to the team via the app
- to ask any questions
- to suggest any improvements
- to share anything relevant
## Join user groups
You can join an English-speaking users group if you want to ask any questions: [#SimpleX-Group-2](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FQP8zaGjjmlXV-ix_Er4JgJ0lNPYGS1KX%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEApAgBkRZ3x12ayZ7sHrjHQWNMvqzZpWUgM_fFCUdLXwo%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xWpPXEZZsQp_F7vwAcAYDw%3D%3D%22%7D)
There are 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:
[\#SimpleX-DE](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FkIEl7OQzcp-J6aDmjdlQbRJwqkcZE7XR%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAR16PCu02MobRmKAsjzhDWMZcWP9hS8l5AUZi-Gs8z18%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22puYPMCQt11yPUvgmI5jCiw%3D%3D%22%7D) (German-speaking), [\#SimpleX-FR](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FvIHQDxTor53nwnWWTy5cHNwQQAdWN5Hw%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAPdgK1eBnETmgiqEQufbUkydKBJafoRx4iRrtrC2NAGc%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%221FyUryBPza-1ZFFE80Ekbg%3D%3D%22%7D) (French-speaking), [\#SimpleX-RU](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FXZyt3hJmWsycpN7Dqve_wbrAqb6myk1R%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAMFVIoytozTEa_QXOgoZFq_oe0IwZBYKvW50trSFXzXo%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xz05ngjA3pNIxLZ32a8Vxg%3D%3D%22%7D) (Russian-speaking), [\#SimpleX-IT](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2F0weR-ZgDUl7ruOtI_8TZwEsnJP6UiImA%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAq4PSThO9Fvb5ydF48wB0yNbpzCbuQJCW3vZ9BGUfcxk%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22e-iceLA0SctC62eARgYDWg%3D%3D%22%7D) (Italian-speaking).
You can join either by opening these links in the app or by opening them in a desktop browser and scanning the QR code.
## Make a private connection
You need to share a link with your friend or scan a QR code from their phone, in person or during a video call, to make a connection and start messaging.
The channel through which you share the link does not have to be secure - it is enough that you can confirm who sent you the message and that your SimpleX connection is established.
<img src="https://github.com/simplex-chat/.github/blob/master/profile/images/app1.png" alt="Make a private connection" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/arrow.png" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/app2.png" alt="Conversation" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/arrow.png" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/app3.png" alt="Video call" height="360">
After you connect, you can [verify connection security code](./blog/20230103-simplex-chat-v4.4-disappearing-messages.md#connection-security-verification).
## Help translating SimpleX Chat
Thanks to our users and [Weblate](https://hosted.weblate.org/engage/simplex-chat/), SimpleX Chat apps, website and documents are translated to many other languages.
Join our translators to help SimpleX grow!
|locale|language |contributor|[Android](https://play.google.com/store/apps/details?id=chat.simplex.app) and [iOS](https://apps.apple.com/us/app/simplex-chat/id1605771084)|[website](https://simplex.chat)|Github docs|
|:----:|:-------:|:---------:|:---------:|:---------:|:---------:|
|🇬🇧 en|English | |✓|✓|✓|✓|
|🇨🇿 cs|Čeština |[zen0bit](https://github.com/zen0bit)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/cs/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/cs/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/cs/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/cs/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/cs/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/cs/)|[](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang/cs)|
|🇩🇪 de|Deutsch |[mlanp](https://github.com/mlanp)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/de/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/de/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/de/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/de/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/de/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/de/)||
|🇪🇸 es|Español ||[![android app](https://hosted.weblate.org/widgets/simplex-chat/es/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/es/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/es/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/es/)|||
|🇫🇷 fr|Français |[ishi_sama](https://github.com/ishi_sama)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/fr/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/fr/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/fr/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/fr/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/fr/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/fr/)|[](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang/fr)|
|🇮🇹 it|Italiano |[unbranched](https://github.com/unbranched)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/it/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/it/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/it/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/it/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/it/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/it/)||
|🇳🇱 nl|Nederlands|[mika-nl](https://github.com/mika-nl)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/nl/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/nl/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/nl/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/nl/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/nl/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/nl/)||
|🇷🇺 ru|Русский ||[![android app](https://hosted.weblate.org/widgets/simplex-chat/ru/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/ru/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/ru/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/ru/)|||
|🇨🇳 zh-CHS|简体中文|[sith-on-mars](https://github.com/sith-on-mars)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/)|||
Languages in progress: Arabic, Hindi, Japanese, Spanish and [many others](https://hosted.weblate.org/projects/simplex-chat/#languages). We will be adding more languages as some of the already added are completed please suggest new languages, review the [translation guide](./docs/TRANSLATIONS.md) and get in touch with us!
## Contribute
We would love to have you join the development! You can help us with:
- writing a tutorial or recipes about hosting servers, chat bot automations, etc.
- contributing to SimpleX Chat knowledge-base.
- developing features - please connect to us via chat so we can help you get started.
## Help us with donations
Huge thank you to everybody who donated to SimpleX Chat!
We are prioritizing users privacy and security - it would be impossible without your support.
Our pledge to our users is that SimpleX protocols are and will remain open, and in public domain, - so anybody can build the future implementations of the clients and the servers. We are building SimpleX platform based on the same principles as email and web, but much more private and secure.
Your donations help us raise more funds any amount, even the price of the cup of coffee, would make a big difference for us.
It is possible to donate via:
- [GitHub](https://github.com/sponsors/simplex-chat) - it is commission-free for us.
- [OpenCollective](https://opencollective.com/simplex-chat) - it charges a commission, and also accepts donations in crypto-currencies.
- Monero address: 8568eeVjaJ1RQ65ZUn9PRQ8ENtqeX9VVhcCYYhnVLxhV4JtBqw42so2VEUDQZNkFfsH5sXCuV7FN8VhRQ21DkNibTZP57Qt
- Bitcoin address: 1bpefFkzuRoMY3ZuBbZNZxycbg7NYPYTG
- BCH address: 1bpefFkzuRoMY3ZuBbZNZxycbg7NYPYTG
- Ethereum address: 0x83fd788f7241a2be61780ea9dc72d2151e6843e2
- Solana address: 43tWFWDczgAcn4Rzwkpqg2mqwnQETSiTwznmCgA2tf1L
Thank you,
Evgeny
SimpleX Chat founder
## Contents
@@ -36,16 +130,11 @@
- [Users own SimpleX network](#users-own-simplex-network)
- [Frequently asked questions](#frequently-asked-questions)
- [News and updates](#news-and-updates)
- [Make a private connection](#make-a-private-connection)
- [Quick installation of a terminal app](#zap-quick-installation-of-a-terminal-app)
- [SimpleX Platform design](#simplex-platform-design)
- [Privacy: technical details and limitations](#privacy-technical-details-and-limitations)
- [For developers](#for-developers)
- [Roadmap](#roadmap)
- [Join a user group](#join-a-user-group)
- [Translate the apps](#translate-the-apps)
- [Contribute](#contribute)
- [Help us with donations](#help-us-with-donations)
- [Disclaimers, Security contact, License](#disclaimers)
## Why privacy matters
@@ -76,11 +165,11 @@ You can use SimpleX with your own servers and still communicate with people usin
## Frequently asked questions
1. _How SimpleX can deliver messages without any user identifiers?_ See [v2 release annoucement](./blog/20220511-simplex-chat-v2-images-files.md#the-first-messaging-platform-without-user-identifiers) explaining how SimpleX works.
1. _How SimpleX can deliver messages without any user identifiers?_ See [v2 release announcement](./blog/20220511-simplex-chat-v2-images-files.md#the-first-messaging-platform-without-user-identifiers) explaining how SimpleX works.
2. _Why should I not just use Signal?_ Signal is a centralised platform that uses phone numbers to identify its users and their contacts. It means that while the content of your messages on Signal is protected with robust end-to-end encryption, there is a large amount of meta-data visible to Signal - who you talk with and when.
2. _Why should I not just use Signal?_ Signal is a centralized platform that uses phone numbers to identify its users and their contacts. It means that while the content of your messages on Signal is protected with robust end-to-end encryption, there is a large amount of meta-data visible to Signal - who you talk with and when.
3. _How is it different from Matrix, Session, Ricochet, Cwtch, etc., that also don't require user identites?_ Although these platforms do not require a _real identity_, they do rely on anonymous user identities to deliver messages it can be, for example, an identity key or a random number. Using a persistent user identity, even anonymous, creates a risk that user's connection graph becomes known to the observers and/or service providers, and it can lead to de-anonymizing some users. If the same user profile is used to connect to two different people via any messenger other than SimpleX, these two people can confirm if they are connected to the same person - they would use the same user identifier in the messages. With SimpleX there is no meta-data in common between your conversations with different contacts - the quality that no other messaging platform has.
3. _How is it different from Matrix, Session, Ricochet, Cwtch, etc., that also don't require user identities?_ Although these platforms do not require a _real identity_, they do rely on anonymous user identities to deliver messages it can be, for example, an identity key or a random number. Using a persistent user identity, even anonymous, creates a risk that user's connection graph becomes known to the observers and/or service providers, and it can lead to de-anonymizing some users. If the same user profile is used to connect to two different people via any messenger other than SimpleX, these two people can confirm if they are connected to the same person - they would use the same user identifier in the messages. With SimpleX there is no meta-data in common between your conversations with different contacts - the quality that no other messaging platform has.
## News and updates
@@ -98,14 +187,6 @@ Recent updates:
[All updates](./blog)
## Make a private connection
You need to share a link or scan a QR code (in person or during a video call) to make a connection and start messaging.
The channel through which you share the link does not have to be secure - it is enough that you can confirm who sent you the message and that your SimpleX connection is established.
<img src="https://github.com/simplex-chat/.github/blob/master/profile/images/app1.png" alt="Make a private connection" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/arrow.png" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/app2.png" alt="Conversation" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/arrow.png" height="360"> <img src="https://github.com/simplex-chat/.github/blob/master/profile/images/app3.png" alt="Video call" height="360">
## :zap: Quick installation of a terminal app
```sh
@@ -138,7 +219,7 @@ SimpleX Chat is a work in progress we are releasing improvements as they are
What is already implemented:
1. Instead of user profile identifiers used by all other platforms, even the most private ones, SimpleX uses pairwise per-queue identifiers (2 addresses for each unidirectional message queue, with an optional 3rd address for push notificaitons on iOS, 2 queues in each connection between the users). It makes observing the network graph on the application level more difficult, as for `n` users there can be up to `n * (n-1)` message queues.
1. Instead of user profile identifiers used by all other platforms, even the most private ones, SimpleX uses pairwise per-queue identifiers (2 addresses for each unidirectional message queue, with an optional 3rd address for push notifications on iOS, 2 queues in each connection between the users). It makes observing the network graph on the application level more difficult, as for `n` users there can be up to `n * (n-1)` message queues.
2. End-to-end encryption in each message queue using [NaCl cryptobox](https://nacl.cr.yp.to/box.html). This is added to allow redundancy in the future (passing each message via several servers), to avoid having the same ciphertext in different queues (that would only be visible to the attacker if TLS is compromised). The encryption keys used for this encryption are not rotated, instead we are planning to rotate the queues. Curve25519 keys are used for key negotiation.
3. [Double ratchet](https://signal.org/docs/specifications/doubleratchet/) end-to-end encryption in each conversation between two users (or group members). This is the same algorithm that is used in Signal and many other messaging apps; it provides OTR messaging with forward secrecy (each message is encrypted by its own ephemeral key), break-in recovery (the keys are frequently re-negotiated as part of the message exchange). Two pairs of Curve448 keys are used for the initial key agreement, initiating party passes these keys via the connection link, accepting side - in the header of the confirmation message.
4. Additional layer of encryption using NaCL cryptobox for the messages delivered from the server to the recipient. This layer avoids having any ciphertext in common between sent and received traffic of the server inside TLS (and there are no identifiers in common as well).
@@ -162,7 +243,7 @@ You can:
- use SimpleX Chat library to integrate chat functionality into your mobile apps.
- create chat bots and services in Haskell - see [simple](./apps/simplex-bot/) and more [advanced chat bot example](./apps/simplex-bot-advanced/).
- create chat bots and services in any language running SimpleX Chat terminal CLI as a local WebSocket server. See [TypeScript SimpleX Chat client](./packages/simplex-chat-client/) and [JavaScipt chat bot example](./packages/simplex-chat-client/typescript/examples/squaring-bot.js).
- create chat bots and services in any language running SimpleX Chat terminal CLI as a local WebSocket server. See [TypeScript SimpleX Chat client](./packages/simplex-chat-client/) and [JavaScript chat bot example](./packages/simplex-chat-client/typescript/examples/squaring-bot.js).
- run [simplex-chat terminal CLI](./docs/CLI.md) to execute individual chat commands, e.g. to send messages as part of shell script execution.
If you are considering developing with SimpleX platform please get in touch for any advice and support.
@@ -223,74 +304,6 @@ If you are considering developing with SimpleX platform please get in touch for
- Message delivery relay for senders (to conceal IP address from the recipients' servers and to reduce the traffic).
- High capacity multi-node SMP relays.
## Join a user group
You can join a general English-speaking group: [#SimpleX-Group](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FcIS0gu1h0Y8pZpQkDaSz7HZGSHcKpMB9%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAKzzWAJYrVt1zdgRp4pD3FBst6eK7233DJeNElENLJRA%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%228mazMhefXoM5HxWBfZnvwQ%3D%3D%22%7D). Just bear in mind that it has ~300 members now, and that it is fully decentralized, so sending a message and connecting to all members in this group will take some time, only join it if you:
- want to see how larger groups work.
- traffic is not a concern (sending each message is ~5mb).
You can also join a new and smaller English-speaking group if you want to ask questions without too much traffic: [#SimpleX-Group-2](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FQP8zaGjjmlXV-ix_Er4JgJ0lNPYGS1KX%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEApAgBkRZ3x12ayZ7sHrjHQWNMvqzZpWUgM_fFCUdLXwo%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xWpPXEZZsQp_F7vwAcAYDw%3D%3D%22%7D)
There are also several groups in languages other than English, that we have the apps interface translated into. These groups are for testing, and asking questions to other SimpleX Chat users. We do not always answer questions there, so please ask them in one of the English-speaking groups.
- [\#SimpleX-DE](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FkIEl7OQzcp-J6aDmjdlQbRJwqkcZE7XR%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAR16PCu02MobRmKAsjzhDWMZcWP9hS8l5AUZi-Gs8z18%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22puYPMCQt11yPUvgmI5jCiw%3D%3D%22%7D) (German-speaking).
- [\#SimpleX-FR](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FvIHQDxTor53nwnWWTy5cHNwQQAdWN5Hw%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAPdgK1eBnETmgiqEQufbUkydKBJafoRx4iRrtrC2NAGc%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%221FyUryBPza-1ZFFE80Ekbg%3D%3D%22%7D) (French-speaking).
- [\#SimpleX-RU](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FXZyt3hJmWsycpN7Dqve_wbrAqb6myk1R%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAMFVIoytozTEa_QXOgoZFq_oe0IwZBYKvW50trSFXzXo%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xz05ngjA3pNIxLZ32a8Vxg%3D%3D%22%7D) (Russian-speaking).
- [\#SimpleX-IT](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2F0weR-ZgDUl7ruOtI_8TZwEsnJP6UiImA%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAq4PSThO9Fvb5ydF48wB0yNbpzCbuQJCW3vZ9BGUfcxk%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22e-iceLA0SctC62eARgYDWg%3D%3D%22%7D) (Italian-speaking).
You can join these groups either by opening these links in the app or by opening them in a desktop browser and scanning QR code.
Join via the app to share what's going on and ask any questions!
## Translate the apps
Thanks to our users and [Weblate](https://hosted.weblate.org/engage/simplex-chat/), SimpleX Chat apps are translated to many other languages. Join our translators to help SimpleX grow faster!
Current interface languages:
English (development language)
German: [@mlanp](https://github.com/mlanp)
French: link to be added
Italian: [@unbranched](https://github.com/unbranched)
Russian: project team
Languages in progress: Chinese, Hindi, Japanese, Dutch and [many others](https://hosted.weblate.org/projects/simplex-chat/#languages). We will be adding more languages as some of the already added are completed please suggest new languages and get in touch with us!
## Contribute
We would love to have you join the development! You can contribute to SimpleX Chat with:
- translate website homepage - there is a lot of content we would like to share, it would help to bring the new users.
- writing a tutorial or recipes about hosting servers, chat bot automations, etc.
- developing features - please connect to us via chat so we can help you get started.
## Help us with donations
Huge thank you to everybody who donated to SimpleX Chat!
We are prioritizing users privacy and security - it would be impossible without your support.
Our pledge to our users is that SimpleX protocols are and will remain open, and in public domain, - so anybody can build the future implementations of the clients and the servers. We are building SimpleX platform based on the same principles as email and web, but much more private and secure.
Your donations help us raise more funds any amount, even the price of the cup of coffee, would make a big difference for us.
It is possible to donate via:
- [GitHub](https://github.com/sponsors/simplex-chat) - it is commission-free for us.
- [OpenCollective](https://opencollective.com/simplex-chat) - it charges a commission, and also accepts donations in crypto-currencies.
- Monero address: 8568eeVjaJ1RQ65ZUn9PRQ8ENtqeX9VVhcCYYhnVLxhV4JtBqw42so2VEUDQZNkFfsH5sXCuV7FN8VhRQ21DkNibTZP57Qt
- Bitcoin address: 1bpefFkzuRoMY3ZuBbZNZxycbg7NYPYTG
- BCH address: 1bpefFkzuRoMY3ZuBbZNZxycbg7NYPYTG
- Ethereum address: 0x83fd788f7241a2be61780ea9dc72d2151e6843e2
- Solana address: 43tWFWDczgAcn4Rzwkpqg2mqwnQETSiTwznmCgA2tf1L
- please let us know, via GitHub issue or chat, if you want to create a donation in some other cryptocurrency - we will add the address to the list.
Thank you,
Evgeny
SimpleX Chat founder
## Disclaimers
[SimpleX protocols and security model](https://github.com/simplex-chat/simplexmq/blob/master/protocol/overview-tjr.md) was reviewed, and had many breaking changes and improvements in v1.0.0.
+9 -4
View File
@@ -5,14 +5,14 @@ plugins {
}
android {
compileSdk 32
compileSdk 33
defaultConfig {
applicationId "chat.simplex.app"
minSdk 29
targetSdk 32
versionCode 99
versionName "4.5.1"
targetSdk 33
versionCode 104
versionName "4.6-beta.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk {
@@ -76,6 +76,11 @@ android {
}
jniLibs.useLegacyPackaging = compression_level != "0"
}
def isRelease = gradle.getStartParameter().taskNames.find({ it.toLowerCase().contains("release") }) != null
// if (isRelease) {
// Comma separated list of languages that will be included in the apk
android.defaultConfig.resConfigs("en", "cs", "de", "es", "fr", "it", "nl", "ru", "zh-rCN")
// }
}
dependencies {
@@ -30,6 +30,7 @@
android:label="${app_name}"
android:extractNativeLibs="${extract_native_libs}"
android:supportsRtl="true"
android:localeConfig="@xml/locales_config"
android:theme="@style/Theme.SimpleX">
<!-- Main activity -->
@@ -3,9 +3,7 @@ package chat.simplex.app
import android.app.Application
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Parcelable
import android.os.*
import android.os.SystemClock.elapsedRealtime
import android.util.Log
import android.view.WindowManager
@@ -68,6 +66,7 @@ class MainActivity: FragmentActivity() {
super.onCreate(savedInstanceState)
// testJson()
val m = vm.chatModel
applyAppLocale(m.controller.appPrefs.appLanguage)
// When call ended and orientation changes, it re-process old intent, it's unneeded.
// Only needed to be processed on first creation of activity
if (savedInstanceState == null) {
@@ -38,6 +38,8 @@ class SimplexApp: Application(), LifecycleEventObserver {
var isAppOnForeground: Boolean = false
val defaultLocale: Locale = Locale.getDefault()
fun initChatController(useKey: String? = null, startChat: Boolean = true) {
val dbKey = useKey ?: DatabaseUtils.useDatabaseKey()
val dbAbsolutePathPrefix = getFilesDirectory(SimplexApp.context)
@@ -101,8 +103,19 @@ class SimplexApp: Application(), LifecycleEventObserver {
isAppOnForeground = true
if (chatModel.chatRunning.value == true) {
kotlin.runCatching {
val chats = chatController.apiGetChats()
chatModel.updateChats(chats)
val currentUserId = chatModel.currentUser.value?.userId
val chats = ArrayList(chatController.apiGetChats())
/** Active user can be changed in background while [ChatController.apiGetChats] is executing */
if (chatModel.currentUser.value?.userId == currentUserId) {
val currentChatId = chatModel.chatId.value
val oldStats = if (currentChatId != null) chatModel.getChat(currentChatId)?.chatStats else null
if (oldStats != null) {
val indexOfCurrentChat = chats.indexOfFirst { it.id == currentChatId }
/** Pass old chatStats because unreadCounter can be changed already while [ChatController.apiGetChats] is executing */
if (indexOfCurrentChat >= 0) chats[indexOfCurrentChat] = chats[indexOfCurrentChat].copy(chatStats = oldStats)
}
chatModel.updateChats(chats)
}
}.onFailure { Log.e(TAG, it.stackTraceToString()) }
}
}
@@ -486,6 +486,24 @@ data class Chat (
val chatItems: List<ChatItem>,
val chatStats: ChatStats = ChatStats(),
) {
val userCanSend: Boolean
get() = when (chatInfo) {
is ChatInfo.Direct -> true
is ChatInfo.Group -> {
val m = chatInfo.groupInfo.membership
m.memberActive && m.memberRole >= GroupMemberRole.Member
}
else -> false
}
val userIsObserver: Boolean get() = when(chatInfo) {
is ChatInfo.Group -> {
val m = chatInfo.groupInfo.membership
m.memberActive && m.memberRole == GroupMemberRole.Observer
}
else -> false
}
val id: String get() = chatInfo.id
@Serializable
@@ -963,11 +981,13 @@ class GroupMemberRef(
@Serializable
enum class GroupMemberRole(val memberRole: String) {
@SerialName("member") Member("member"), // order matters in comparisons
@SerialName("observer") Observer("observer"), // order matters in comparisons
@SerialName("member") Member("member"),
@SerialName("admin") Admin("admin"),
@SerialName("owner") Owner("owner");
val text: String get() = when (this) {
Observer -> generalGetString(R.string.group_member_role_observer)
Member -> generalGetString(R.string.group_member_role_member)
Admin -> generalGetString(R.string.group_member_role_admin)
Owner -> generalGetString(R.string.group_member_role_owner)
@@ -1218,9 +1238,24 @@ data class ChatItem (
when (content) {
is CIContent.SndDeleted -> true
is CIContent.RcvDeleted -> true
is CIContent.SndModerated -> true
is CIContent.RcvModerated -> true
else -> false
}
fun memberToModerate(chatInfo: ChatInfo): Pair<GroupInfo, GroupMember>? {
return if (chatInfo is ChatInfo.Group && chatDir is CIDirection.GroupRcv) {
val m = chatInfo.groupInfo.membership
if (m.memberRole >= GroupMemberRole.Admin && m.memberRole >= chatDir.groupMember.memberRole && meta.itemDeleted == null) {
chatInfo.groupInfo to chatDir.groupMember
} else {
null
}
} else {
null
}
}
private val showNtfDir: Boolean get() = !chatDir.sent
val showNotification: Boolean get() =
@@ -1257,6 +1292,8 @@ data class ChatItem (
is CIContent.SndGroupFeature -> showNtfDir
is CIContent.RcvChatFeatureRejected -> showNtfDir
is CIContent.RcvGroupFeatureRejected -> showNtfDir
is CIContent.SndModerated -> true
is CIContent.RcvModerated -> true
is CIContent.InvalidJSON -> false
}
@@ -1271,14 +1308,14 @@ data class ChatItem (
status: CIStatus = CIStatus.SndNew(),
quotedItem: CIQuote? = null,
file: CIFile? = null,
itemDeleted: Boolean = false,
itemDeleted: CIDeleted? = null,
itemEdited: Boolean = false,
itemTimed: CITimed? = null,
editable: Boolean = true
) =
ChatItem(
chatDir = dir,
meta = CIMeta.getSample(id, ts, text, status, itemDeleted, itemEdited, null, editable),
meta = CIMeta.getSample(id, ts, text, status, itemDeleted, itemEdited, itemTimed, editable),
content = CIContent.SndMsgContent(msgContent = MsgContent.MCText(text)),
quotedItem = quotedItem,
file = file
@@ -1293,7 +1330,7 @@ data class ChatItem (
) =
ChatItem(
chatDir = CIDirection.DirectRcv(),
meta = CIMeta.getSample(id, Clock.System.now(), text, CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
meta = CIMeta.getSample(id, Clock.System.now(), text, CIStatus.RcvRead()),
content = CIContent.RcvMsgContent(msgContent = MsgContent.MCFile(text)),
quotedItem = null,
file = CIFile.getSample(fileName = fileName, fileSize = fileSize, fileStatus = fileStatus)
@@ -1308,7 +1345,7 @@ data class ChatItem (
) =
ChatItem(
chatDir = dir,
meta = CIMeta.getSample(id, ts, text, status, itemDeleted = false, itemEdited = false, editable = false),
meta = CIMeta.getSample(id, ts, text, status),
content = CIContent.RcvDeleted(deleteMode = CIDeleteMode.cidmBroadcast),
quotedItem = null,
file = null
@@ -1317,7 +1354,7 @@ data class ChatItem (
fun getGroupInvitationSample(status: CIGroupInvitationStatus = CIGroupInvitationStatus.Pending) =
ChatItem(
chatDir = CIDirection.DirectRcv(),
meta = CIMeta.getSample(1, Clock.System.now(), "received invitation to join group team as admin", CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
meta = CIMeta.getSample(1, Clock.System.now(), "received invitation to join group team as admin", CIStatus.RcvRead()),
content = CIContent.RcvGroupInvitation(groupInvitation = CIGroupInvitation.getSample(status = status), memberRole = GroupMemberRole.Admin),
quotedItem = null,
file = null
@@ -1326,7 +1363,7 @@ data class ChatItem (
fun getGroupEventSample() =
ChatItem(
chatDir = CIDirection.DirectRcv(),
meta = CIMeta.getSample(1, Clock.System.now(), "group event text", CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
meta = CIMeta.getSample(1, Clock.System.now(), "group event text", CIStatus.RcvRead()),
content = CIContent.RcvGroupEventContent(rcvGroupEvent = RcvGroupEvent.MemberAdded(groupMemberId = 1, profile = Profile.sampleData)),
quotedItem = null,
file = null
@@ -1336,7 +1373,7 @@ data class ChatItem (
val content = CIContent.RcvChatFeature(feature = feature, enabled = enabled, param = null)
return ChatItem(
chatDir = CIDirection.DirectRcv(),
meta = CIMeta.getSample(1, Clock.System.now(), content.text, CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
meta = CIMeta.getSample(1, Clock.System.now(), content.text, CIStatus.RcvRead()),
content = content,
quotedItem = null,
file = null
@@ -1356,7 +1393,7 @@ data class ChatItem (
itemStatus = CIStatus.RcvRead(),
createdAt = Clock.System.now(),
updatedAt = Clock.System.now(),
itemDeleted = false,
itemDeleted = null,
itemEdited = false,
itemTimed = null,
itemLive = false,
@@ -1376,7 +1413,7 @@ data class ChatItem (
itemStatus = CIStatus.RcvRead(),
createdAt = Clock.System.now(),
updatedAt = Clock.System.now(),
itemDeleted = false,
itemDeleted = null,
itemEdited = false,
itemTimed = null,
itemLive = true,
@@ -1421,7 +1458,7 @@ data class CIMeta (
val itemStatus: CIStatus,
val createdAt: Instant,
val updatedAt: Instant,
val itemDeleted: Boolean,
val itemDeleted: CIDeleted?,
val itemEdited: Boolean,
val itemTimed: CITimed?,
val itemLive: Boolean?,
@@ -1446,7 +1483,7 @@ data class CIMeta (
companion object {
fun getSample(
id: Long, ts: Instant, text: String, status: CIStatus = CIStatus.SndNew(),
itemDeleted: Boolean = false, itemEdited: Boolean = false, itemTimed: CITimed? = null, itemLive: Boolean = false, editable: Boolean = true
itemDeleted: CIDeleted? = null, itemEdited: Boolean = false, itemTimed: CITimed? = null, itemLive: Boolean = false, editable: Boolean = true
): CIMeta =
CIMeta(
itemId = id,
@@ -1471,7 +1508,7 @@ data class CIMeta (
itemStatus = CIStatus.SndNew(),
createdAt = Clock.System.now(),
updatedAt = Clock.System.now(),
itemDeleted = false,
itemDeleted = null,
itemEdited = false,
itemTimed = null,
itemLive = false,
@@ -1506,6 +1543,12 @@ sealed class CIStatus {
@Serializable @SerialName("rcvRead") class RcvRead: CIStatus()
}
@Serializable
sealed class CIDeleted {
@Serializable @SerialName("deleted") class Deleted: CIDeleted()
@Serializable @SerialName("moderated") class Moderated(val byGroupMember: GroupMember): CIDeleted()
}
@Serializable
enum class CIDeleteMode(val deleteMode: String) {
@SerialName("internal") cidmInternal("internal"),
@@ -1541,6 +1584,8 @@ sealed class CIContent: ItemContent {
@Serializable @SerialName("sndGroupFeature") class SndGroupFeature(val groupFeature: GroupFeature, val preference: GroupPreference, val param: Int? = null): CIContent() { override val msgContent: MsgContent? get() = null }
@Serializable @SerialName("rcvChatFeatureRejected") class RcvChatFeatureRejected(val feature: ChatFeature): CIContent() { override val msgContent: MsgContent? get() = null }
@Serializable @SerialName("rcvGroupFeatureRejected") class RcvGroupFeatureRejected(val groupFeature: GroupFeature): CIContent() { override val msgContent: MsgContent? get() = null }
@Serializable @SerialName("sndModerated") object SndModerated: CIContent() { override val msgContent: MsgContent? get() = null }
@Serializable @SerialName("rcvModerated") object RcvModerated: CIContent() { override val msgContent: MsgContent? get() = null }
@Serializable @SerialName("invalidJSON") data class InvalidJSON(val json: String): CIContent() { override val msgContent: MsgContent? get() = null }
override val text: String get() = when (this) {
@@ -1565,6 +1610,8 @@ sealed class CIContent: ItemContent {
is SndGroupFeature -> featureText(groupFeature, preference.enable.text, param)
is RcvChatFeatureRejected -> "${feature.text}: ${generalGetString(R.string.feature_received_prohibited)}"
is RcvGroupFeatureRejected -> "${groupFeature.text}: ${generalGetString(R.string.feature_received_prohibited)}"
is SndModerated -> generalGetString(R.string.moderated_description)
is RcvModerated -> generalGetString(R.string.moderated_description)
is InvalidJSON -> "invalid data"
}
@@ -44,11 +44,7 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference
private val msgNtfTimeoutMs = 30000L
init {
manager.createNotificationChannel(NotificationChannel(MessageChannel, generalGetString(R.string.ntf_channel_messages), NotificationManager.IMPORTANCE_HIGH))
manager.createNotificationChannel(callNotificationChannel(CallChannel, generalGetString(R.string.ntf_channel_calls)))
// Remove old channels since they can't be edited
manager.deleteNotificationChannel("chat.simplex.app.CALL_NOTIFICATION")
manager.deleteNotificationChannel("chat.simplex.app.LOCK_SCREEN_CALL_NOTIFICATION")
if (manager.areNotificationsEnabled()) createNtfChannelsMaybeShowAlert()
}
enum class NotificationAction {
@@ -156,7 +152,7 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference
.setGroup(MessageGroup)
.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_CHILDREN)
.setGroupSummary(true)
.setContentIntent(chatPendingIntent(ShowChatsAction, user.userId))
.setContentIntent(chatPendingIntent(ShowChatsAction, null))
.build()
with(NotificationManagerCompat.from(context)) {
@@ -250,7 +246,7 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference
}
}
private fun chatPendingIntent(intentAction: String, userId: Long, chatId: String? = null, broadcast: Boolean = false): PendingIntent {
private fun chatPendingIntent(intentAction: String, userId: Long?, chatId: String? = null, broadcast: Boolean = false): PendingIntent {
Log.d(TAG, "chatPendingIntent for $intentAction")
val uniqueInt = (System.currentTimeMillis() and 0xfffffff).toInt()
var intent = Intent(context, if (!broadcast) MainActivity::class.java else NtfActionReceiver::class.java)
@@ -268,6 +264,21 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference
}
}
/**
* This function creates notifications channels. On Android 13+ calling it for the first time will trigger system alert,
* The alert asks a user to allow or disallow to show notifications for the app. That's why it should be called only when the user
* already saw such alert or when you want to trigger showing the alert.
* On the first app launch the channels will be created after user profile is created. Subsequent calls will create new channels and delete
* old ones if needed
* */
fun createNtfChannelsMaybeShowAlert() {
manager.createNotificationChannel(NotificationChannel(MessageChannel, generalGetString(R.string.ntf_channel_messages), NotificationManager.IMPORTANCE_HIGH))
manager.createNotificationChannel(callNotificationChannel(CallChannel, generalGetString(R.string.ntf_channel_calls)))
// Remove old channels since they can't be edited
manager.deleteNotificationChannel("chat.simplex.app.CALL_NOTIFICATION")
manager.deleteNotificationChannel("chat.simplex.app.LOCK_SCREEN_CALL_NOTIFICATION")
}
/**
* Processes every action specified by [NotificationCompat.Builder.addAction] that comes with [NotificationAction]
* and [ChatInfo.id] as [ChatIdKey] in extra
@@ -133,6 +133,7 @@ class AppPreferences(val context: Context) {
val incognito = mkBoolPreference(SHARED_PREFS_INCOGNITO, false)
val connectViaLinkTab = mkStrPreference(SHARED_PREFS_CONNECT_VIA_LINK_TAB, ConnectViaLinkTab.SCAN.name)
val liveMessageAlertShown = mkBoolPreference(SHARED_PREFS_LIVE_MESSAGE_ALERT_SHOWN, false)
val appLanguage = mkStrPreference(SHARED_PREFS_APP_LANGUAGE, null)
val storeDBPassphrase = mkBoolPreference(SHARED_PREFS_STORE_DB_PASSPHRASE, true)
val initialRandomDBPassphrase = mkBoolPreference(SHARED_PREFS_INITIAL_RANDOM_DB_PASSPHRASE, false)
@@ -214,6 +215,7 @@ class AppPreferences(val context: Context) {
private const val SHARED_PREFS_EXPERIMENTAL_CALLS = "ExperimentalCalls"
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"
private const val SHARED_PREFS_CHAT_LAST_START = "ChatLastStart"
private const val SHARED_PREFS_DEVELOPER_TOOLS = "DeveloperTools"
private const val SHARED_PREFS_NETWORK_USE_SOCKS_PROXY = "NetworkUseSocksProxy"
@@ -517,6 +519,13 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
return null
}
suspend fun apiDeleteMemberChatItem(groupId: Long, groupMemberId: Long, itemId: Long): Pair<ChatItem, ChatItem?>? {
val r = sendCmd(CC.ApiDeleteMemberChatItem(groupId, groupMemberId, itemId))
if (r is CR.ChatItemDeleted) return r.deletedChatItem.chatItem to r.toChatItem?.chatItem
Log.e(TAG, "apiDeleteMemberChatItem bad response: ${r.responseType} ${r.details}")
return null
}
private suspend fun getUserSMPServers(): Pair<List<ServerCfg>, List<String>>? {
val userId = chatModel.currentUser.value?.userId ?: run {
Log.e(TAG, "getUserSMPServers: no current user")
@@ -549,7 +558,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
suspend fun testSMPServer(smpServer: String): SMPTestFailure? {
val userId = chatModel.currentUser.value?.userId ?: run { throw Exception("testSMPServer: no current user") }
val r = sendCmd(CC.TestSMPServer(userId, smpServer))
val r = sendCmd(CC.APITestSMPServer(userId, smpServer))
return when (r) {
is CR.SmpTestResult -> r.smpTestFailure
else -> {
@@ -1060,9 +1069,9 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
}
}
suspend fun apiCreateGroupLink(groupId: Long): String? {
return when (val r = sendCmd(CC.APICreateGroupLink(groupId))) {
is CR.GroupLinkCreated -> r.connReqContact
suspend fun apiCreateGroupLink(groupId: Long, memberRole: GroupMemberRole = GroupMemberRole.Member): Pair<String, GroupMemberRole>? {
return when (val r = sendCmd(CC.APICreateGroupLink(groupId, memberRole))) {
is CR.GroupLinkCreated -> r.connReqContact to r.memberRole
else -> {
if (!(networkErrorAlert(r))) {
apiErrorAlert("apiCreateGroupLink", generalGetString(R.string.error_creating_link_for_group), r)
@@ -1072,6 +1081,18 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
}
}
suspend fun apiGroupLinkMemberRole(groupId: Long, memberRole: GroupMemberRole = GroupMemberRole.Member): Pair<String, GroupMemberRole>? {
return when (val r = sendCmd(CC.APIGroupLinkMemberRole(groupId, memberRole))) {
is CR.GroupLink -> r.connReqContact to r.memberRole
else -> {
if (!(networkErrorAlert(r))) {
apiErrorAlert("apiGroupLinkMemberRole", generalGetString(R.string.error_updating_link_for_group), r)
}
null
}
}
}
suspend fun apiDeleteGroupLink(groupId: Long): Boolean {
return when (val r = sendCmd(CC.APIDeleteGroupLink(groupId))) {
is CR.GroupLinkDeleted -> true
@@ -1084,9 +1105,9 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
}
}
suspend fun apiGetGroupLink(groupId: Long): String? {
suspend fun apiGetGroupLink(groupId: Long): Pair<String, GroupMemberRole>? {
return when (val r = sendCmd(CC.APIGetGroupLink(groupId))) {
is CR.GroupLink -> r.connReqContact
is CR.GroupLink -> r.connReqContact to r.memberRole
else -> {
Log.e(TAG, "apiGetGroupLink bad response: ${r.responseType} ${r.details}")
null
@@ -1343,6 +1364,10 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
if (active(r.user)) {
chatModel.updateGroup(r.toGroup)
}
is CR.MemberRole ->
if (active(r.user)) {
chatModel.updateGroup(r.groupInfo)
}
is CR.RcvFileStart ->
chatItemSimpleUpdate(r.user, r.chatItem)
is CR.RcvFileComplete ->
@@ -1744,6 +1769,7 @@ sealed class CC {
class ApiSendMessage(val type: ChatType, val id: Long, val file: String?, val quotedItemId: Long?, val mc: MsgContent, val live: Boolean): CC()
class ApiUpdateChatItem(val type: ChatType, val id: Long, val itemId: Long, val mc: MsgContent, val live: Boolean): CC()
class ApiDeleteChatItem(val type: ChatType, val id: Long, val itemId: Long, val mode: CIDeleteMode): CC()
class ApiDeleteMemberChatItem(val groupId: Long, val groupMemberId: Long, val itemId: Long): CC()
class ApiNewGroup(val userId: Long, val groupProfile: GroupProfile): CC()
class ApiAddMember(val groupId: Long, val contactId: Long, val memberRole: GroupMemberRole): CC()
class ApiJoinGroup(val groupId: Long): CC()
@@ -1752,12 +1778,13 @@ sealed class CC {
class ApiLeaveGroup(val groupId: Long): CC()
class ApiListMembers(val groupId: Long): CC()
class ApiUpdateGroupProfile(val groupId: Long, val groupProfile: GroupProfile): CC()
class APICreateGroupLink(val groupId: Long): CC()
class APICreateGroupLink(val groupId: Long, val memberRole: GroupMemberRole): CC()
class APIGroupLinkMemberRole(val groupId: Long, val memberRole: GroupMemberRole): CC()
class APIDeleteGroupLink(val groupId: Long): CC()
class APIGetGroupLink(val groupId: Long): CC()
class APIGetUserSMPServers(val userId: Long): CC()
class APISetUserSMPServers(val userId: Long, val smpServers: List<ServerCfg>): CC()
class TestSMPServer(val userId: Long, val smpServer: String): CC()
class APITestSMPServer(val userId: Long, val smpServer: String): CC()
class APISetChatItemTTL(val userId: Long, val seconds: Long?): CC()
class APIGetChatItemTTL(val userId: Long): CC()
class APISetNetworkConfig(val networkConfig: NetCfg): CC()
@@ -1819,6 +1846,7 @@ sealed class CC {
is ApiSendMessage -> "/_send ${chatRef(type, id)} live=${onOff(live)} json ${json.encodeToString(ComposedMessage(file, quotedItemId, mc))}"
is ApiUpdateChatItem -> "/_update item ${chatRef(type, id)} $itemId live=${onOff(live)} ${mc.cmdString}"
is ApiDeleteChatItem -> "/_delete item ${chatRef(type, id)} $itemId ${mode.deleteMode}"
is ApiDeleteMemberChatItem -> "/_delete member item #$groupId $groupMemberId $itemId"
is ApiNewGroup -> "/_group $userId ${json.encodeToString(groupProfile)}"
is ApiAddMember -> "/_add #$groupId $contactId ${memberRole.memberRole}"
is ApiJoinGroup -> "/_join #$groupId"
@@ -1827,12 +1855,13 @@ sealed class CC {
is ApiLeaveGroup -> "/_leave #$groupId"
is ApiListMembers -> "/_members #$groupId"
is ApiUpdateGroupProfile -> "/_group_profile #$groupId ${json.encodeToString(groupProfile)}"
is APICreateGroupLink -> "/_create link #$groupId"
is APICreateGroupLink -> "/_create link #$groupId ${memberRole.name.lowercase()}"
is APIGroupLinkMemberRole -> "/_set link role #$groupId ${memberRole.name.lowercase()}"
is APIDeleteGroupLink -> "/_delete link #$groupId"
is APIGetGroupLink -> "/_get link #$groupId"
is APIGetUserSMPServers -> "/_smp $userId"
is APISetUserSMPServers -> "/_smp $userId ${smpServersStr(smpServers)}"
is TestSMPServer -> "/smp test $userId $smpServer"
is APITestSMPServer -> "/_smp test $userId $smpServer"
is APISetChatItemTTL -> "/_ttl $userId ${chatItemTTLStr(seconds)}"
is APIGetChatItemTTL -> "/_ttl $userId"
is APISetNetworkConfig -> "/_network ${json.encodeToString(networkConfig)}"
@@ -1895,6 +1924,7 @@ sealed class CC {
is ApiSendMessage -> "apiSendMessage"
is ApiUpdateChatItem -> "apiUpdateChatItem"
is ApiDeleteChatItem -> "apiDeleteChatItem"
is ApiDeleteMemberChatItem -> "apiDeleteMemberChatItem"
is ApiNewGroup -> "apiNewGroup"
is ApiAddMember -> "apiAddMember"
is ApiJoinGroup -> "apiJoinGroup"
@@ -1904,11 +1934,12 @@ sealed class CC {
is ApiListMembers -> "apiListMembers"
is ApiUpdateGroupProfile -> "apiUpdateGroupProfile"
is APICreateGroupLink -> "apiCreateGroupLink"
is APIGroupLinkMemberRole -> "apiGroupLinkMemberRole"
is APIDeleteGroupLink -> "apiDeleteGroupLink"
is APIGetGroupLink -> "apiGetGroupLink"
is APIGetUserSMPServers -> "apiGetUserSMPServers"
is APISetUserSMPServers -> "apiSetUserSMPServers"
is TestSMPServer -> "testSMPServer"
is APITestSMPServer -> "testSMPServer"
is APISetChatItemTTL -> "apiSetChatItemTTL"
is APIGetChatItemTTL -> "apiGetChatItemTTL"
is APISetNetworkConfig -> "/apiSetNetworkConfig"
@@ -2925,8 +2956,8 @@ sealed class CR {
@Serializable @SerialName("connectedToGroupMember") class ConnectedToGroupMember(val user: User, val groupInfo: GroupInfo, val member: GroupMember): CR()
@Serializable @SerialName("groupRemoved") class GroupRemoved(val user: User, val groupInfo: GroupInfo): CR() // unused
@Serializable @SerialName("groupUpdated") class GroupUpdated(val user: User, val toGroup: GroupInfo): CR()
@Serializable @SerialName("groupLinkCreated") class GroupLinkCreated(val user: User, val groupInfo: GroupInfo, val connReqContact: String): CR()
@Serializable @SerialName("groupLink") class GroupLink(val user: User, val groupInfo: GroupInfo, val connReqContact: String): CR()
@Serializable @SerialName("groupLinkCreated") class GroupLinkCreated(val user: User, val groupInfo: GroupInfo, val connReqContact: String, val memberRole: GroupMemberRole): CR()
@Serializable @SerialName("groupLink") class GroupLink(val user: User, val groupInfo: GroupInfo, val connReqContact: String, val memberRole: GroupMemberRole): CR()
@Serializable @SerialName("groupLinkDeleted") class GroupLinkDeleted(val user: User, val groupInfo: GroupInfo): CR()
// receiving file events
@Serializable @SerialName("rcvFileAccepted") class RcvFileAccepted(val user: User, val chatItem: AChatItem): CR()
@@ -3129,8 +3160,8 @@ sealed class CR {
is ConnectedToGroupMember -> withUser(user, "groupInfo: $groupInfo\nmember: $member")
is GroupRemoved -> withUser(user, json.encodeToString(groupInfo))
is GroupUpdated -> withUser(user, json.encodeToString(toGroup))
is GroupLinkCreated -> withUser(user, "groupInfo: $groupInfo\nconnReqContact: $connReqContact")
is GroupLink -> withUser(user, "groupInfo: $groupInfo\nconnReqContact: $connReqContact")
is GroupLinkCreated -> withUser(user, "groupInfo: $groupInfo\nconnReqContact: $connReqContact\nmemberRole: $memberRole")
is GroupLink -> withUser(user, "groupInfo: $groupInfo\nconnReqContact: $connReqContact\nmemberRole: $memberRole")
is GroupLinkDeleted -> withUser(user, json.encodeToString(groupInfo))
is RcvFileAcceptedSndCancelled -> withUser(user, noDetails())
is RcvFileAccepted -> withUser(user, json.encodeToString(chatItem))
@@ -17,6 +17,7 @@ enum class DefaultTheme {
val DEFAULT_PADDING = 16.dp
val DEFAULT_SPACE_AFTER_ICON = 4.dp
val DEFAULT_PADDING_HALF = DEFAULT_PADDING / 2
val DEFAULT_BOTTOM_PADDING = 48.dp
val DarkColorPalette = darkColors(
primary = SimplexBlue, // If this value changes also need to update #0088ff in string resource files
@@ -83,6 +83,8 @@ fun TerminalLayout(
liveMessageAlertShown = SharedPreference(get = { false }, set = {}),
needToAllowVoiceToContact = false,
allowedVoiceByPrefs = false,
userIsObserver = false,
userCanSend = true,
allowVoiceToContact = {},
sendMessage = sendCommand,
sendLiveMessage = null,
@@ -21,8 +21,8 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import chat.simplex.app.*
import chat.simplex.app.R
import chat.simplex.app.SimplexService
import chat.simplex.app.model.ChatModel
import chat.simplex.app.model.Profile
import chat.simplex.app.ui.theme.*
@@ -116,6 +116,7 @@ fun createProfile(chatModel: ChatModel, displayName: String, fullName: String, c
if (chatModel.users.isEmpty()) {
chatModel.controller.startChat(user)
chatModel.onboardingStage.value = OnboardingStage.Step3_SetNotificationsMode
SimplexApp.context.chatModel.controller.ntfManager.createNtfChannelsMaybeShowAlert()
} else {
val users = chatModel.controller.listUsers()
chatModel.users.clear()
@@ -3,11 +3,12 @@ package chat.simplex.app.views.call
import android.Manifest
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.content.*
import android.content.pm.ActivityInfo
import android.media.AudioDeviceInfo
import android.media.AudioManager
import android.media.*
import android.os.Build
import android.os.PowerManager
import android.os.PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK
import android.util.Log
import android.view.ViewGroup
import android.webkit.*
@@ -19,6 +20,7 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.material.icons.outlined.*
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
@@ -37,7 +39,7 @@ import androidx.webkit.WebViewClientCompat
import chat.simplex.app.*
import chat.simplex.app.R
import chat.simplex.app.model.*
import chat.simplex.app.ui.theme.SimpleXTheme
import chat.simplex.app.ui.theme.*
import chat.simplex.app.views.helpers.ProfileImage
import chat.simplex.app.views.helpers.withApi
import chat.simplex.app.views.usersettings.NotificationsMode
@@ -53,6 +55,7 @@ fun ActiveCallView(chatModel: ChatModel) {
val call = chatModel.activeCall.value
if (call != null) withApi { chatModel.callManager.endCall(call) }
})
val audioViaBluetooth = rememberSaveable { mutableStateOf(false) }
val ntfModeService = remember { chatModel.controller.appPrefs.notificationsMode.get() == NotificationsMode.SERVICE.name }
LaunchedEffect(Unit) {
// Start service when call happening since it's not already started.
@@ -60,17 +63,48 @@ fun ActiveCallView(chatModel: ChatModel) {
if (!ntfModeService) SimplexService.start(SimplexApp.context)
}
DisposableEffect(Unit) {
val am = SimplexApp.context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
var btDeviceCount = 0
val audioCallback = object: AudioDeviceCallback() {
override fun onAudioDevicesAdded(addedDevices: Array<out AudioDeviceInfo>) {
Log.d(TAG, "Added audio devices: ${addedDevices.map { it.type }}")
super.onAudioDevicesAdded(addedDevices)
val addedCount = addedDevices.count { it.type == AudioDeviceInfo.TYPE_BLUETOOTH_SCO }
btDeviceCount += addedCount
audioViaBluetooth.value = btDeviceCount > 0
if (addedCount > 0 && chatModel.activeCall.value?.callState == CallState.Connected) {
// Setting params in Connected state makes sure that Bluetooth will NOT be broken on Android < 12
setCallSound(chatModel.activeCall.value?.soundSpeaker ?: return, audioViaBluetooth)
}
}
override fun onAudioDevicesRemoved(removedDevices: Array<out AudioDeviceInfo>) {
Log.d(TAG, "Removed audio devices: ${removedDevices.map { it.type }}")
super.onAudioDevicesRemoved(removedDevices)
val removedCount = removedDevices.count { it.type == AudioDeviceInfo.TYPE_BLUETOOTH_SCO }
btDeviceCount -= removedCount
audioViaBluetooth.value = btDeviceCount > 0
if (btDeviceCount == 0 && chatModel.activeCall.value?.callState == CallState.Connected) {
// Setting params in Connected state makes sure that Bluetooth will NOT be broken on Android < 12
setCallSound(chatModel.activeCall.value?.soundSpeaker ?: return, audioViaBluetooth)
}
}
}
am.registerAudioDeviceCallback(audioCallback, null)
val pm = (SimplexApp.context.getSystemService(Context.POWER_SERVICE) as PowerManager)
val proximityLock = if (pm.isWakeLockLevelSupported(PROXIMITY_SCREEN_OFF_WAKE_LOCK)) {
pm.newWakeLock(PROXIMITY_SCREEN_OFF_WAKE_LOCK, "proximityLock")
} else {
null
}
proximityLock?.acquire()
onDispose {
// Stop it when call ended
if (!ntfModeService) SimplexService.safeStopService(SimplexApp.context)
// Clear selected communication device to default value after we changed it in call
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
val am = SimplexApp.context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
am.clearCommunicationDevice()
}
dropAudioManagerOverrides()
am.unregisterAudioDeviceCallback(audioCallback)
proximityLock?.release()
}
}
val cxt = LocalContext.current
val scope = rememberCoroutineScope()
Box(Modifier.fillMaxSize()) {
WebRTCView(chatModel.callCommand) { apiMsg ->
@@ -100,6 +134,7 @@ fun ActiveCallView(chatModel: ChatModel) {
val callStatus = json.decodeFromString<WebRTCCallStatus>("\"${r.state.connectionState}\"")
if (callStatus == WebRTCCallStatus.Connected) {
chatModel.activeCall.value = call.copy(callState = CallState.Connected)
setCallSound(call.soundSpeaker, audioViaBluetooth)
}
withApi { chatModel.controller.apiCallStatus(call.contact, callStatus) }
} catch (e: Error) {
@@ -108,8 +143,7 @@ fun ActiveCallView(chatModel: ChatModel) {
is WCallResponse.Connected -> {
chatModel.activeCall.value = call.copy(callState = CallState.Connected, connectionInfo = r.connectionInfo)
scope.launch {
delay(2000L)
setCallSound(cxt, call)
setCallSound(call.soundSpeaker, audioViaBluetooth)
}
}
is WCallResponse.Ended -> {
@@ -143,15 +177,18 @@ fun ActiveCallView(chatModel: ChatModel) {
}
}
val call = chatModel.activeCall.value
if (call != null) ActiveCallOverlay(call, chatModel)
if (call != null) ActiveCallOverlay(call, chatModel, audioViaBluetooth)
}
val context = LocalContext.current
DisposableEffect(Unit) {
val activity = context as? Activity ?: return@DisposableEffect onDispose {}
val prevVolumeControlStream = activity.volumeControlStream
activity.volumeControlStream = AudioManager.STREAM_VOICE_CALL
// Lock orientation to portrait in order to have good experience with calls
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
onDispose {
activity.volumeControlStream = prevVolumeControlStream
// Unlock orientation
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
}
@@ -159,10 +196,10 @@ fun ActiveCallView(chatModel: ChatModel) {
}
@Composable
private fun ActiveCallOverlay(call: Call, chatModel: ChatModel) {
var cxt = LocalContext.current
private fun ActiveCallOverlay(call: Call, chatModel: ChatModel, audioViaBluetooth: MutableState<Boolean>) {
ActiveCallOverlayLayout(
call = call,
speakerCanBeEnabled = !audioViaBluetooth.value,
dismiss = { withApi { chatModel.callManager.endCall(call) } },
toggleAudio = { chatModel.callCommand.value = WCallCommand.Media(CallMediaType.Audio, enable = !call.audioEnabled) },
toggleVideo = { chatModel.callCommand.value = WCallCommand.Media(CallMediaType.Video, enable = !call.videoEnabled) },
@@ -171,38 +208,55 @@ private fun ActiveCallOverlay(call: Call, chatModel: ChatModel) {
if (call != null) {
call = call.copy(soundSpeaker = !call.soundSpeaker)
chatModel.activeCall.value = call
setCallSound(cxt, call)
setCallSound(call.soundSpeaker, audioViaBluetooth)
}
},
flipCamera = { chatModel.callCommand.value = WCallCommand.Camera(call.localCamera.flipped) }
)
}
private fun setCallSound(cxt: Context, call: Call) {
Log.d(TAG, "setCallSound: set audio mode")
val am = cxt.getSystemService(Context.AUDIO_SERVICE) as AudioManager
if (call.soundSpeaker) {
am.mode = AudioManager.MODE_NORMAL
am.isSpeakerphoneOn = true
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
am.availableCommunicationDevices.firstOrNull { it.type == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER }?.let {
private fun setCallSound(speaker: Boolean, audioViaBluetooth: MutableState<Boolean>) {
val am = SimplexApp.context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
Log.d(TAG, "setCallSound: set audio mode, speaker enabled: $speaker")
am.mode = AudioManager.MODE_IN_COMMUNICATION
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
val btDevice = am.availableCommunicationDevices.lastOrNull { it.type == AudioDeviceInfo.TYPE_BLUETOOTH_SCO }
val preferredSecondaryDevice = if (speaker) AudioDeviceInfo.TYPE_BUILTIN_SPEAKER else AudioDeviceInfo.TYPE_BUILTIN_EARPIECE
if (btDevice != null) {
am.setCommunicationDevice(btDevice)
} else if (am.communicationDevice?.type != preferredSecondaryDevice) {
am.availableCommunicationDevices.firstOrNull { it.type == preferredSecondaryDevice }?.let {
am.setCommunicationDevice(it)
}
}
} else {
am.mode = AudioManager.MODE_IN_CALL
am.isSpeakerphoneOn = false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
am.availableCommunicationDevices.firstOrNull { it.type == AudioDeviceInfo.TYPE_BUILTIN_EARPIECE }?.let {
am.setCommunicationDevice(it)
}
if (audioViaBluetooth.value) {
am.isSpeakerphoneOn = false
am.startBluetoothSco()
} else {
am.stopBluetoothSco()
am.isSpeakerphoneOn = speaker
}
am.isBluetoothScoOn = am.isBluetoothScoAvailableOffCall && audioViaBluetooth.value
}
}
private fun dropAudioManagerOverrides() {
val am = SimplexApp.context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
am.mode = AudioManager.MODE_NORMAL
// Clear selected communication device to default value after we changed it in call
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
am.clearCommunicationDevice()
} else {
am.isSpeakerphoneOn = false
am.stopBluetoothSco()
}
}
@Composable
private fun ActiveCallOverlayLayout(
call: Call,
speakerCanBeEnabled: Boolean,
dismiss: () -> Unit,
toggleAudio: () -> Unit,
toggleVideo: () -> Unit,
@@ -240,7 +294,7 @@ private fun ActiveCallOverlayLayout(
CallInfoView(call, alignment = Alignment.CenterHorizontally)
}
Spacer(Modifier.fillMaxHeight().weight(1f))
Box(Modifier.fillMaxWidth().padding(bottom = 48.dp), contentAlignment = Alignment.CenterStart) {
Box(Modifier.fillMaxWidth().padding(bottom = DEFAULT_BOTTOM_PADDING), contentAlignment = Alignment.CenterStart) {
Box(Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) {
IconButton(onClick = dismiss) {
Icon(Icons.Filled.CallEnd, stringResource(R.string.icon_descr_hang_up), tint = Color.Red, modifier = Modifier.size(64.dp))
@@ -251,7 +305,7 @@ private fun ActiveCallOverlayLayout(
}
Box(Modifier.fillMaxWidth(), contentAlignment = Alignment.CenterEnd) {
Box(Modifier.padding(end = 32.dp)) {
ToggleSoundButton(call, toggleSound)
ToggleSoundButton(call, speakerCanBeEnabled, toggleSound)
}
}
}
@@ -261,10 +315,10 @@ private fun ActiveCallOverlayLayout(
}
@Composable
private fun ControlButton(call: Call, icon: ImageVector, @StringRes iconText: Int, action: () -> Unit) {
private fun ControlButton(call: Call, icon: ImageVector, @StringRes iconText: Int, action: () -> Unit, enabled: Boolean = true) {
if (call.hasMedia) {
IconButton(onClick = action) {
Icon(icon, stringResource(iconText), tint = Color(0xFFFFFFD8), modifier = Modifier.size(40.dp))
IconButton(onClick = action, enabled = enabled) {
Icon(icon, stringResource(iconText), tint = if (enabled) Color(0xFFFFFFD8) else HighOrLowlight, modifier = Modifier.size(40.dp))
}
} else {
Spacer(Modifier.size(40.dp))
@@ -281,11 +335,11 @@ private fun ToggleAudioButton(call: Call, toggleAudio: () -> Unit) {
}
@Composable
private fun ToggleSoundButton(call: Call, toggleSound: () -> Unit) {
private fun ToggleSoundButton(call: Call, enabled: Boolean, toggleSound: () -> Unit) {
if (call.soundSpeaker) {
ControlButton(call, Icons.Outlined.VolumeUp, R.string.icon_descr_speaker_off, toggleSound)
ControlButton(call, Icons.Outlined.VolumeUp, R.string.icon_descr_speaker_off, toggleSound, enabled)
} else {
ControlButton(call, Icons.Outlined.VolumeDown, R.string.icon_descr_speaker_on, toggleSound)
ControlButton(call, Icons.Outlined.VolumeDown, R.string.icon_descr_speaker_on, toggleSound, enabled)
}
}
@@ -485,6 +539,7 @@ fun PreviewActiveCallOverlayVideo() {
RTCIceCandidate(RTCIceCandidateType.Host, "tcp", null)
)
),
speakerCanBeEnabled = true,
dismiss = {},
toggleAudio = {},
toggleVideo = {},
@@ -509,6 +564,7 @@ fun PreviewActiveCallOverlayAudio() {
RTCIceCandidate(RTCIceCandidateType.Host, "udp", null)
)
),
speakerCanBeEnabled = true,
dismiss = {},
toggleAudio = {},
toggleVideo = {},
@@ -152,9 +152,14 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: () -> Unit) {
}
} else if (chat.chatInfo is ChatInfo.Group) {
setGroupMembers(chat.chatInfo.groupInfo, chatModel)
var groupLink = chatModel.controller.apiGetGroupLink(chat.chatInfo.groupInfo.groupId)
val link = chatModel.controller.apiGetGroupLink(chat.chatInfo.groupInfo.groupId)
var groupLink = link?.first
var groupLinkMemberRole = link?.second
ModalManager.shared.showModalCloseable(true) { close ->
GroupChatInfoView(chatModel, groupLink, { groupLink = it }, close)
GroupChatInfoView(chatModel, groupLink, groupLinkMemberRole, {
groupLink = it.first;
groupLinkMemberRole = it.second
}, close)
}
}
}
@@ -193,19 +198,34 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: () -> Unit) {
deleteMessage = { itemId, mode ->
withApi {
val cInfo = chat.chatInfo
val r = chatModel.controller.apiDeleteChatItem(
type = cInfo.chatType,
id = cInfo.apiId,
itemId = itemId,
mode = mode
)
if (r != null) {
val toChatItem = r.toChatItem
if (toChatItem == null) {
chatModel.removeChatItem(cInfo, r.deletedChatItem.chatItem)
} else {
chatModel.upsertChatItem(cInfo, toChatItem.chatItem)
}
val toDeleteItem = chatModel.chatItems.firstOrNull { it.id == itemId }
val toModerate = toDeleteItem?.memberToModerate(chat.chatInfo)
val groupInfo = toModerate?.first
val groupMember = toModerate?.second
val deletedChatItem: ChatItem?
val toChatItem: ChatItem?
if (groupInfo != null && groupMember != null) {
val r = chatModel.controller.apiDeleteMemberChatItem(
groupId = groupInfo.groupId,
groupMemberId = groupMember.groupMemberId,
itemId = itemId
)
deletedChatItem = r?.first
toChatItem = r?.second
} else {
val r = chatModel.controller.apiDeleteChatItem(
type = cInfo.chatType,
id = cInfo.apiId,
itemId = itemId,
mode = mode
)
deletedChatItem = r?.deletedChatItem?.chatItem
toChatItem = r?.toChatItem?.chatItem
}
if (toChatItem == null && deletedChatItem != null) {
chatModel.removeChatItem(cInfo, deletedChatItem)
} else if (toChatItem != null) {
chatModel.upsertChatItem(cInfo, toChatItem)
}
}
},
@@ -674,10 +694,18 @@ private fun ScrollToBottom(chatId: ChatId, listState: LazyListState, chatItems:
.distinctUntilChanged()
.filter { listState.layoutInfo.visibleItemsInfo.firstOrNull()?.key != it }
.collect {
if (listState.firstVisibleItemIndex == 0) {
listState.animateScrollToItem(0)
} else {
listState.animateScrollBy(scrollDistance)
try {
if (listState.firstVisibleItemIndex == 0) {
listState.animateScrollToItem(0)
} else {
listState.animateScrollBy(scrollDistance)
}
} catch (e: CancellationException) {
/**
* When you tap and hold a finger on a lazy column with chatItems, and then you receive a message,
* this coroutine will be canceled with the message "Current mutation had a higher priority" because of animatedScroll.
* Which breaks auto-scrolling to bottom. So just ignoring the exception
* */
}
}
}
@@ -17,6 +17,7 @@ import android.util.Log
import android.widget.Toast
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContract
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.*
@@ -32,6 +33,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat
import chat.simplex.app.*
@@ -645,6 +647,9 @@ fun ComposeView(
chatModel.sharedContent.value = null
}
val userCanSend = rememberUpdatedState(chat.userCanSend)
val userIsObserver = rememberUpdatedState(chat.userIsObserver)
Column {
contextItemView()
when {
@@ -656,11 +661,11 @@ fun ComposeView(
modifier = Modifier.padding(end = 8.dp),
verticalAlignment = Alignment.Bottom,
) {
IconButton(showChooseAttachment, enabled = !composeState.value.attachmentDisabled) {
IconButton(showChooseAttachment, enabled = !composeState.value.attachmentDisabled && rememberUpdatedState(chat.userCanSend).value) {
Icon(
Icons.Filled.AttachFile,
contentDescription = stringResource(R.string.attach),
tint = if (!composeState.value.attachmentDisabled) MaterialTheme.colors.primary else HighOrLowlight,
tint = if (!composeState.value.attachmentDisabled && userCanSend.value) MaterialTheme.colors.primary else HighOrLowlight,
modifier = Modifier
.size(28.dp)
.clip(CircleShape)
@@ -698,6 +703,13 @@ fun ComposeView(
}
}
LaunchedEffect(rememberUpdatedState(chat.userCanSend).value) {
if (!chat.userCanSend) {
clearCurrentDraft()
clearState()
}
}
val activity = LocalContext.current as Activity
DisposableEffect(Unit) {
val orientation = activity.resources.configuration.orientation
@@ -733,6 +745,8 @@ fun ComposeView(
needToAllowVoiceToContact,
allowedVoiceByPrefs,
allowVoiceToContact = ::allowVoiceToContact,
userIsObserver = userIsObserver.value,
userCanSend = userCanSend.value,
sendMessage = {
sendMessage()
resetLinkPreview()
@@ -60,6 +60,8 @@ fun SendMsgView(
liveMessageAlertShown: SharedPreference<Boolean>,
needToAllowVoiceToContact: Boolean,
allowedVoiceByPrefs: Boolean,
userIsObserver: Boolean,
userCanSend: Boolean,
allowVoiceToContact: () -> Unit,
sendMessage: () -> Unit,
sendLiveMessage: (suspend () -> Unit)? = null,
@@ -74,10 +76,18 @@ fun SendMsgView(
val showVoiceButton = cs.message.isEmpty() && showVoiceRecordIcon && !composeState.value.editing &&
cs.liveMessage == null && (cs.preview is ComposePreview.NoPreview || recState.value is RecordingState.Started)
val showDeleteTextButton = rememberSaveable { mutableStateOf(false) }
NativeKeyboard(composeState, textStyle, showDeleteTextButton, onMessageChange)
NativeKeyboard(composeState, textStyle, showDeleteTextButton, userIsObserver, onMessageChange)
// Disable clicks on text field
if (cs.preview is ComposePreview.VoicePreview) {
Box(Modifier.matchParentSize().clickable(enabled = false, onClick = { }))
if (cs.preview is ComposePreview.VoicePreview || !userCanSend) {
Box(Modifier
.matchParentSize()
.clickable(enabled = !userCanSend, indication = null, interactionSource = remember { MutableInteractionSource() }, onClick = {
AlertManager.shared.showAlertMsg(
title = generalGetString(R.string.observer_cant_send_message_title),
text = generalGetString(R.string.observer_cant_send_message_desc)
)
})
)
}
if (showDeleteTextButton.value) {
DeleteTextButton(composeState)
@@ -99,11 +109,11 @@ fun SendMsgView(
Row(verticalAlignment = Alignment.CenterVertically) {
val stopRecOnNextClick = remember { mutableStateOf(false) }
when {
needToAllowVoiceToContact || !allowedVoiceByPrefs -> {
DisallowedVoiceButton {
needToAllowVoiceToContact || !allowedVoiceByPrefs || !userCanSend -> {
DisallowedVoiceButton(userCanSend) {
if (needToAllowVoiceToContact) {
showNeedToAllowVoiceAlert(allowVoiceToContact)
} else {
} else if (!allowedVoiceByPrefs) {
showDisabledVoiceAlert(isDirectChat)
}
}
@@ -118,7 +128,7 @@ fun SendMsgView(
&& (cs.preview !is ComposePreview.VoicePreview || !stopRecOnNextClick.value)
&& cs.contextItem is ComposeContextItem.NoContextItem) {
Spacer(Modifier.width(10.dp))
StartLiveMessageButton {
StartLiveMessageButton(userCanSend) {
if (composeState.value.preview is ComposePreview.NoPreview) {
startLiveMessage(scope, sendLiveMessage, updateLiveMessage, sendButtonSize, sendButtonAlpha, composeState, liveMessageAlertShown)
}
@@ -173,6 +183,7 @@ private fun NativeKeyboard(
composeState: MutableState<ComposeState>,
textStyle: MutableState<TextStyle>,
showDeleteTextButton: MutableState<Boolean>,
userIsObserver: Boolean,
onMessageChange: (String) -> Unit
) {
val cs = composeState.value
@@ -253,15 +264,22 @@ private fun NativeKeyboard(
showDeleteTextButton.value = it.lineCount >= 4
}
if (composeState.value.preview is ComposePreview.VoicePreview) {
Text(
generalGetString(R.string.voice_message_send_text),
Modifier.padding(padding),
color = HighOrLowlight,
style = textStyle.value.copy(fontStyle = FontStyle.Italic)
)
ComposeOverlay(R.string.voice_message_send_text, textStyle, padding)
} else if (userIsObserver) {
ComposeOverlay(R.string.you_are_observer, textStyle, padding)
}
}
@Composable
private fun ComposeOverlay(textId: Int, textStyle: MutableState<TextStyle>, padding: PaddingValues) {
Text(
generalGetString(textId),
Modifier.padding(padding),
color = HighOrLowlight,
style = textStyle.value.copy(fontStyle = FontStyle.Italic)
)
}
@Composable
private fun BoxScope.DeleteTextButton(composeState: MutableState<ComposeState>) {
IconButton(
@@ -322,8 +340,8 @@ private fun RecordVoiceView(recState: MutableState<RecordingState>, stopRecOnNex
}
@Composable
private fun DisallowedVoiceButton(onClick: () -> Unit) {
IconButton(onClick, Modifier.size(36.dp)) {
private fun DisallowedVoiceButton(enabled: Boolean, onClick: () -> Unit) {
IconButton(onClick, Modifier.size(36.dp), enabled = enabled) {
Icon(
Icons.Outlined.KeyboardVoice,
stringResource(R.string.icon_descr_record_voice_message),
@@ -454,13 +472,13 @@ private fun SendMsgButton(
}
@Composable
private fun StartLiveMessageButton(onClick: () -> Unit) {
private fun StartLiveMessageButton(enabled: Boolean, onClick: () -> Unit) {
val interactionSource = remember { MutableInteractionSource() }
Box(
modifier = Modifier.requiredSize(36.dp)
.clickable(
onClick = onClick,
enabled = true,
enabled = enabled,
role = Role.Button,
interactionSource = interactionSource,
indication = rememberRipple(bounded = false, radius = 24.dp)
@@ -470,7 +488,7 @@ private fun StartLiveMessageButton(onClick: () -> Unit) {
Icon(
Icons.Filled.Bolt,
stringResource(R.string.icon_descr_send_message),
tint = MaterialTheme.colors.primary,
tint = if (enabled) MaterialTheme.colors.primary else HighOrLowlight,
modifier = Modifier
.size(36.dp)
.padding(4.dp)
@@ -571,6 +589,8 @@ fun PreviewSendMsgView() {
liveMessageAlertShown = SharedPreference(get = { true }, set = { }),
needToAllowVoiceToContact = false,
allowedVoiceByPrefs = true,
userIsObserver = false,
userCanSend = true,
allowVoiceToContact = {},
sendMessage = {},
onMessageChange = { _ -> },
@@ -599,6 +619,8 @@ fun PreviewSendMsgViewEditing() {
liveMessageAlertShown = SharedPreference(get = { true }, set = { }),
needToAllowVoiceToContact = false,
allowedVoiceByPrefs = true,
userIsObserver = false,
userCanSend = true,
allowVoiceToContact = {},
sendMessage = {},
onMessageChange = { _ -> },
@@ -627,6 +649,8 @@ fun PreviewSendMsgViewInProgress() {
liveMessageAlertShown = SharedPreference(get = { true }, set = { }),
needToAllowVoiceToContact = false,
allowedVoiceByPrefs = true,
userIsObserver = false,
userCanSend = true,
allowVoiceToContact = {},
sendMessage = {},
onMessageChange = { _ -> },
@@ -34,7 +34,7 @@ import chat.simplex.app.views.helpers.*
import chat.simplex.app.views.usersettings.*
@Composable
fun GroupChatInfoView(chatModel: ChatModel, groupLink: String?, onGroupLinkUpdated: (String?) -> Unit, close: () -> Unit) {
fun GroupChatInfoView(chatModel: ChatModel, groupLink: String?, groupLinkMemberRole: GroupMemberRole?, onGroupLinkUpdated: (Pair<String?, GroupMemberRole?>) -> Unit, close: () -> Unit) {
BackHandler(onBack = close)
val chat = chatModel.chats.firstOrNull { it.id == chatModel.chatId.value }
val developerTools = chatModel.controller.appPrefs.developerTools.get()
@@ -82,6 +82,9 @@ fun GroupChatInfoView(chatModel: ChatModel, groupLink: String?, onGroupLinkUpdat
editGroupProfile = {
ModalManager.shared.showCustomModal { close -> GroupProfileView(groupInfo, chatModel, close) }
},
addOrEditWelcomeMessage = {
ModalManager.shared.showCustomModal { close -> GroupWelcomeView(chatModel, groupInfo, close) }
},
openPreferences = {
ModalManager.shared.showCustomModal { close ->
GroupPreferencesView(
@@ -95,9 +98,7 @@ fun GroupChatInfoView(chatModel: ChatModel, groupLink: String?, onGroupLinkUpdat
clearChat = { clearChatDialog(chat.chatInfo, chatModel, close) },
leaveGroup = { leaveGroupDialog(groupInfo, chatModel, close) },
manageGroupLink = {
withApi {
ModalManager.shared.showModal { GroupLinkView(chatModel, groupInfo, groupLink, onGroupLinkUpdated) }
}
ModalManager.shared.showModal { GroupLinkView(chatModel, groupInfo, groupLink, groupLinkMemberRole, onGroupLinkUpdated) }
}
)
}
@@ -149,6 +150,7 @@ fun GroupChatInfoLayout(
addMembers: () -> Unit,
showMemberInfo: (GroupMember) -> Unit,
editGroupProfile: () -> Unit,
addOrEditWelcomeMessage: () -> Unit,
openPreferences: () -> Unit,
deleteGroup: () -> Unit,
clearChat: () -> Unit,
@@ -173,6 +175,8 @@ fun GroupChatInfoLayout(
if (groupInfo.canEdit) {
SectionItemView(editGroupProfile) { EditGroupProfileButton() }
SectionDivider()
SectionItemView(addOrEditWelcomeMessage) { AddOrEditWelcomeMessage(groupInfo.groupProfile.description) }
SectionDivider()
}
GroupPreferencesButton(openPreferences)
}
@@ -300,6 +304,7 @@ private fun MemberRow(member: GroupMember, user: Boolean = false) {
verticalAlignment = Alignment.CenterVertically
) {
Row(
Modifier.weight(1f).padding(end = DEFAULT_PADDING),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(4.dp)
) {
@@ -388,6 +393,28 @@ fun EditGroupProfileButton() {
}
}
@Composable
private fun AddOrEditWelcomeMessage(welcomeMessage: String?) {
val text = if (welcomeMessage == null) {
stringResource(R.string.button_add_welcome_message)
} else {
stringResource(R.string.button_welcome_message)
}
Row(
Modifier
.fillMaxSize(),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
Icons.Outlined.MapsUgc,
text,
tint = HighOrLowlight
)
Spacer(Modifier.size(8.dp))
Text(text)
}
}
@Composable
private fun LeaveGroupButton() {
Row(
@@ -433,7 +460,7 @@ fun PreviewGroupChatInfoLayout() {
members = listOf(GroupMember.sampleData, GroupMember.sampleData, GroupMember.sampleData),
developerTools = false,
groupLink = null,
addMembers = {}, showMemberInfo = {}, editGroupProfile = {}, openPreferences = {}, deleteGroup = {}, clearChat = {}, leaveGroup = {}, manageGroupLink = {},
addMembers = {}, showMemberInfo = {}, editGroupProfile = {}, addOrEditWelcomeMessage = {}, openPreferences = {}, deleteGroup = {}, clearChat = {}, leaveGroup = {}, manageGroupLink = {},
)
}
}
@@ -1,6 +1,9 @@
package chat.simplex.app.views.chat.group
import SectionItemView
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.CircularProgressIndicator
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons
@@ -15,22 +18,26 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import chat.simplex.app.R
import chat.simplex.app.model.ChatModel
import chat.simplex.app.model.GroupInfo
import chat.simplex.app.model.*
import chat.simplex.app.ui.theme.*
import chat.simplex.app.views.helpers.*
import chat.simplex.app.views.newchat.QRCode
@Composable
fun GroupLinkView(chatModel: ChatModel, groupInfo: GroupInfo, connReqContact: String?, onGroupLinkUpdated: (String?) -> Unit) {
fun GroupLinkView(chatModel: ChatModel, groupInfo: GroupInfo, connReqContact: String?, memberRole: GroupMemberRole?, onGroupLinkUpdated: (Pair<String?, GroupMemberRole?>) -> Unit) {
var groupLink by rememberSaveable { mutableStateOf(connReqContact) }
val groupLinkMemberRole = rememberSaveable { mutableStateOf(memberRole) }
var creatingLink by rememberSaveable { mutableStateOf(false) }
val cxt = LocalContext.current
fun createLink() {
creatingLink = true
withApi {
groupLink = chatModel.controller.apiCreateGroupLink(groupInfo.groupId)
onGroupLinkUpdated(groupLink)
val link = chatModel.controller.apiCreateGroupLink(groupInfo.groupId)
if (link != null) {
groupLink = link.first
groupLinkMemberRole.value = link.second
onGroupLinkUpdated(groupLink to groupLinkMemberRole.value)
}
creatingLink = false
}
}
@@ -41,9 +48,24 @@ fun GroupLinkView(chatModel: ChatModel, groupInfo: GroupInfo, connReqContact: St
}
GroupLinkLayout(
groupLink = groupLink,
groupInfo,
groupLinkMemberRole,
creatingLink,
createLink = ::createLink,
share = { shareText(cxt, groupLink ?: return@GroupLinkLayout) },
updateLink = {
val role = groupLinkMemberRole.value
if (role != null) {
withBGApi {
val link = chatModel.controller.apiGroupLinkMemberRole(groupInfo.groupId, role)
if (link != null) {
groupLink = link.first
groupLinkMemberRole.value = link.second
onGroupLinkUpdated(groupLink to groupLinkMemberRole.value)
}
}
}
},
deleteLink = {
AlertManager.shared.showAlertMsg(
title = generalGetString(R.string.delete_link_question),
@@ -54,7 +76,7 @@ fun GroupLinkView(chatModel: ChatModel, groupInfo: GroupInfo, connReqContact: St
val r = chatModel.controller.apiDeleteGroupLink(groupInfo.groupId)
if (r) {
groupLink = null
onGroupLinkUpdated(null)
onGroupLinkUpdated(null to null)
}
}
}
@@ -69,13 +91,18 @@ fun GroupLinkView(chatModel: ChatModel, groupInfo: GroupInfo, connReqContact: St
@Composable
fun GroupLinkLayout(
groupLink: String?,
groupInfo: GroupInfo,
groupLinkMemberRole: MutableState<GroupMemberRole?>,
creatingLink: Boolean,
createLink: () -> Unit,
share: () -> Unit,
updateLink: () -> Unit,
deleteLink: () -> Unit
) {
Column(
Modifier.padding(horizontal = DEFAULT_PADDING),
Modifier
.verticalScroll(rememberScrollState())
.padding(start = DEFAULT_PADDING, bottom = DEFAULT_BOTTOM_PADDING, end = DEFAULT_PADDING),
horizontalAlignment = Alignment.Start,
verticalArrangement = Arrangement.Top
) {
@@ -93,7 +120,17 @@ fun GroupLinkLayout(
if (groupLink == null) {
SimpleButton(stringResource(R.string.button_create_group_link), icon = Icons.Outlined.AddLink, disabled = creatingLink, click = createLink)
} else {
QRCode(groupLink, Modifier.weight(1f, fill = false).aspectRatio(1f))
SectionItemView(padding = PaddingValues(bottom = DEFAULT_PADDING)) {
RoleSelectionRow(groupInfo, groupLinkMemberRole)
}
var initialLaunch by remember { mutableStateOf(true) }
LaunchedEffect(groupLinkMemberRole.value) {
if (!initialLaunch) {
updateLink()
}
initialLaunch = false
}
QRCode(groupLink, Modifier.aspectRatio(1f))
Row(
horizontalArrangement = Arrangement.spacedBy(10.dp),
verticalAlignment = Alignment.CenterVertically,
@@ -116,6 +153,25 @@ fun GroupLinkLayout(
}
}
@Composable
private fun RoleSelectionRow(groupInfo: GroupInfo, selectedRole: MutableState<GroupMemberRole?>, enabled: Boolean = true) {
Row(
Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween
) {
val values = listOf(GroupMemberRole.Member, GroupMemberRole.Observer).map { it to it.text }
ExposedDropDownSettingRow(
generalGetString(R.string.initial_member_role),
values,
selectedRole,
icon = null,
enabled = rememberUpdatedState(enabled),
onSelected = { selectedRole.value = it }
)
}
}
@Composable
fun ProgressIndicator() {
Box(
@@ -0,0 +1,94 @@
package chat.simplex.app.views.chat.group
import SectionItemView
import SectionSpacer
import SectionView
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import chat.simplex.app.R
import chat.simplex.app.model.*
import chat.simplex.app.ui.theme.*
import chat.simplex.app.views.helpers.*
@Composable
fun GroupWelcomeView(m: ChatModel, groupInfo: GroupInfo, close: () -> Unit) {
var groupInfo by remember { mutableStateOf(groupInfo) }
val welcomeText = remember { mutableStateOf(groupInfo.groupProfile.description ?: "") }
fun save(afterSave: () -> Unit = {}) {
withApi {
var welcome: String? = welcomeText.value.trim('\n', ' ')
if (welcome?.length == 0) {
welcome = null
}
val groupProfileUpdated = groupInfo.groupProfile.copy(description = welcome)
val res = m.controller.apiUpdateGroup(groupInfo.groupId, groupProfileUpdated)
if (res != null) {
groupInfo = res
m.updateGroup(res)
welcomeText.value = welcome ?: ""
}
afterSave()
}
}
ModalView(
close = {
if (welcomeText.value == groupInfo.groupProfile.description || (welcomeText.value == "" && groupInfo.groupProfile.description == null)) close()
else showUnsavedChangesAlert({ save(close) }, close)
},
background = if (isInDarkTheme()) MaterialTheme.colors.background else SettingsBackgroundLight
) {
GroupWelcomeLayout(
welcomeText,
groupInfo,
save = ::save
)
}
}
@Composable
private fun GroupWelcomeLayout(
welcomeText: MutableState<String>,
groupInfo: GroupInfo,
save: () -> Unit,
) {
Column(
Modifier.fillMaxWidth().verticalScroll(rememberScrollState()),
) {
AppBarTitle(stringResource(R.string.group_welcome_title))
val welcomeText = remember { welcomeText }
TextEditor(Modifier.padding(horizontal = DEFAULT_PADDING).height(160.dp), text = welcomeText)
SectionSpacer()
SaveButton(
save = save,
disabled = welcomeText.value == groupInfo.groupProfile.description || (welcomeText.value == "" && groupInfo.groupProfile.description == null)
)
}
}
@Composable
private fun SaveButton(save: () -> Unit, disabled: Boolean) {
SectionView {
SectionItemView(save, disabled = disabled) {
Text(stringResource(R.string.save_and_update_group_profile), color = if (disabled) HighOrLowlight else MaterialTheme.colors.primary)
}
}
}
private fun showUnsavedChangesAlert(save: () -> Unit, revert: () -> Unit) {
AlertManager.shared.showAlertDialogStacked(
title = generalGetString(R.string.save_welcome_message_question),
confirmText = generalGetString(R.string.save_and_update_group_profile),
dismissText = generalGetString(R.string.exit_without_saving),
onConfirm = save,
onDismiss = revert,
)
}
@@ -174,14 +174,14 @@ fun CIFileView(
class ChatItemProvider: PreviewParameterProvider<ChatItem> {
private val sentFile = ChatItem(
chatDir = CIDirection.DirectSnd(),
meta = CIMeta.getSample(1, Clock.System.now(), "", CIStatus.SndSent(), itemDeleted = false, itemEdited = true, editable = false),
meta = CIMeta.getSample(1, Clock.System.now(), "", CIStatus.SndSent(), itemEdited = true),
content = CIContent.SndMsgContent(msgContent = MsgContent.MCFile("")),
quotedItem = null,
file = CIFile.getSample(fileStatus = CIFileStatus.SndComplete)
)
private val fileChatItemWtFile = ChatItem(
chatDir = CIDirection.DirectRcv(),
meta = CIMeta.getSample(1, Clock.System.now(), "", CIStatus.RcvRead(), itemDeleted = false, itemEdited = false, editable = false),
meta = CIMeta.getSample(1, Clock.System.now(), "", CIStatus.RcvRead(), ),
content = CIContent.RcvMsgContent(msgContent = MsgContent.MCFile("")),
quotedItem = null,
file = null
@@ -11,6 +11,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
@@ -58,7 +59,7 @@ private fun CIMetaText(meta: CIMeta, chatTTL: Int?, color: Color) {
StatusIconText(Icons.Filled.Circle, Color.Transparent)
Spacer(Modifier.width(4.dp))
}
Text(meta.timestampText, color = color, fontSize = 13.sp)
Text(meta.timestampText, color = color, fontSize = 13.sp, maxLines = 1, overflow = TextOverflow.Ellipsis)
}
// the conditions in this function should match CIMetaText
@@ -91,6 +91,14 @@ fun ChatItemView(
}
}
fun moderateMessageQuestionText(): String {
return if (fullDeleteAllowed) {
generalGetString(R.string.moderate_message_will_be_deleted_warning)
} else {
generalGetString(R.string.moderate_message_will_be_marked_warning)
}
}
@Composable
fun MsgContentItemDropdownMenu() {
DropdownMenu(
@@ -98,7 +106,7 @@ fun ChatItemView(
onDismissRequest = { showMenu.value = false },
Modifier.width(220.dp)
) {
if (!cItem.meta.itemDeleted && !live) {
if (cItem.meta.itemDeleted == null && !live) {
ItemAction(stringResource(R.string.reply_verb), Icons.Outlined.Reply, onClick = {
if (composeState.value.editing) {
composeState.value = ComposeState(contextItem = ComposeContextItem.QuotedItem(cItem), useLinkPreviews = useLinkPreviews)
@@ -140,7 +148,7 @@ fun ChatItemView(
showMenu.value = false
})
}
if (cItem.meta.itemDeleted && revealed.value) {
if (cItem.meta.itemDeleted != null && revealed.value) {
ItemAction(
stringResource(R.string.hide_verb),
Icons.Outlined.VisibilityOff,
@@ -153,6 +161,10 @@ fun ChatItemView(
if (!(live && cItem.meta.isLive)) {
DeleteItemAction(cItem, showMenu, questionText = deleteMessageQuestionText(), deleteMessage)
}
val groupInfo = cItem.memberToModerate(cInfo)?.first
if (groupInfo != null) {
ModerateItemAction(cItem, questionText = moderateMessageQuestionText(), showMenu, deleteMessage)
}
}
}
@@ -163,14 +175,16 @@ fun ChatItemView(
onDismissRequest = { showMenu.value = false },
Modifier.width(220.dp)
) {
ItemAction(
stringResource(R.string.reveal_verb),
Icons.Outlined.Visibility,
onClick = {
revealed.value = true
showMenu.value = false
}
)
if (!cItem.isDeletedContent) {
ItemAction(
stringResource(R.string.reveal_verb),
Icons.Outlined.Visibility,
onClick = {
revealed.value = true
showMenu.value = false
}
)
}
DeleteItemAction(cItem, showMenu, questionText = deleteMessageQuestionText(), deleteMessage)
}
}
@@ -178,10 +192,10 @@ fun ChatItemView(
@Composable
fun ContentItem() {
val mc = cItem.content.msgContent
if (cItem.meta.itemDeleted && !revealed.value) {
if (cItem.meta.itemDeleted != null && !revealed.value) {
MarkedDeletedItemView(cItem, cInfo.timedMessagesTTL, showMember = showMember)
MarkedDeletedItemDropdownMenu()
} else if (cItem.quotedItem == null && !cItem.meta.itemDeleted && !cItem.meta.isLive) {
} else if (cItem.quotedItem == null && cItem.meta.itemDeleted == null && !cItem.meta.isLive) {
if (mc is MsgContent.MCText && isShortEmoji(cItem.content.text)) {
EmojiItemView(cItem, cInfo.timedMessagesTTL)
MsgContentItemDropdownMenu()
@@ -238,6 +252,8 @@ fun ChatItemView(
is CIContent.SndGroupFeature -> CIChatFeatureView(cItem, c.groupFeature, c.preference.enable.iconColor)
is CIContent.RcvChatFeatureRejected -> CIChatFeatureView(cItem, c.feature, Color.Red)
is CIContent.RcvGroupFeatureRejected -> CIChatFeatureView(cItem, c.groupFeature, Color.Red)
is CIContent.SndModerated -> MarkedDeletedItemView(cItem, cInfo.timedMessagesTTL, showMember = showMember)
is CIContent.RcvModerated -> MarkedDeletedItemView(cItem, cInfo.timedMessagesTTL, showMember = showMember)
is CIContent.InvalidJSON -> CIInvalidJSONView(c.json)
}
}
@@ -262,6 +278,24 @@ fun DeleteItemAction(
)
}
@Composable
fun ModerateItemAction(
cItem: ChatItem,
questionText: String,
showMenu: MutableState<Boolean>,
deleteMessage: (Long, CIDeleteMode) -> Unit
) {
ItemAction(
stringResource(R.string.moderate_verb),
Icons.Outlined.Flag,
onClick = {
showMenu.value = false
moderateMessageAlertDialog(cItem, questionText, deleteMessage = deleteMessage)
},
color = Color.Red
)
}
@Composable
fun ItemAction(text: String, icon: ImageVector, onClick: () -> Unit, color: Color = MaterialTheme.colors.onBackground) {
DropdownMenuItem(onClick) {
@@ -306,6 +340,18 @@ fun deleteMessageAlertDialog(chatItem: ChatItem, questionText: String, deleteMes
)
}
fun moderateMessageAlertDialog(chatItem: ChatItem, questionText: String, deleteMessage: (Long, CIDeleteMode) -> Unit) {
AlertManager.shared.showAlertDialog(
title = generalGetString(R.string.delete_member_message__question),
text = questionText,
confirmText = generalGetString(R.string.delete_verb),
destructive = true,
onConfirm = {
deleteMessage(chatItem.id, CIDeleteMode.cidmBroadcast)
}
)
}
private fun showMsgDeliveryErrorAlert(description: String) {
AlertManager.shared.showAlertMsg(
title = generalGetString(R.string.message_delivery_error_title),
@@ -1,8 +1,7 @@
package chat.simplex.app.views.chat.item
import android.content.res.Configuration
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
import androidx.compose.runtime.Composable
@@ -19,9 +18,10 @@ import chat.simplex.app.ui.theme.SimpleXTheme
@Composable
fun DeletedItemView(ci: ChatItem, timedMessagesTTL: Int?, showMember: Boolean = false) {
val sent = ci.chatDir.sent
Surface(
shape = RoundedCornerShape(18.dp),
color = ReceivedColorLight,
color = if (sent) SentColorLight else ReceivedColorLight,
) {
Row(
Modifier.padding(horizontal = 12.dp, vertical = 6.dp),
@@ -7,6 +7,7 @@ import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material.icons.outlined.Flag
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -20,6 +21,7 @@ import androidx.compose.ui.platform.UriHandler
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.*
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.*
import androidx.compose.ui.unit.*
import androidx.compose.ui.util.fastMap
@@ -75,10 +77,7 @@ fun FramedItemView(
Modifier
.background(if (sent) SentQuoteColorLight else ReceivedQuoteColorLight)
.fillMaxWidth()
.padding(start = 8.dp)
.padding(end = 12.dp)
.padding(top = 6.dp)
.padding(bottom = if (ci.quotedItem == null) 6.dp else 0.dp),
.padding(start = 8.dp, top = 6.dp, end = 12.dp, bottom = if (ci.quotedItem == null) 6.dp else 0.dp),
horizontalArrangement = Arrangement.spacedBy(4.dp),
) {
if (icon != null) {
@@ -96,6 +95,8 @@ fun FramedItemView(
}
},
style = MaterialTheme.typography.body1.copy(lineHeight = 22.sp),
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
}
@@ -165,8 +166,12 @@ fun FramedItemView(
Box(contentAlignment = Alignment.BottomEnd) {
Column(Modifier.width(IntrinsicSize.Max)) {
PriorityLayout(Modifier, CHAT_IMAGE_LAYOUT_ID) {
if (ci.meta.itemDeleted) {
FramedItemHeader(stringResource(R.string.marked_deleted_description), true, Icons.Outlined.Delete)
if (ci.meta.itemDeleted != null) {
if (ci.meta.itemDeleted is CIDeleted.Moderated) {
FramedItemHeader(String.format(stringResource(R.string.moderated_item_description), ci.meta.itemDeleted.byGroupMember.chatViewName), true, Icons.Outlined.Flag)
} else {
FramedItemHeader(stringResource(R.string.marked_deleted_description), true, Icons.Outlined.Delete)
}
} else if (ci.meta.isLive) {
FramedItemHeader(stringResource(R.string.live), false)
}
@@ -242,7 +247,12 @@ fun CIMarkdownText(
}
const val CHAT_IMAGE_LAYOUT_ID = "chatImage"
const val MAX_SAFE_WIDTH_HEIGHT = 100_000
/**
* Equal to [androidx.compose.ui.unit.Constraints.MaxFocusMask], which is 0x3FFFF - 1
* Other values make a crash `java.lang.IllegalArgumentException: Can't represent a width of 123456 and height of 9909 in Constraints`
* See [androidx.compose.ui.unit.Constraints.createConstraints]
* */
const val MAX_SAFE_WIDTH = 0x3FFFF - 1
@Composable
fun PriorityLayout(
@@ -250,6 +260,17 @@ fun PriorityLayout(
priorityLayoutId: String,
content: @Composable () -> Unit
) {
/**
* Limiting max value for height + width in order to not crash the app, see [androidx.compose.ui.unit.Constraints.createConstraints]
* */
fun maxSafeHeight(width: Int) = when { // width bits + height bits should be <= 31
width < 0x1FFF /*MaxNonFocusMask*/ -> 0x3FFFF - 1 /* MaxFocusMask */ // 13 bits width + 18 bits height
width < 0x7FFF /*MinNonFocusMask*/ -> 0xFFFF - 1 /* MinFocusMask */ // 15 bits width + 16 bits height
width < 0xFFFF /*MinFocusMask*/ -> 0x7FFF - 1 /* MinFocusMask */ // 16 bits width + 15 bits height
width < 0x3FFFF /*MaxFocusMask*/ -> 0x1FFF - 1 /* MaxNonFocusMask */ // 18 bits width + 13 bits height
else -> 0x1FFF // shouldn't happen since width is limited already
}
Layout(
content = content,
modifier = modifier
@@ -261,15 +282,11 @@ fun PriorityLayout(
if (it.layoutId == priorityLayoutId)
imagePlaceable!!
else
it.measure(constraints.copy(maxWidth = imagePlaceable?.width ?: min(MAX_SAFE_WIDTH_HEIGHT, constraints.maxWidth))) }
/**
* Limit width for every other element to width of important element and height for a sum of all elements.
*
* min(MAX_SAFE_WIDTH_HEIGHT, ...) is here because of exception (related to width of long text):
* java.lang.IllegalArgumentException: Can't represent a size of 324314 in Constraints
* at androidx.compose.ui.unit.Constraints$Companion.bitsNeedForSize(Constraints.kt:403)
* */
layout(imagePlaceable?.measuredWidth ?: min(MAX_SAFE_WIDTH_HEIGHT, placeables.maxOf { it.width }), min(MAX_SAFE_WIDTH_HEIGHT, placeables.sumOf { it.height })) {
it.measure(constraints.copy(maxWidth = imagePlaceable?.width ?: min(MAX_SAFE_WIDTH, constraints.maxWidth))) }
// Limit width for every other element to width of important element and height for a sum of all elements.
val width = imagePlaceable?.measuredWidth ?: min(MAX_SAFE_WIDTH, placeables.maxOf { it.width })
val height = minOf(maxSafeHeight(width), placeables.sumOf { it.height })
layout(width, height) {
var y = 0
placeables.forEach {
it.place(0, y)
@@ -10,10 +10,12 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.*
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import chat.simplex.app.R
import chat.simplex.app.model.CIDeleted
import chat.simplex.app.model.ChatItem
import chat.simplex.app.ui.theme.HighOrLowlight
import chat.simplex.app.ui.theme.SimpleXTheme
@@ -29,19 +31,30 @@ fun MarkedDeletedItemView(ci: ChatItem, timedMessagesTTL: Int?, showMember: Bool
Modifier.padding(horizontal = 12.dp, vertical = 6.dp),
verticalAlignment = Alignment.CenterVertically
) {
Text(
buildAnnotatedString {
// appendSender(this, if (showMember) ci.memberDisplayName else null, true) // TODO font size
withStyle(SpanStyle(fontSize = 12.sp, fontStyle = FontStyle.Italic, color = HighOrLowlight)) { append(generalGetString(R.string.marked_deleted_description)) }
},
style = MaterialTheme.typography.body1.copy(lineHeight = 22.sp),
modifier = Modifier.padding(end = 8.dp)
)
if (ci.meta.itemDeleted is CIDeleted.Moderated) {
MarkedDeletedText(String.format(generalGetString(R.string.moderated_item_description), ci.meta.itemDeleted.byGroupMember.chatViewName))
} else {
MarkedDeletedText(generalGetString(R.string.marked_deleted_description))
}
CIMetaView(ci, timedMessagesTTL)
}
}
}
@Composable
private fun MarkedDeletedText(text: String) {
Text(
buildAnnotatedString {
// appendSender(this, if (showMember) ci.memberDisplayName else null, true) // TODO font size
withStyle(SpanStyle(fontSize = 12.sp, fontStyle = FontStyle.Italic, color = HighOrLowlight)) { append(text) }
},
style = MaterialTheme.typography.body1.copy(lineHeight = 22.sp),
modifier = Modifier.padding(end = 8.dp),
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
}
@Preview(showBackground = true)
@Preview(
uiMode = Configuration.UI_MODE_NIGHT_YES,
@@ -51,7 +64,7 @@ fun MarkedDeletedItemView(ci: ChatItem, timedMessagesTTL: Int?, showMember: Bool
fun PreviewMarkedDeletedItemView() {
SimpleXTheme {
DeletedItemView(
ChatItem.getSampleData(itemDeleted = true),
ChatItem.getSampleData(itemDeleted = CIDeleted.Deleted()),
null
)
}
@@ -19,6 +19,7 @@ import androidx.compose.ui.unit.sp
import chat.simplex.app.R
import chat.simplex.app.ui.theme.SimpleXTheme
import chat.simplex.app.views.helpers.annotatedStringResource
import chat.simplex.app.views.helpers.openUriCatching
import chat.simplex.app.views.usersettings.MarkdownHelpView
import chat.simplex.app.views.usersettings.simplexTeamUri
@@ -36,7 +37,7 @@ fun ChatHelpView(addContact: (() -> Unit)? = null) {
Text(
annotatedStringResource(R.string.you_can_connect_to_simplex_chat_founder),
modifier = Modifier.clickable(onClick = {
uriHandler.openUri(simplexTeamUri)
uriHandler.openUriCatching(simplexTeamUri)
}),
lineHeight = 22.sp
)
@@ -132,7 +132,7 @@ private fun OnboardingButtons(openNewChatSheet: () -> Unit) {
Column(Modifier.fillMaxSize().padding(DEFAULT_PADDING), horizontalAlignment = Alignment.End, verticalArrangement = Arrangement.Bottom) {
val uriHandler = LocalUriHandler.current
ConnectButton(generalGetString(R.string.chat_with_developers)) {
uriHandler.openUri(simplexTeamUri)
uriHandler.openUriCatching(simplexTeamUri)
}
Spacer(Modifier.height(DEFAULT_PADDING))
ConnectButton(generalGetString(R.string.tap_to_start_new_chat), openNewChatSheet)
@@ -145,12 +145,12 @@ fun ChatPreviewView(
if (ci != null) {
val (text: CharSequence, inlineTextContent) = when {
chatModelDraftChatId == chat.id && chatModelDraft != null -> remember(chatModelDraft) { messageDraft(chatModelDraft) }
!ci.meta.itemDeleted -> ci.text to null
ci.meta.itemDeleted == null -> ci.text to null
else -> generalGetString(R.string.marked_deleted_description) to null
}
val formattedText = when {
chatModelDraftChatId == chat.id && chatModelDraft != null -> null
!ci.meta.itemDeleted -> ci.formattedText
ci.meta.itemDeleted == null -> ci.formattedText
else -> null
}
MarkdownText(
@@ -154,7 +154,7 @@ fun DatabaseLayout(
val operationsDisabled = !stopped || progressIndicator
Column(
Modifier.fillMaxWidth().verticalScroll(rememberScrollState()).padding(bottom = 48.dp),
Modifier.fillMaxWidth().verticalScroll(rememberScrollState()).padding(bottom = DEFAULT_BOTTOM_PADDING),
horizontalAlignment = Alignment.Start,
) {
AppBarTitle(stringResource(R.string.your_chat_database))
@@ -190,7 +190,7 @@ fun DatabaseLayout(
disabled = operationsDisabled
)
SectionDivider()
SettingsPreferenceItem(Icons.Outlined.Backup, stringResource(R.string.full_backup), privacyFullBackup)
AppDataBackupPreference(privacyFullBackup, initialRandomDBPassphrase)
SectionDivider()
SettingsActionItem(
Icons.Outlined.IosShare,
@@ -270,6 +270,36 @@ fun DatabaseLayout(
}
}
@Composable
private fun AppDataBackupPreference(privacyFullBackup: SharedPreference<Boolean>, initialRandomDBPassphrase: SharedPreference<Boolean>) {
SectionItemView {
Row(verticalAlignment = Alignment.CenterVertically) {
Icon(Icons.Outlined.Backup, stringResource(R.string.full_backup), tint = HighOrLowlight)
Spacer(Modifier.padding(horizontal = 4.dp))
val prefState = remember { mutableStateOf(privacyFullBackup.get()) }
Row(Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) {
Text(stringResource(R.string.full_backup), Modifier.padding(end = 24.dp))
Spacer(Modifier.fillMaxWidth().weight(1f))
Switch(
checked = prefState.value,
onCheckedChange = {
if (initialRandomDBPassphrase.get()) {
exportProhibitedAlert()
} else {
privacyFullBackup.set(it)
prefState.value = it
}
},
colors = SwitchDefaults.colors(
checkedThumbColor = MaterialTheme.colors.primary,
uncheckedThumbColor = HighOrLowlight
)
)
}
}
}
}
private fun setChatItemTTLAlert(
m: ChatModel, selectedChatItemTTL: MutableState<ChatItemTTL>,
progressIndicator: MutableState<Boolean>,
@@ -6,6 +6,7 @@ import android.content.*
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
import android.content.pm.PackageManager
import android.graphics.*
import android.graphics.ImageDecoder.DecodeException
import android.net.Uri
import android.provider.MediaStore
import android.util.Base64
@@ -205,21 +206,22 @@ fun GetImageBottomSheet(
val processPickedImage = { uri: Uri? ->
if (uri != null) {
val source = ImageDecoder.createSource(context.contentResolver, uri)
val bitmap = ImageDecoder.decodeBitmap(source)
imageBitmap.value = uri
onImageChange(bitmap)
}
}
val galleryLauncher = rememberLauncherForActivityResult(contract = PickFromGallery()) { processPickedImage(it) }
val galleryLauncherFallback = rememberGetContentLauncher { processPickedImage(it) }
val cameraLauncher = rememberCameraLauncher { uri: Uri? ->
if (uri != null) {
imageBitmap.value = uri
val source = ImageDecoder.createSource(SimplexApp.context.contentResolver, uri)
val bitmap = ImageDecoder.decodeBitmap(source)
onImageChange(bitmap)
try {
val bitmap = ImageDecoder.decodeBitmap(source)
imageBitmap.value = uri
onImageChange(bitmap)
} catch (e: DecodeException) {
Log.e(TAG, "Unable to decode the image: ${e.stackTraceToString()}")
AlertManager.shared.showAlertMsg(
title = generalGetString(R.string.image_decoding_exception_title),
text = generalGetString(R.string.image_decoding_exception_desc)
)
}
}
}
val galleryLauncher = rememberLauncherForActivityResult(contract = PickFromGallery(), processPickedImage)
val galleryLauncherFallback = rememberGetContentLauncher(processPickedImage)
val cameraLauncher = rememberCameraLauncher(processPickedImage)
val permissionLauncher = rememberPermissionLauncher { isGranted: Boolean ->
if (isGranted) {
cameraLauncher.launchWithFallback()
@@ -85,13 +85,14 @@ fun SectionItemView(
click: (() -> Unit)? = null,
minHeight: Dp = 46.dp,
disabled: Boolean = false,
padding: PaddingValues = PaddingValues(horizontal = DEFAULT_PADDING),
content: (@Composable RowScope.() -> Unit)
) {
val modifier = Modifier
.fillMaxWidth()
.sizeIn(minHeight = minHeight)
Row(
if (click == null || disabled) modifier.padding(horizontal = DEFAULT_PADDING) else modifier.clickable(onClick = click).padding(horizontal = DEFAULT_PADDING),
if (click == null || disabled) modifier.padding(padding) else modifier.clickable(onClick = click).padding(padding),
verticalAlignment = Alignment.CenterVertically
) {
content()
@@ -1,11 +1,16 @@
package chat.simplex.app.views.helpers
import android.app.Activity
import android.app.Application
import android.app.LocaleManager
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.res.Configuration
import android.content.res.Resources
import android.graphics.*
import android.graphics.Typeface
import android.net.Uri
import android.os.FileUtils
import android.os.*
import android.provider.OpenableColumns
import android.text.Spanned
import android.text.SpannedString
@@ -28,8 +33,7 @@ import androidx.compose.ui.unit.*
import androidx.core.content.FileProvider
import androidx.core.text.HtmlCompat
import chat.simplex.app.*
import chat.simplex.app.model.CIFile
import chat.simplex.app.model.json
import chat.simplex.app.model.*
import kotlinx.coroutines.*
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
@@ -374,6 +378,24 @@ fun saveAnimImage(context: Context, uri: Uri): String? {
}
}
fun saveTempImageUncompressed(image: Bitmap, asPng: Boolean): File? {
return try {
val ext = if (asPng) "png" else "jpg"
val tmpDir = SimplexApp.context.getDir("temp", Application.MODE_PRIVATE)
return File(tmpDir.absolutePath + File.separator + generateNewFileName(SimplexApp.context, "IMG", ext)).apply {
outputStream().use { out ->
image.compress(if (asPng) Bitmap.CompressFormat.PNG else Bitmap.CompressFormat.JPEG, 85, out)
out.flush()
}
deleteOnExit()
SimplexApp.context.chatModel.filesToDelete.add(this)
}
} catch (e: Exception) {
Log.e(TAG, "Util.kt saveTempImageUncompressed error: ${e.message}")
null
}
}
fun saveFileFromUri(context: Context, uri: Uri): String? {
return try {
val inputStream = context.contentResolver.openInputStream(uri)
@@ -482,3 +504,42 @@ inline fun <reified T> serializableSaver(): Saver<T, *> = Saver(
save = { json.encodeToString(it) },
restore = { json.decodeFromString(it) }
)
fun saveAppLocale(pref: SharedPreference<String?>, activity: Activity, languageCode: String? = null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
val localeManager = SimplexApp.context.getSystemService(LocaleManager::class.java)
localeManager.applicationLocales = LocaleList(Locale.forLanguageTag(languageCode ?: return))
} else {
pref.set(languageCode)
if (languageCode == null) {
activity.applyLocale(SimplexApp.context.defaultLocale)
}
activity.recreate()
}
}
fun Activity.applyAppLocale(pref: SharedPreference<String?>) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
val lang = pref.get()
if (lang == null || lang == Locale.getDefault().language) return
applyLocale(Locale.forLanguageTag(lang))
}
}
private fun Activity.applyLocale(locale: Locale) {
Locale.setDefault(locale)
val appConf = Configuration(SimplexApp.context.resources.configuration).apply { setLocale(locale) }
val activityConf = Configuration(resources.configuration).apply { setLocale(locale) }
@Suppress("DEPRECATION")
SimplexApp.context.resources.updateConfiguration(appConf, resources.displayMetrics)
@Suppress("DEPRECATION")
resources.updateConfiguration(activityConf, resources.displayMetrics)
}
fun UriHandler.openUriCatching(uri: String) {
try {
openUri(uri)
} catch (e: ActivityNotFoundException) {
Log.e(TAG, e.stackTraceToString())
}
}
@@ -1,32 +1,100 @@
package chat.simplex.app.views.newchat
import android.graphics.Bitmap
import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.graphics.*
import androidx.compose.ui.platform.*
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import boofcv.alg.fiducial.qrcode.QrCodeEncoder
import boofcv.alg.fiducial.qrcode.QrCodeGeneratorImage
import androidx.core.graphics.*
import androidx.core.graphics.drawable.toBitmap
import boofcv.alg.drawing.FiducialImageEngine
import boofcv.alg.fiducial.qrcode.*
import boofcv.android.ConvertBitmap
import chat.simplex.app.R
import chat.simplex.app.SimplexApp
import chat.simplex.app.ui.theme.SimpleXTheme
import chat.simplex.app.views.helpers.*
import kotlinx.coroutines.launch
@Composable
fun QRCode(connReq: String, modifier: Modifier = Modifier) {
Image(
bitmap = qrCodeBitmap(connReq, 1024).asImageBitmap(),
contentDescription = stringResource(R.string.image_descr_qr_code),
modifier = modifier
)
fun QRCode(
connReq: String,
modifier: Modifier = Modifier,
tintColor: Color = Color(0xff062d56),
withLogo: Boolean = true
) {
val context = LocalContext.current
val scope = rememberCoroutineScope()
BoxWithConstraints {
val maxWidthInPx = with(LocalDensity.current) { maxWidth.roundToPx() }
val qr = remember(maxWidthInPx, connReq, tintColor, withLogo) {
qrCodeBitmap(connReq, maxWidthInPx).replaceColor(Color.Black.toArgb(), tintColor.toArgb())
.let { if (withLogo) it.addLogo() else it }
.asImageBitmap()
}
Image(
bitmap = qr,
contentDescription = stringResource(R.string.image_descr_qr_code),
modifier
.clickable {
scope.launch {
val image = qrCodeBitmap(connReq, 1024).replaceColor(Color.Black.toArgb(), tintColor.toArgb())
.let { if (withLogo) it.addLogo() else it }
val file = saveTempImageUncompressed(image, false)
if (file != null) {
shareFile(context, "", file.absolutePath)
}
}
}
)
}
}
fun qrCodeBitmap(content: String, size: Int): Bitmap {
val qrCode = QrCodeEncoder().addAutomatic(content).fixate()
val renderer = QrCodeGeneratorImage(5)
fun qrCodeBitmap(content: String, size: Int = 1024): Bitmap {
val qrCode = QrCodeEncoder().addAutomatic(content).setError(QrCode.ErrorLevel.L).fixate()
/** See [QrCodeGeneratorImage.initialize] and [FiducialImageEngine.configure] for size calculation */
val numModules = QrCode.totalModules(qrCode.version)
val borderModule = 1
// val calculatedFinalWidth = (pixelsPerModule * numModules) + 2 * (borderModule * pixelsPerModule)
// size = (x * numModules) + 2 * (borderModule * x)
// size / x = numModules + 2 * borderModule
// x = size / (numModules + 2 * borderModule)
val pixelsPerModule = size / (numModules + 2 * borderModule)
// + 1 to make it with better quality
val renderer = QrCodeGeneratorImage(pixelsPerModule + 1)
renderer.borderModule = borderModule
renderer.render(qrCode)
return ConvertBitmap.grayToBitmap(renderer.gray, Bitmap.Config.RGB_565)
return ConvertBitmap.grayToBitmap(renderer.gray, Bitmap.Config.RGB_565).scale(size, size)
}
fun Bitmap.replaceColor(from: Int, to: Int): Bitmap {
val pixels = IntArray(width * height)
getPixels(pixels, 0, width, 0, 0, width, height)
var i = 0
while (i < pixels.size) {
if (pixels[i] == from) {
pixels[i] = to
}
i++
}
setPixels(pixels, 0, width, 0, 0, width, height)
return this
}
fun Bitmap.addLogo(): Bitmap = applyCanvas {
val radius = (width * 0.16f) / 2
val paint = android.graphics.Paint()
paint.color = android.graphics.Color.WHITE
drawCircle(width / 2f, height / 2f, radius, paint)
val logo = SimplexApp.context.resources.getDrawable(R.mipmap.icon_foreground, null).toBitmap()
val logoSize = (width * 0.24).toInt()
translate((width - logoSize) / 2f, (height - logoSize) / 2f)
drawBitmap(logo, null, android.graphics.Rect(0, 0, logoSize, logoSize), null)
}
@Preview
@@ -36,7 +36,7 @@ fun HowItWorks(user: User?, onboardingStage: MutableState<OnboardingStage?>? = n
val uriHandler = LocalUriHandler.current
Text(
annotatedStringResource(R.string.read_more_in_github_with_link),
modifier = Modifier.padding(bottom = 12.dp).clickable { uriHandler.openUri("https://github.com/simplex-chat/simplex-chat#readme") },
modifier = Modifier.padding(bottom = 12.dp).clickable { uriHandler.openUriCatching("https://github.com/simplex-chat/simplex-chat#readme") },
lineHeight = 22.sp
)
} else {
@@ -18,8 +18,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.unit.*
import chat.simplex.app.R
import chat.simplex.app.model.ChatModel
import chat.simplex.app.model.User
@@ -47,15 +46,15 @@ fun SimpleXInfoLayout(
.verticalScroll(rememberScrollState())
.padding(horizontal = DEFAULT_PADDING),
) {
Box(Modifier.fillMaxWidth().padding(top = 24.dp, bottom = 8.dp), contentAlignment = Alignment.Center) {
Box(Modifier.fillMaxWidth().padding(top = 8.dp), contentAlignment = Alignment.Center) {
SimpleXLogo()
}
Text(stringResource(R.string.next_generation_of_private_messaging), style = MaterialTheme.typography.h2, modifier = Modifier.padding(bottom = 24.dp), textAlign = TextAlign.Center)
Text(stringResource(R.string.next_generation_of_private_messaging), style = MaterialTheme.typography.h2, modifier = Modifier.padding(bottom = 36.dp).padding(horizontal = 48.dp), textAlign = TextAlign.Center)
InfoRow(painterResource(R.drawable.privacy), R.string.privacy_redefined, R.string.first_platform_without_user_ids)
InfoRow(painterResource(R.drawable.privacy), R.string.privacy_redefined, R.string.first_platform_without_user_ids, width = 80.dp)
InfoRow(painterResource(R.drawable.shield), R.string.immune_to_spam_and_abuse, R.string.people_can_connect_only_via_links_you_share)
InfoRow(painterResource(R.drawable.decentralized), R.string.decentralized, R.string.opensource_protocol_and_code_anybody_can_run_servers)
InfoRow(painterResource(if (isInDarkTheme()) R.drawable.decentralized_light else R.drawable.decentralized), R.string.decentralized, R.string.opensource_protocol_and_code_anybody_can_run_servers)
Spacer(Modifier.fillMaxHeight().weight(1f))
@@ -89,14 +88,14 @@ fun SimpleXLogo() {
}
@Composable
private fun InfoRow(icon: Painter, @StringRes titleId: Int, @StringRes textId: Int) {
Row(Modifier.padding(bottom = 20.dp), verticalAlignment = Alignment.Top) {
private fun InfoRow(icon: Painter, @StringRes titleId: Int, @StringRes textId: Int, width: Dp = 76.dp) {
Row(Modifier.padding(bottom = 27.dp), verticalAlignment = Alignment.Top) {
Image(icon, contentDescription = null, modifier = Modifier
.width(60.dp)
.padding(top = 8.dp, end = 16.dp))
.width(width)
.padding(top = 8.dp, start = 8.dp, end = 24.dp))
Column(horizontalAlignment = Alignment.Start) {
Text(stringResource(titleId), fontWeight = FontWeight.Bold, style = MaterialTheme.typography.h3, lineHeight = 24.sp)
Text(stringResource(textId), lineHeight = 24.sp, style = MaterialTheme.typography.caption)
Text(stringResource(textId), lineHeight = 24.sp, style = MaterialTheme.typography.body1)
}
}
}
@@ -35,7 +35,7 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) {
Icon(
Icons.Outlined.OpenInNew, stringResource(titleId), tint = MaterialTheme.colors.primary,
modifier = Modifier
.clickable { uriHandler.openUri(link) }
.clickable { uriHandler.openUriCatching(link) }
)
}
@@ -270,8 +270,45 @@ private val versionDescriptions: List<VersionDescription> = listOf(
link = "https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps"
)
)
)
),
VersionDescription(
version = "v4.6",
features = listOf(
FeatureDescription(
icon = Icons.Outlined.Lock,
titleId = R.string.v4_6_hidden_chat_profiles,
descrId = R.string.v4_6_hidden_chat_profiles_descr
),
FeatureDescription(
icon = Icons.Outlined.Flag,
titleId = R.string.v4_6_group_moderation,
descrId = R.string.v4_6_group_moderation_descr
),
FeatureDescription(
icon = Icons.Outlined.MapsUgc,
titleId = R.string.v4_6_group_welcome_message,
descrId = R.string.v4_6_group_welcome_message_descr
),
FeatureDescription(
icon = Icons.Outlined.Call,
titleId = R.string.v4_6_audio_video_calls,
descrId = R.string.v4_6_audio_video_calls_descr
),
FeatureDescription(
icon = Icons.Outlined.Battery3Bar,
titleId = R.string.v4_6_reduced_battery_usage,
descrId = R.string.v4_6_reduced_battery_usage_descr
),
FeatureDescription(
icon = Icons.Outlined.Translate,
titleId = R.string.v4_6_chinese_spanish_interface,
descrId = R.string.v4_6_chinese_spanish_interface_descr,
link = "https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps"
)
)
),
)
private val lastVersion = versionDescriptions.last().version
fun setLastVersionDefault(m: ChatModel) {
@@ -2,13 +2,20 @@ package chat.simplex.app.views.usersettings
import SectionCustomFooter
import SectionDivider
import SectionItemView
import SectionItemViewSpaceBetween
import SectionItemWithValue
import SectionSpacer
import SectionView
import android.app.Activity
import android.content.ComponentName
import android.content.Intent
import android.content.pm.PackageManager
import android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
import android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED
import android.net.Uri
import android.os.Build
import android.provider.Settings
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyRow
@@ -17,6 +24,7 @@ import androidx.compose.material.MaterialTheme.colors
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Circle
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.shadow
@@ -30,9 +38,13 @@ import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.toBitmap
import chat.simplex.app.*
import chat.simplex.app.R
import chat.simplex.app.model.ChatModel
import chat.simplex.app.model.SharedPreference
import chat.simplex.app.ui.theme.*
import chat.simplex.app.views.helpers.*
import com.godaddy.android.colorpicker.*
import kotlinx.coroutines.delay
import java.util.*
enum class AppIcon(val resId: Int) {
DEFAULT(R.mipmap.icon),
@@ -40,7 +52,7 @@ enum class AppIcon(val resId: Int) {
}
@Composable
fun AppearanceView() {
fun AppearanceView(m: ChatModel) {
val appIcon = remember { mutableStateOf(findEnabledIcon()) }
fun setAppIcon(newIcon: AppIcon) {
@@ -62,6 +74,7 @@ fun AppearanceView() {
AppearanceLayout(
appIcon,
m.controller.appPrefs.appLanguage,
changeIcon = ::setAppIcon,
editPrimaryColor = { primary ->
ModalManager.shared.showModalCloseable { close ->
@@ -73,6 +86,7 @@ fun AppearanceView() {
@Composable fun AppearanceLayout(
icon: MutableState<AppIcon>,
languagePref: SharedPreference<String?>,
changeIcon: (AppIcon) -> Unit,
editPrimaryColor: (Color) -> Unit,
) {
@@ -81,6 +95,37 @@ fun AppearanceView() {
horizontalAlignment = Alignment.Start,
) {
AppBarTitle(stringResource(R.string.appearance_settings))
SectionView(stringResource(R.string.settings_section_title_language), padding = PaddingValues()) {
val context = LocalContext.current
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
SectionItemWithValue(
generalGetString(R.string.settings_section_title_language).lowercase().replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.US) else it.toString() },
remember { mutableStateOf("system") },
listOf(ValueTitleDesc("system", generalGetString(R.string.change_verb), "")),
onSelected = { openSystemLangPicker(context as? Activity ?: return@SectionItemWithValue) }
)
} else {
val state = rememberSaveable { mutableStateOf(languagePref.get() ?: "system") }
SectionItemView {
LangSelector(state) {
state.value = it
withApi {
delay(200)
val activity = context as? Activity
if (activity != null) {
if (it == "system") {
saveAppLocale(languagePref, activity)
} else {
saveAppLocale(languagePref, activity, it)
}
}
}
}
}
}
}
SectionSpacer()
SectionView(stringResource(R.string.settings_section_title_icon), padding = PaddingValues(horizontal = DEFAULT_PADDING_HALF)) {
LazyRow {
items(AppIcon.values().size, { index -> AppIcon.values()[index] }) { index ->
@@ -179,6 +224,32 @@ fun ColorPicker(initialColor: Color, onColorChanged: (Color) -> Unit) {
)
}
@Composable
private fun LangSelector(state: State<String>, onSelected: (String) -> Unit) {
// Should be the same as in app/build.gradle's `android.defaultConfig.resConfigs`
val supportedLanguages = mapOf(
"system" to generalGetString(R.string.language_system),
"en" to "English",
"cs" to "Čeština",
"de" to "Deutsch",
"es" to "Español",
"fr" to "Français",
"it" to "Italiano",
"nl" to "Nederlands",
"ru" to "Русский",
"zh-CN" to "简体中文"
)
val values by remember { mutableStateOf(supportedLanguages.map { it.key to it.value }) }
ExposedDropDownSettingRow(
generalGetString(R.string.settings_section_title_language).lowercase().replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.US) else it.toString() },
values,
state,
icon = null,
enabled = remember { mutableStateOf(true) },
onSelected = onSelected
)
}
@Composable
private fun ThemeSelector(state: State<DefaultTheme>, onSelected: (DefaultTheme) -> Unit) {
val darkTheme = isSystemInDarkTheme()
@@ -193,6 +264,9 @@ private fun ThemeSelector(state: State<DefaultTheme>, onSelected: (DefaultTheme)
)
}
private fun openSystemLangPicker(activity: Activity) {
activity.startActivity(Intent(Settings.ACTION_APP_LOCALE_SETTINGS, Uri.parse("package:" + SimplexApp.context.packageName)))
}
private fun findEnabledIcon(): AppIcon = AppIcon.values().first { icon ->
SimplexApp.context.packageManager.getComponentEnabledSetting(
@@ -206,6 +280,7 @@ fun PreviewAppearanceSettings() {
SimpleXTheme {
AppearanceLayout(
icon = remember { mutableStateOf(AppIcon.DARK_BLUE) },
languagePref = SharedPreference({ null }, {}),
changeIcon = {},
editPrimaryColor = {},
)
@@ -2,6 +2,7 @@ package chat.simplex.app.views.usersettings
import SectionDivider
import SectionItemView
import SectionTextFooter
import SectionView
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
@@ -43,16 +44,23 @@ fun CallSettingsLayout(
AppBarTitle(stringResource(R.string.your_calls))
val lockCallState = remember { mutableStateOf(callOnLockScreen.get()) }
SectionView(stringResource(R.string.settings_section_title_settings)) {
SectionItemView() {
SharedPreferenceToggle(stringResource(R.string.connect_calls_via_relay), webrtcPolicyRelay)
}
SectionItemView(editIceServers) { Text(stringResource(R.string.webrtc_ice_servers)) }
SectionDivider()
val enabled = remember { mutableStateOf(true) }
SectionItemView { LockscreenOpts(lockCallState, enabled, onSelected = { callOnLockScreen.set(it); lockCallState.value = it }) }
SectionDivider()
SectionItemView(editIceServers) { Text(stringResource(R.string.webrtc_ice_servers)) }
SectionItemView() {
SharedPreferenceToggle(stringResource(R.string.always_use_relay), webrtcPolicyRelay)
}
}
SectionTextFooter(
if (remember { webrtcPolicyRelay.state }.value) {
generalGetString(R.string.relay_server_protects_ip)
} else {
generalGetString(R.string.relay_server_if_necessary)
}
)
}
}
@@ -25,6 +25,7 @@ fun NetworkAndServersView(
chatModel: ChatModel,
showModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit),
showSettingsModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit),
showCustomModal: (@Composable (ChatModel, () -> Unit) -> Unit) -> (() -> Unit),
) {
// It's not a state, just a one-time value. Shouldn't be used in any state-related situations
val netCfg = remember { chatModel.controller.getNetCfg() }
@@ -44,6 +45,7 @@ fun NetworkAndServersView(
sessionMode = sessionMode,
showModal = showModal,
showSettingsModal = showSettingsModal,
showCustomModal = showCustomModal,
toggleSocksProxy = { enable ->
if (enable) {
AlertManager.shared.showAlertMsg(
@@ -138,6 +140,7 @@ fun NetworkAndServersView(
sessionMode: MutableState<TransportSessionMode>,
showModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit),
showSettingsModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit),
showCustomModal: (@Composable (ChatModel, () -> Unit) -> Unit) -> (() -> Unit),
toggleSocksProxy: (Boolean) -> Unit,
useOnion: (OnionHosts) -> Unit,
updateSessionMode: (TransportSessionMode) -> Unit,
@@ -149,7 +152,7 @@ fun NetworkAndServersView(
) {
AppBarTitle(stringResource(R.string.network_and_servers))
SectionView(generalGetString(R.string.settings_section_title_messages)) {
SettingsActionItem(Icons.Outlined.Dns, stringResource(R.string.smp_servers), showSettingsModal { SMPServersView(it) })
SettingsActionItem(Icons.Outlined.Dns, stringResource(R.string.smp_servers), showCustomModal { m, close -> SMPServersView(m, close) })
SectionDivider()
SectionItemView {
UseSocksProxySwitch(networkUseSocksProxy, toggleSocksProxy)
@@ -297,6 +300,7 @@ fun PreviewNetworkAndServersLayout() {
networkUseSocksProxy = remember { mutableStateOf(true) },
showModal = { {} },
showSettingsModal = { {} },
showCustomModal = { {} },
toggleSocksProxy = {},
onionHosts = remember { mutableStateOf(OnionHosts.PREFER) },
sessionMode = remember { mutableStateOf(TransportSessionMode.User) },
@@ -13,7 +13,6 @@ import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.stringResource
import androidx.fragment.app.FragmentActivity
import chat.simplex.app.R
@@ -198,7 +198,7 @@ private fun howToButton() {
val uriHandler = LocalUriHandler.current
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.clickable { uriHandler.openUri("https://github.com/simplex-chat/simplex-chat/blob/stable/docs/WEBRTC.md#configure-mobile-apps") }
modifier = Modifier.clickable { uriHandler.openUriCatching("https://github.com/simplex-chat/simplex-chat/blob/stable/docs/WEBRTC.md#configure-mobile-apps") }
) {
Text(stringResource(R.string.how_to), color = MaterialTheme.colors.primary)
Icon(
@@ -27,7 +27,7 @@ import chat.simplex.app.views.helpers.*
import kotlinx.coroutines.launch
@Composable
fun SMPServersView(m: ChatModel) {
fun SMPServersView(m: ChatModel, close: () -> Unit) {
var servers by remember {
mutableStateOf(m.userSMPServersUnsaved.value ?: m.userSMPServers.value ?: emptyList())
}
@@ -72,83 +72,90 @@ fun SMPServersView(m: ChatModel) {
}
}
val scope = rememberCoroutineScope()
SMPServersLayout(
testing = testing.value,
servers = servers,
serversUnchanged = serversUnchanged.value,
saveDisabled = saveDisabled.value,
allServersDisabled = allServersDisabled.value,
m.currentUser.value,
addServer = {
AlertManager.shared.showAlertDialogButtonsColumn(
title = generalGetString(R.string.smp_servers_add),
buttons = {
Column {
SectionItemView({
AlertManager.shared.hideAlert()
servers = servers + ServerCfg.empty
// No saving until something will be changed on the next screen to prevent blank servers on the list
showServer(servers.last())
}) {
Text(stringResource(R.string.smp_servers_enter_manually))
}
SectionItemView({
AlertManager.shared.hideAlert()
ModalManager.shared.showModalCloseable { close ->
ScanSMPServer {
close()
servers = servers + it
m.userSMPServersUnsaved.value = servers
ModalView(
close = {
if (saveDisabled.value) close()
else showUnsavedChangesAlert({ saveSMPServers(servers, m, close) }, close)
},
background = if (isInDarkTheme()) MaterialTheme.colors.background else SettingsBackgroundLight
) {
SMPServersLayout(
testing = testing.value,
servers = servers,
serversUnchanged = serversUnchanged.value,
saveDisabled = saveDisabled.value,
allServersDisabled = allServersDisabled.value,
m.currentUser.value,
addServer = {
AlertManager.shared.showAlertDialogButtonsColumn(
title = generalGetString(R.string.smp_servers_add),
buttons = {
Column {
SectionItemView({
AlertManager.shared.hideAlert()
servers = servers + ServerCfg.empty
// No saving until something will be changed on the next screen to prevent blank servers on the list
showServer(servers.last())
}) {
Text(stringResource(R.string.smp_servers_enter_manually))
}
SectionItemView({
AlertManager.shared.hideAlert()
ModalManager.shared.showModalCloseable { close ->
ScanSMPServer {
close()
servers = servers + it
m.userSMPServersUnsaved.value = servers
}
}
}
) {
Text(stringResource(R.string.smp_servers_scan_qr))
}
val hasAllPresets = hasAllPresets(servers, m)
if (!hasAllPresets) {
SectionItemView({
AlertManager.shared.hideAlert()
servers = (servers + addAllPresets(servers, m)).sortedByDescending { it.preset }
}) {
Text(stringResource(R.string.smp_servers_preset_add), color = MaterialTheme.colors.onBackground)
}
}
}
) {
Text(stringResource(R.string.smp_servers_scan_qr))
}
val hasAllPresets = hasAllPresets(servers, m)
if (!hasAllPresets) {
SectionItemView({
AlertManager.shared.hideAlert()
servers = (servers + addAllPresets(servers, m)).sortedByDescending { it.preset }
}) {
Text(stringResource(R.string.smp_servers_preset_add), color = MaterialTheme.colors.onBackground)
}
}
}
)
},
testServers = {
scope.launch {
testServers(testing, servers, m) {
servers = it
m.userSMPServersUnsaved.value = servers
}
}
)
},
testServers = {
scope.launch {
testServers(testing, servers, m) {
servers = it
m.userSMPServersUnsaved.value = servers
}
}
},
resetServers = {
servers = m.userSMPServers.value ?: emptyList()
m.userSMPServersUnsaved.value = null
},
saveSMPServers = {
saveSMPServers(servers, m)
},
showServer = ::showServer,
)
},
resetServers = {
servers = m.userSMPServers.value ?: emptyList()
m.userSMPServersUnsaved.value = null
},
saveSMPServers = {
saveSMPServers(servers, m)
},
showServer = ::showServer,
)
if (testing.value) {
Box(
Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
CircularProgressIndicator(
Modifier
.padding(horizontal = 2.dp)
.size(30.dp),
color = HighOrLowlight,
strokeWidth = 2.5.dp
)
if (testing.value) {
Box(
Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
CircularProgressIndicator(
Modifier
.padding(horizontal = 2.dp)
.size(30.dp),
color = HighOrLowlight,
strokeWidth = 2.5.dp
)
}
}
}
}
@@ -247,7 +254,7 @@ private fun HowToButton() {
SettingsActionItem(
Icons.Outlined.OpenInNew,
stringResource(R.string.how_to_use_your_servers),
{ uriHandler.openUri("https://github.com/simplex-chat/simplex-chat/blob/stable/docs/SERVER.md") },
{ uriHandler.openUriCatching("https://github.com/simplex-chat/simplex-chat/blob/stable/docs/SERVER.md") },
textColor = MaterialTheme.colors.primary,
iconColor = MaterialTheme.colors.primary
)
@@ -324,12 +331,22 @@ private suspend fun runServersTest(servers: List<ServerCfg>, m: ChatModel, onUpd
return fs
}
private fun saveSMPServers(servers: List<ServerCfg>, m: ChatModel) {
private fun saveSMPServers(servers: List<ServerCfg>, m: ChatModel, afterSave: () -> Unit = {}) {
withApi {
if (m.controller.setUserSMPServers(servers)) {
m.userSMPServers.value = servers
m.userSMPServersUnsaved.value = null
}
afterSave()
}
}
private fun showUnsavedChangesAlert(save: () -> Unit, revert: () -> Unit) {
AlertManager.shared.showAlertDialogStacked(
title = generalGetString(R.string.smp_save_servers_question),
confirmText = generalGetString(R.string.save_verb),
dismissText = generalGetString(R.string.exit_without_saving),
onConfirm = save,
onDismiss = revert,
)
}
@@ -154,13 +154,13 @@ fun SettingsLayout(
SectionView(stringResource(R.string.settings_section_title_settings)) {
SettingsActionItem(Icons.Outlined.Bolt, stringResource(R.string.notifications), showSettingsModal { NotificationsSettingsView(it) }, disabled = stopped)
SectionDivider()
SettingsActionItem(Icons.Outlined.WifiTethering, stringResource(R.string.network_and_servers), showSettingsModal { NetworkAndServersView(it, showModal, showSettingsModal) }, disabled = stopped)
SettingsActionItem(Icons.Outlined.WifiTethering, stringResource(R.string.network_and_servers), showSettingsModal { NetworkAndServersView(it, showModal, showSettingsModal, showCustomModal) }, disabled = stopped)
SectionDivider()
SettingsActionItem(Icons.Outlined.Videocam, stringResource(R.string.settings_audio_video_calls), showSettingsModal { CallSettingsView(it, showModal) }, disabled = stopped)
SectionDivider()
SettingsActionItem(Icons.Outlined.Lock, stringResource(R.string.privacy_and_security), showSettingsModal { PrivacySettingsView(it, setPerformLA) }, disabled = stopped)
SectionDivider()
SettingsActionItem(Icons.Outlined.LightMode, stringResource(R.string.appearance_settings), showSettingsModal { AppearanceView() }, disabled = stopped)
SettingsActionItem(Icons.Outlined.LightMode, stringResource(R.string.appearance_settings), showSettingsModal { AppearanceView(it) }, disabled = stopped)
SectionDivider()
DatabaseItem(encrypted, showSettingsModal { DatabaseView(it, showSettingsModal) }, stopped)
}
@@ -173,9 +173,9 @@ fun SettingsLayout(
SectionDivider()
SettingsActionItem(Icons.Outlined.Info, stringResource(R.string.about_simplex_chat), showModal { SimpleXInfo(it, onboarding = false) })
SectionDivider()
SettingsActionItem(Icons.Outlined.Tag, stringResource(R.string.chat_with_the_founder), { uriHandler.openUri(simplexTeamUri) }, textColor = MaterialTheme.colors.primary, disabled = stopped)
SettingsActionItem(Icons.Outlined.Tag, stringResource(R.string.chat_with_the_founder), { uriHandler.openUriCatching(simplexTeamUri) }, textColor = MaterialTheme.colors.primary, disabled = stopped)
SectionDivider()
SettingsActionItem(Icons.Outlined.Email, stringResource(R.string.send_us_an_email), { uriHandler.openUri("mailto:chat@simplex.chat") }, textColor = MaterialTheme.colors.primary)
SettingsActionItem(Icons.Outlined.Email, stringResource(R.string.send_us_an_email), { uriHandler.openUriCatching("mailto:chat@simplex.chat") }, textColor = MaterialTheme.colors.primary)
}
SectionSpacer()
@@ -313,7 +313,7 @@ fun MaintainIncognitoState(chatModel: ChatModel) {
}
@Composable private fun ContributeItem(uriHandler: UriHandler) {
SectionItemView({ uriHandler.openUri("https://github.com/simplex-chat/simplex-chat#contribute") }) {
SectionItemView({ uriHandler.openUriCatching("https://github.com/simplex-chat/simplex-chat#contribute") }) {
Icon(
Icons.Outlined.Keyboard,
contentDescription = "GitHub",
@@ -326,8 +326,8 @@ fun MaintainIncognitoState(chatModel: ChatModel) {
@Composable private fun RateAppItem(uriHandler: UriHandler) {
SectionItemView({
runCatching { uriHandler.openUri("market://details?id=chat.simplex.app") }
.onFailure { uriHandler.openUri("https://play.google.com/store/apps/details?id=chat.simplex.app") }
runCatching { uriHandler.openUriCatching("market://details?id=chat.simplex.app") }
.onFailure { uriHandler.openUriCatching("https://play.google.com/store/apps/details?id=chat.simplex.app") }
}
) {
Icon(
@@ -341,7 +341,7 @@ fun MaintainIncognitoState(chatModel: ChatModel) {
}
@Composable private fun StarOnGithubItem(uriHandler: UriHandler) {
SectionItemView({ uriHandler.openUri("https://github.com/simplex-chat/simplex-chat") }) {
SectionItemView({ uriHandler.openUriCatching("https://github.com/simplex-chat/simplex-chat") }) {
Icon(
painter = painterResource(id = R.drawable.ic_github),
contentDescription = "GitHub",
@@ -365,7 +365,7 @@ fun MaintainIncognitoState(chatModel: ChatModel) {
}
@Composable private fun InstallTerminalAppItem(uriHandler: UriHandler) {
SectionItemView({ uriHandler.openUri("https://github.com/simplex-chat/simplex-chat") }) {
SectionItemView({ uriHandler.openUriCatching("https://github.com/simplex-chat/simplex-chat") }) {
Icon(
painter = painterResource(id = R.drawable.ic_github),
contentDescription = "GitHub",
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 43 KiB

@@ -0,0 +1,29 @@
<?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>
</resources>
File diff suppressed because it is too large Load Diff
@@ -513,13 +513,15 @@
<!-- Call settings -->
<string name="settings_audio_video_calls">Audio- &amp; Videoanrufe</string>
<string name="your_calls">Ihre Anrufe</string>
<string name="connect_calls_via_relay">Über ein Relais verbinden</string>
<string name="always_use_relay">Über ein Relais verbinden</string>
<string name="call_on_lock_screen">Anrufe auf Sperrbildschirm:</string>
<string name="accept_call_on_lock_screen">Akzeptieren</string>
<string name="show_call_on_lock_screen">Anzeigen</string>
<string name="no_call_on_lock_screen">Deaktivieren</string>
<string name="your_ice_servers">Ihre ICE-Server</string>
<string name="webrtc_ice_servers">WebRTC ICE-Server</string>
<string name="relay_server_protects_ip">Relais-Server schützen Ihre IP-Adresse, aber sie können die Anrufdauer erfassen.</string>
<string name="relay_server_if_necessary">Relais-Server werden nur genutzt, wenn sie benötigt werden. Ihre IP-Adresse kann von Anderen erfasst werden.</string>
<!-- Call Lock Screen -->
<string name="open_simplex_chat_to_accept_call">Öffnen Sie <xliff:g id="appNameFull">SimpleX Chat</xliff:g>, um den Anruf anzunehmen.</string>
<string name="allow_accepting_calls_from_lock_screen">Aktivieren Sie Anrufe vom Sperrbildschirm über die Einstellungen.</string>
@@ -1040,4 +1042,17 @@
<string name="v4_5_italian_interface_descr">Dank der Nutzer - Tragen Sie per Weblate bei!</string>
<string name="v4_4_french_interface_descr">Dank der Nutzer - Tragen Sie per Weblate bei!</string>
<string name="v4_5_private_filenames_descr">Bild- und Sprachdateinamen enthalten UTC, um Informationen zur Zeitzone zu schützen.</string>
<string name="moderated_description">Moderiert</string>
<string name="moderated_item_description">Von %s moderiert</string>
<string name="moderate_verb">Moderieren</string>
<string name="moderate_message_will_be_marked_warning">Diese Nachricht wird für alle Mitglieder als moderiert gekennzeichnet.</string>
<string name="you_are_observer">Sie sind Beobachter</string>
<string name="observer_cant_send_message_title">Sie können keine Nachrichten versenden!</string>
<string name="group_member_role_observer">Beobachter</string>
<string name="initial_member_role">Anfängliche Rolle</string>
<string name="delete_member_message__question">Nachricht des Mitglieds löschen\?</string>
<string name="error_updating_link_for_group">Fehler beim Aktualisieren des Gruppen-Links</string>
<string name="observer_cant_send_message_desc">Bitte kontaktieren Sie den Gruppen-Administrator.</string>
<string name="moderate_message_will_be_deleted_warning">Diese Nachricht wird für alle Gruppenmitglieder gelöscht.</string>
<string name="language_system">System</string>
</resources>
@@ -1,2 +1,982 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="auth_unavailable">Autenticación no disponible</string>
<string name="accept_contact_button">Aceptar</string>
<string name="network_settings">Configuración de red avanzada</string>
<string name="onboarding_notifications_mode_off_desc"><b>Mejor para la batería</b>. Recibirás notificaciones sólo cuando la aplicación se esté ejecutando, el servicio NO se usará en segundo plano.</string>
<string name="onboarding_notifications_mode_periodic_desc"><b>Bueno para la batería</b>. El servicio en segundo plano comprueba si hay mensajes nuevos cada 10 minutos. Puedes perderte llamadas y mensajes urgentes.</string>
<string name="accept_call_on_lock_screen">Aceptar</string>
<string name="full_backup">Copia de seguridad de los datos de la aplicación</string>
<string name="chat_item_ttl_day">un dia</string>
<string name="chat_item_ttl_month">un mes</string>
<string name="chat_item_ttl_week">una semana</string>
<string name="allow_disappearing_messages_only_if">Permitir que desaparezcan los mensajes sólo si su contacto lo permite.</string>
<string name="v4_3_improved_server_configuration_desc">Añadir servidores escaneando códigos QR.</string>
<string name="smp_servers_preset_add">Añadir servidores predefinidos</string>
<string name="all_group_members_will_remain_connected">Todos los miembros del grupo permanecerán conectados.</string>
<string name="allow_irreversible_message_deletion_only_if">Permitir la eliminación irreversible de mensajes sólo si tu contacto también lo permite para tí.</string>
<string name="keychain_allows_to_receive_ntfs">Android Keystore se usará para almacenar de forma segura la frase de contraseña después de reiniciar la aplicación o cambiar la frase de contraseña - permitirá recibir notificaciones.</string>
<string name="allow_your_contacts_to_send_disappearing_messages">Permitir a tus contactos enviar mensajes que desaparecen.</string>
<string name="allow_your_contacts_to_send_voice_messages">Permitir a tus contactos enviar mensajes de voz.</string>
<string name="chat_preferences_always">siempre</string>
<string name="notifications_mode_off_desc">La aplicación sólo puede recibir notificaciones cuando se está ejecutando, no se iniciará ningún servicio en segundo plano.</string>
<string name="settings_section_title_icon">ICONO DE LA APLICACIÓN</string>
<string name="incognito_random_profile_from_contact_description">Se enviará un perfil aleatorio al contacto del que recibió este enlace</string>
<string name="turning_off_service_and_periodic">La optimización de la batería está activa, desactivando el servicio en segundo plano y las solicitudes periódicas de nuevos mensajes. Puedes volver a activarlos en Configuración.</string>
<string name="notifications_mode_service_desc">El servicio en segundo plano está siempre en funcionamiento las notificaciones se mostrarán en cuanto los mensajes estén disponibles.</string>
<string name="it_can_disabled_via_settings_notifications_still_shown"><b>Se puede desactivar en Configuración</b> las notificaciones se seguirán mostrando mientras la app esté en funcionamiento.</string>
<string name="notifications_mode_service">Siempre activo</string>
<string name="allow_verb">Permitir</string>
<string name="above_then_preposition_continuation">arriba, entonces:</string>
<string name="add_new_contact_to_create_one_time_QR_code"><b>Añadir nuevo contacto</b>: para crear tu código QR de un solo uso para tu contacto.</string>
<string name="accept_connection_request__question">¿Aceptar solicitud de conexión\?</string>
<string name="accept_contact_incognito_button">Aceptar incógnito</string>
<string name="clear_chat_warning">Se eliminarán todos los mensajes SOLO para tí. ¡No puede deshacerse!</string>
<string name="smp_servers_add">Añadir servidor…</string>
<string name="network_enable_socks_info">¿Acceder a los servidores a través del proxy SOCKS en el puerto 9050\? El proxy debe iniciarse antes de activar esta opción.</string>
<string name="all_your_contacts_will_remain_connected">Todos tus contactos permanecerán conectados.</string>
<string name="appearance_settings">Apariencia</string>
<string name="app_version_title">Versión</string>
<string name="network_session_mode_user_description">Se usará una conexión TCP independiente (y una credencial SOCKS) <b>para cada perfil de chat que tengas en la aplicación</b>.</string>
<string name="network_session_mode_entity_description">Se usará una conexión TCP independiente (y una credencial SOCKS) <b>para cada contacto y miembro del grupo</b>.
\n<b>Ten en cuenta</b>: si tienes muchas conexiones, tu consumo de batería y tráfico puede ser sustancialmente mayor y algunas conexiones pueden fallar.</string>
<string name="a_plus_b">a + b</string>
<string name="about_simplex">Acerca de SimpleX</string>
<string name="bold">negrita</string>
<string name="callstatus_accepted">llamada aceptada</string>
<string name="accept">Aceptar</string>
<string name="audio_call_no_encryption">llamada de audio (sin cifrado e2e)</string>
<string name="icon_descr_audio_call">llamada de audio</string>
<string name="settings_audio_video_calls">Llamadas de audio y vídeo</string>
<string name="icon_descr_audio_off">Audio desactivado</string>
<string name="icon_descr_audio_on">Audio activado</string>
<string name="integrity_msg_bad_id">ID de mensaje erróneo</string>
<string name="auto_accept_images">Aceptar automáticamente imágenes</string>
<string name="users_delete_all_chats_deleted">Se eliminarán todos los chats y mensajes. ¡No puede deshacerse!</string>
<string name="accept_feature">Aceptar</string>
<string name="allow_to_send_disappearing">Permitir enviar mensajes temporales.</string>
<string name="keychain_is_storing_securely">Android Keystore se utiliza para almacenar de forma segura la frase de contraseña - permite que el servicio de notificación funcione.</string>
<string name="users_add">Añadir perfil</string>
<string name="incognito_random_profile_description">Se enviará un perfil aleatorio a tu contacto</string>
<string name="color_primary">Acento</string>
<string name="allow_your_contacts_irreversibly_delete">Permitir a tus contactos eliminar irreversiblemente los mensajes enviados.</string>
<string name="allow_voice_messages_only_if">Permitir mensajes de voz sólo si tu contacto los permite.</string>
<string name="allow_direct_messages">Permitir el envío de mensajes directos a los miembros.</string>
<string name="allow_to_delete_messages">Permitir la eliminación irreversible de los mensajes enviados.</string>
<string name="allow_to_send_voice">Permitir enviar mensajes de voz.</string>
<string name="v4_2_group_links_desc">Los administradores pueden crear los enlaces para unirse a los grupos.</string>
<string name="v4_2_auto_accept_contact_requests">Aceptar automáticamente solicitudes del contacto</string>
<string name="attach">Adjuntar</string>
<string name="integrity_msg_bad_hash">hash de mensaje erróneo</string>
<string name="answer_call">Responder llamada</string>
<string name="group_member_role_admin">administrador</string>
<string name="allow_voice_messages_question">¿Permitir mensajes de voz\?</string>
<string name="back">Volver</string>
<string name="about_simplex_chat">Sobre <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="smp_servers_add_to_another_device">Añadir a otro dispositivo</string>
<string name="app_version_name">Versión de la aplicación: v%s</string>
<string name="accept_requests">Aceptar solicitudes</string>
<string name="accept_automatically">Automáticamente</string>
<string name="icon_descr_asked_to_receive">Solicita recibir la imagen</string>
<string name="impossible_to_recover_passphrase"><b>Ten en cuenta</b>: NO podrás recuperar o cambiar la contraseña si la pierdes.</string>
<string name="both_you_and_your_contact_can_send_voice">Tanto tú como tu contacto podéis enviar mensajes de voz.</string>
<string name="onboarding_notifications_mode_service_desc"><b>¡Usa más batería!</b> El servicio en segundo plano está siempre en funcionamiento - las notificaciones se mostrarán tan pronto como los mensajes estén disponibles.</string>
<string name="both_you_and_your_contacts_can_delete">Tanto tú como tu contacto podéis eliminar de forma irreversible los mensajes enviados.</string>
<string name="both_you_and_your_contact_can_send_disappearing">Tanto tú como tu contacto podéis enviar mensajes temporales.</string>
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>Escanear código QR</b>: para conectar con tu contacto que te muestre código QR.</string>
<string name="create_profile_button">Crear</string>
<string name="create_one_time_link">Crear enlace único de invitación</string>
<string name="create_group">Crear grupo secreto</string>
<string name="database_passphrase_will_be_updated">La contraseña de cifrado de la base de datos será actualizada.</string>
<string name="info_row_database_id">ID de la base de datos</string>
<string name="direct_messages_are_prohibited_in_chat">Los mensajes directos entre miembros del grupo están prohibidos.</string>
<string name="passphrase_is_different">La contraseña es distinta a la almacenada en Keystore</string>
<string name="database_will_be_encrypted_and_passphrase_stored">La base de datos será cifrada y la contraseña se guardará en Keystore.</string>
<string name="delete_contact_question">¿Eliminar contacto\?</string>
<string name="delete_message__question">Eliminar mensaje\?</string>
<string name="delete_chat_profile_question">¿Eliminar el perfil de chat\?</string>
<string name="rcv_group_event_group_deleted">grupo eliminado</string>
<string name="delete_group_question">¿Eliminar grupo\?</string>
<string name="delete_messages_after">Eliminar mensaje después</string>
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">Autenticación de dispositivo desactivada. Puedes habilitar SimpleX Lock en Configuración, después de activar la autenticación de dispositivo.</string>
<string name="no_call_on_lock_screen">Desactivar</string>
<string name="disappearing_prohibited_in_this_chat">Los mensajes temporales están prohibidos en este chat.</string>
<string name="disappearing_messages_are_prohibited">Los mensajes temporales están prohibidos en este grupo.</string>
<string name="display_name_cannot_contain_whitespace">El nombre mostrado no puede contener espacios en blanco.</string>
<string name="encrypted_video_call">Videollamada con cifrado e2e</string>
<string name="display_name_connection_established">conexión establecida</string>
<string name="simplex_link_mode_description">Descripción</string>
<string name="smp_server_test_connect">Conectar</string>
<string name="notification_contact_connected">Conectado</string>
<string name="auth_disable_simplex_lock">Desactivar SimpleX Lock</string>
<string name="auth_device_authentication_is_disabled_turning_off">Autenticación de dispositivo desactivada. SimpleX Lock deshabilitado.</string>
<string name="maximum_supported_file_size">El tamaño máximo de archivo admitido es <xliff:g id="maxFileSize">%1$s</xliff:g></string>
<string name="clear_verification">Eliminar verificación</string>
<string name="create_profile">Crear perfil</string>
<string name="encrypted_audio_call">llamada con cifrado e2e</string>
<string name="status_e2e_encrypted">Cifrado e2e</string>
<string name="integrity_msg_duplicate">mensaje duplicado</string>
<string name="settings_section_title_develop">DESARROLLO</string>
<string name="settings_developer_tools">Herramientas desarrollo</string>
<string name="delete_files_and_media_for_all_users">Eliminar archivos para todos los perfiles de chat</string>
<string name="delete_messages">Eliminar mensaje</string>
<string name="database_encrypted">¡Base de datos cifrada!</string>
<string name="encrypted_with_random_passphrase">La base de datos está cifrada con una contraseña aleatoria, puedes cambiarla.</string>
<string name="database_error">Error en base de datos</string>
<string name="database_passphrase_is_required">Para abrir la aplicación se requiere la contraseña de la base de datos</string>
<string name="rcv_group_event_member_connected">conectado</string>
<string name="button_create_group_link">Crear enlace</string>
<string name="delete_link_question">¿Eliminar enlace\?</string>
<string name="timed_messages">Mensajes temporales</string>
<string name="direct_messages">Mensajes directos</string>
<string name="ttl_m">%dm</string>
<string name="ttl_month">%d mes</string>
<string name="ttl_months">%d meses</string>
<string name="ttl_mth">%dmes</string>
<string name="ttl_h">%dh</string>
<string name="ttl_hours">%d horas</string>
<string name="ttl_week">%d semana</string>
<string name="ttl_weeks">%d semanas</string>
<string name="v4_4_disappearing_messages">Mensajes temporales</string>
<string name="auth_confirm_credential">Canfirma tus credenciales</string>
<string name="group_member_status_introduced">conectando (presentado)</string>
<string name="group_member_status_intro_invitation">conectando (invitación de presentación )</string>
<string name="group_member_status_accepted">conectando (aceptado)</string>
<string name="group_member_status_announced">conectando (anunciado)</string>
<string name="connection_local_display_name">conexión&lt;xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"connection ID\" example=\"1\"&gt;</string>
<string name="connect_via_link_or_qr">Conectar mediante enlace / Código QR</string>
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">El contacto y todos los mensajes serán eliminados. ¡No puede deshacerse!</string>
<string name="icon_descr_contact_checked">Contacto verificado</string>
<string name="status_contact_has_e2e_encryption">El contacto dispone de cifrado e2e</string>
<string name="smp_server_test_disconnect">Desconectar</string>
<string name="notification_preview_mode_contact">Nombre del contacto</string>
<string name="copy_verb">Copiar</string>
<string name="create_your_profile">Crear tu perfil</string>
<string name="always_use_relay">Conectar mediante relay</string>
<string name="set_password_to_export_desc">La base de datos está cifrada con una contraseña aleatoria. Cámbiala antes de exportar.</string>
<string name="total_files_count_and_size">%d archivo(s) con tamaño total de %s</string>
<string name="enable_automatic_deletion_question">¿Activar eliminación automática de mensajes\?</string>
<string name="contact_preferences">Preferencias de contacto</string>
<string name="ttl_s">%ds</string>
<string name="delete_after">Eliminar después</string>
<string name="ttl_sec">%d seg</string>
<string name="contact_already_exists">El contácto ya existe</string>
<string name="connection_error_auth">Error de conexión (Autenticación)</string>
<string name="for_me_only">Eliminar para mí</string>
<string name="icon_descr_server_status_disconnected">Desconectado</string>
<string name="icon_descr_server_status_connected">Conectado</string>
<string name="copied">Copiado en portapapeles</string>
<string name="share_one_time_link">Crear enlace único de invitación</string>
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 PC: escanéa el código QR desde la app mediante <b>Escanéo de código QR </b></string>
<string name="delete_contact_menu_action">Eliminar</string>
<string name="delete_group_menu_action">Eliminar</string>
<string name="alert_title_contact_connection_pending">¡El contacto aun no se ha conectado!</string>
<string name="delete_pending_connection__question">¿Eliminar conexion pendiente\?</string>
<string name="icon_descr_close_button">Botón cerrar</string>
<string name="connection_request_sent">¡Solicitud de conexión enviada!</string>
<string name="network_session_mode_entity">Conexión</string>
<string name="callstatus_connecting">conectando llamada…</string>
<string name="allow_accepting_calls_from_lock_screen">Activar llamadas desde la pantalla de bloqueo en Configuración</string>
<string name="database_encryption_will_be_updated">La contraseña de cifrado de la base de datos será actualizada y almacenada en Keystore.</string>
<string name="group_member_status_connecting">conectando</string>
<string name="group_member_status_creator">creador</string>
<string name="ttl_min">%d min</string>
<string name="connection_timeout">Tiempo de conexión expirado</string>
<string name="failed_to_create_user_duplicate_title">¡Nombre mostrado duplicado!</string>
<string name="connection_error">Error de conexión</string>
<string name="smp_server_test_create_queue">Crear cola</string>
<string name="smp_server_test_delete_queue">Eliminar cola</string>
<string name="notification_preview_somebody">Contacto oculto:</string>
<string name="delete_verb">Eliminar</string>
<string name="edit_verb">Editar</string>
<string name="delete_member_message__question">¿Eliminar el mensaje de miembro\?</string>
<string name="icon_descr_edited">editado</string>
<string name="image_decoding_exception_title">Error de decodificación</string>
<string name="create_address">Crear dirección</string>
<string name="delete_address">Eliminar dirección</string>
<string name="delete_address__question">¿Eliminar la dirección\?</string>
<string name="display_name__field">Nombre mostrado:</string>
<string name="callstate_connecting">conectando…</string>
<string name="decentralized">Descentralizado</string>
<string name="database_will_be_encrypted">La base de datos será cifrada.</string>
<string name="delete_chat_archive_question">¿Eliminar archivo del chat\?</string>
<string name="create_group_link">Crear enlace de grupo</string>
<string name="delete_link">Eliminar enlace</string>
<string name="users_delete_question">¿Eliminar el perfil de chat\?</string>
<string name="ttl_hour">%d hora</string>
<string name="ttl_day">%d día</string>
<string name="v4_5_multiple_chat_profiles_descr">Nombre y avatar diferentes, aislamiento de transporte.</string>
<string name="button_delete_contact">Eliminar contacto</string>
<string name="smp_servers_delete_server">Eliminar servidor</string>
<string name="display_name">Nombre Mostrado</string>
<string name="callstate_connected">conectado</string>
<string name="settings_section_title_device">DISPOSITIVO</string>
<string name="database_passphrase">Contraseña base de datos</string>
<string name="delete_database">Eliminar base de datos</string>
<string name="delete_files_and_media_all">Eliminar todos los archivos</string>
<string name="current_passphrase">Contraseña actual…</string>
<string name="button_delete_group">Eliminar grupo</string>
<string name="button_edit_group_profile">Editar perfil de grupo</string>
<string name="info_row_connection">Conexión</string>
<string name="users_delete_profile_for">Eliminar el perfil de chat para</string>
<string name="theme_dark">Oscuro</string>
<string name="ttl_d">%dd</string>
<string name="ttl_days">%d días</string>
<string name="delete_files_and_media_question">¿Eliminar archivos y multimedia\?</string>
<string name="archive_created_on_ts">Creado: <xliff:g id="archive_ts">%1$s</xliff:g></string>
<string name="delete_archive">Eliminar archivo</string>
<string name="group_member_status_connected">conectado</string>
<string name="conn_level_desc_direct">directo</string>
<string name="chat_preferences_contact_allows">El contacto permite</string>
<string name="chat_preferences_default">predefinido (%s)</string>
<string name="full_deletion">Eliminar para todos</string>
<string name="feature_enabled">activado</string>
<string name="contacts_can_mark_messages_for_deletion">El contacto puede marcar los mensajes para eliminar; tu podrás verlos.</string>
<string name="ttl_w">%ds</string>
<string name="deleted_description">eliminado</string>
<string name="connect_via_contact_link">¿Conectar mediante enlace de contacto\?</string>
<string name="connect_via_group_link">¿Conectar mediante enlace de grupo\?</string>
<string name="connect_via_invitation_link">¿Conectar mediante enlace de invitación\?</string>
<string name="connect_via_link_verb">Conectar</string>
<string name="server_connected">conectado</string>
<string name="server_connecting">conectando</string>
<string name="display_name_connecting">conectando…</string>
<string name="contact_connection_pending">conectando…</string>
<string name="group_connection_pending">conectando…</string>
<string name="icon_descr_context">Icono contextual</string>
<string name="status_contact_has_no_e2e_encryption">El contacto no dispone de cifrado e2e</string>
<string name="icon_descr_call_connecting">Conectando llamada</string>
<string name="create_secret_group_title">Crear grupo secreto</string>
<string name="icon_descr_email">Email</string>
<string name="connect_button">Conectar</string>
<string name="connect_via_link">Conectar mediante enlace</string>
<string name="database_passphrase_and_export">Contraseña y exportar la base de datos</string>
<string name="contribute">Contribuye</string>
<string name="core_build_timestamp">Core compilado: %s</string>
<string name="core_version">Core versión: v%s</string>
<string name="contact_requests">Solicitud del contacto</string>
<string name="delete_image">Eliminar imagen</string>
<string name="edit_image">Editar imagen</string>
<string name="settings_section_title_chats">CHATS</string>
<string name="change_verb">Cambiar</string>
<string name="notifications_mode_periodic_desc">Comprueba mensajes nuevos de hasta un minuto cada 10 minutos</string>
<string name="clear_contacts_selection_button">Limpiar</string>
<string name="change_member_role_question">¿Cambiar rol de grupo\?</string>
<string name="v4_4_verify_connection_security_desc">Compara los códigos de seguridad con tus contactos</string>
<string name="choose_file">Elije archivo</string>
<string name="clear_verb">Limpiar</string>
<string name="clear_chat_button">Limpiar chat</string>
<string name="configure_ICE_servers">Configurar servidores ICE</string>
<string name="callstatus_ended">Llamada terminada <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
<string name="callstatus_error">error en la llamada</string>
<string name="callstatus_calling">llamando</string>
<string name="callstatus_in_progress">llamada en curso</string>
<string name="colored">coloreado</string>
<string name="rcv_group_event_changed_your_role">su rol a cambiado a %s</string>
<string name="snd_conn_event_switch_queue_phase_changing_for_member">cambiando dirección por %s</string>
<string name="group_member_status_complete">completado</string>
<string name="invite_prohibited">¡No se puede invitar el contacto!</string>
<string name="cannot_receive_file">No se puede recibir el archivo</string>
<string name="database_initialization_error_title">No se puede iniciar la base de datos</string>
<string name="clear_chat_question">Limpiar chat\?</string>
<string name="network_session_mode_user">Perfil de Chat</string>
<string name="chat_is_stopped_indication">El chat está detenido</string>
<string name="rcv_group_event_changed_member_role">rol de %s cambiado a %s</string>
<string name="change_role">Cambiar rol</string>
<string name="v4_5_transport_isolation_descr">A través del perfil de chat (por defecto) or a través de conexión (BETA)</string>
<string name="snd_conn_event_switch_queue_phase_changing">cambiando dirección…</string>
<string name="chat_preferences">Preferencias de chat</string>
<string name="feature_cancelled_item">cancelado %s</string>
<string name="chat_is_stopped">El chat está detenido</string>
<string name="settings_section_title_calls">LLAMADAS</string>
<string name="chat_is_running">El chat está en ejecución</string>
<string name="rcv_conn_event_switch_queue_phase_changing">cambiando dirección…</string>
<string name="chat_with_developers">habla con los desarrolladores</string>
<string name="icon_descr_cancel_file_preview">Cancelar vista previa del archivo</string>
<string name="icon_descr_cancel_image_preview">Cancelar vista previa de la imagen</string>
<string name="icon_descr_call_ended">Llamada terminada</string>
<string name="icon_descr_call_progress">Llamada en curso</string>
<string name="change_database_passphrase_question">¿Cambiar contraseña de la base de datos\?</string>
<string name="cannot_access_keychain">No se puede acceder a Keystore para guardar la base de datos de contraseñas</string>
<string name="chat_archive_header">Archivo del chat</string>
<string name="chat_archive_section">ARCHIVOS DE CHAT</string>
<string name="cancel_verb">Cancelar</string>
<string name="icon_descr_cancel_live_message">Cancelar mensaje en directo</string>
<string name="confirm_verb">Confirmar</string>
<string name="clear_chat_menu_action">Limpiar</string>
<string name="app_version_code">Build de la aplicación</string>
<string name="call_already_ended">¡La llamada ha terminado!</string>
<string name="rcv_conn_event_switch_queue_phase_completed">su dirección ha cambiado para tí</string>
<string name="icon_descr_cancel_link_preview">cancelar vista previa del enlace</string>
<string name="call_on_lock_screen">Llamadas en la ventana de bloqueo</string>
<string name="alert_title_cant_invite_contacts">¡No se puede invitar a los contactos!</string>
<string name="chat_console">Consola del chat</string>
<string name="chat_database_section">BASE DE DATOS DE CHAT</string>
<string name="chat_database_deleted">Base de datos eliminada</string>
<string name="chat_database_imported">Base de datos importada</string>
<string name="smp_servers_check_address">Comprueba la dirección del servidor e inténtalo de nuevo.</string>
<string name="confirm_new_passphrase">Confirma la contraseña nueva…</string>
<string name="network_disable_socks_info">Si confirmas los servidores de mensajería podrán ver tu IP, y tu proveedor de acceso a internet a qué servidores te estás conectando.</string>
<string name="image_saved">Imagen guardada en la Galería</string>
<string name="file_will_be_received_when_contact_is_online">El archivo se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde.</string>
<string name="add_contact">Enlace único de invitación</string>
<string name="paste_the_link_you_received">Pegar enlace recibido</string>
<string name="error_saving_group_profile">Error guardando perfil de grupo</string>
<string name="exit_without_saving">Salir sin guardar</string>
<string name="file_saved">Archivo guardado</string>
<string name="icon_descr_flip_camera">Voltear la cámara</string>
<string name="group_invitation_expired">Invitación de grupo caducada</string>
<string name="alert_message_group_invitation_expired">La invitación al grupo ya no es válida, ha sido eliminada por el remitente.</string>
<string name="delete_group_for_self_cannot_undo_warning">El grupo se eliminará para tí. ¡No puede deshacerse!</string>
<string name="how_to_use_markdown">Cómo usar el marcador</string>
<string name="description_via_one_time_link_incognito">Incógnito mediante enlace único</string>
<string name="simplex_link_contact">Dirección de contacto SimpleX</string>
<string name="error_saving_smp_servers">Error guardando servidores SMP</string>
<string name="simplex_link_mode_browser_warning">Abrir el enlace en el navegador puede reducir la privacidad y seguridad de la conexión. Los enlaces SimpleX que no son de confianza aparecerán en rojo.</string>
<string name="error_setting_network_config">Error al actualizar la configuración de red</string>
<string name="error_creating_address">Error creando dirección</string>
<string name="error_deleting_user">Error eliminando perfil de usuario</string>
<string name="auth_enable_simplex_lock">Activar SimpleX Lock</string>
<string name="one_time_link">Enlace único de invitación</string>
<string name="smp_servers">Servidores SMP</string>
<string name="settings_experimental_features">Características experimentales</string>
<string name="error_importing_database">Error importando la base de datos</string>
<string name="error_changing_message_deletion">Error cambiando configuración</string>
<string name="file_with_path">Archivo: %s</string>
<string name="failed_to_active_user_title">¡Error cambiando perfil!</string>
<string name="smp_servers_enter_manually">Introduce el servidor manualmente</string>
<string name="how_to_use_your_servers">Cómo usar tus servidores</string>
<string name="error_stopping_chat">Error deteniendo el chat</string>
<string name="enter_correct_passphrase">Introduce la contraseña correcta.</string>
<string name="enter_passphrase">Introduce la contraseña…</string>
<string name="icon_descr_group_inactive">Grupo inactivo</string>
<string name="group_member_status_group_deleted">grupo eliminado</string>
<string name="group_members_can_send_disappearing">Los miembros del grupo pueden enviar mensajes temporales.</string>
<string name="v4_2_group_links">Enlaces de grupo</string>
<string name="invalid_connection_link">Enlace de conexión no válido</string>
<string name="error_accepting_contact_request">Error aceptando la solicitud del contacto</string>
<string name="error_changing_address">Error cambiando la dirección</string>
<string name="error_saving_file">Error al guardar archivo</string>
<string name="icon_descr_server_status_error">Error</string>
<string name="from_gallery_button">De la Galería</string>
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">Si has recibido el enlace de invitación a <xliff:g id="appName">SimpleX Chat</xliff:g>, puedes abrirlo en tu navegador:</string>
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">Si eliges rechazar, el remitente NO será notificado.</string>
<string name="invalid_contact_link">¡Enlace no válido!</string>
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">Si no puedes reunirte en persona, puedes <b>escanear el código QR en la videollamada</b>, o tu contacto puede compartir un enlace de invitación.</string>
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel">Si no puedes reunirte en persona, <b>muestra el código QR en la videollamada</b>, o comparte el enlace.</string>
<string name="how_to">Cómo</string>
<string name="ignore">Ignorar</string>
<string name="error_deleting_database">Error eliminando la base de datos</string>
<string name="encrypted_database">Base de datos cifrada</string>
<string name="error_removing_member">Error eliminando miembro</string>
<string name="group_members_can_send_voice">Los miembros del grupo pueden mandar mensajes de voz.</string>
<string name="description_via_contact_address_link_incognito">Incógnito mediante enlace de dirección del contacto</string>
<string name="failed_to_create_user_title">Error creando perfil!</string>
<string name="failed_to_parse_chat_title">No se pudo cargar el chat</string>
<string name="failed_to_parse_chats_title">No se pudieron cargar los chats</string>
<string name="simplex_link_mode_full">Enlace completo</string>
<string name="error_deleting_contact">Error eliminando contacto</string>
<string name="error_joining_group">Error uniéndose al grupo</string>
<string name="error_receiving_file">Error recibiendo archivo</string>
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">Comprueba que has usado el enlace correcto o pide a tu contacto que te envíe otro.</string>
<string name="error_deleting_contact_request">Error eliminando la solicitud de contacto</string>
<string name="error_deleting_group">Error al eliminar grupo</string>
<string name="error_deleting_pending_contact_connection">Error al eliminar conexión de contacto pendiente</string>
<string name="hide_notification">Ocultar</string>
<string name="notification_preview_mode_hidden">Oculto</string>
<string name="notification_display_mode_hidden_desc">Ocultar contacto y mensaje</string>
<string name="hide_verb">Ocultar</string>
<string name="for_everybody">Para todos</string>
<string name="icon_descr_file">Archivo</string>
<string name="icon_descr_image_snd_complete">Imagen enviada</string>
<string name="image_will_be_received_when_contact_is_online">La imagen se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde.</string>
<string name="image_descr_link_preview">vista previa del enlace</string>
<string name="error_saving_ICE_servers">Error guardando servidores ICE</string>
<string name="enter_one_ICE_server_per_line">Servidores ICE (uno por línea)</string>
<string name="full_name__field">Nombre completo:</string>
<string name="people_can_connect_only_via_links_you_share">Las personas pueden conectarse contigo solo mediante los enlaces que compartes.</string>
<string name="how_simplex_works">Cómo funciona <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="icon_descr_hang_up">Colgar</string>
<string name="files_and_media_section">Archivo y multimedia</string>
<string name="alert_title_no_group">¡Grupo no encontrado!</string>
<string name="snd_group_event_group_profile_updated">perfil de grupo actualizado</string>
<string name="error_creating_link_for_group">Error al crear enlace de grupo</string>
<string name="error_deleting_link_for_group">Error al eliminar enlace de grupo</string>
<string name="feature_enabled_for_contact">activado para el contacto</string>
<string name="v4_4_french_interface">Interfaz en francés</string>
<string name="image_descr">Imagen</string>
<string name="file_not_found">Archivo no encontrado</string>
<string name="how_to_use_simplex_chat">Cómo usar</string>
<string name="full_name_optional__prompt">Nombre completo (opcional)</string>
<string name="callstate_ended">finalizado</string>
<string name="settings_section_title_help">AYUDA</string>
<string name="export_database">Exportar base de datos</string>
<string name="error_exporting_chat_database">Error exportando la base de datos</string>
<string name="error_starting_chat">Error iniciando chat</string>
<string name="rcv_group_event_invited_via_your_group_link">Invitado mediante tu enlace de grupo</string>
<string name="error_updating_link_for_group">Error actualizando el enlace de grupo</string>
<string name="section_title_for_console">PARA CONSOLA</string>
<string name="error_changing_role">Error cambiando rol</string>
<string name="conn_stats_section_title_servers">SERVIDORES</string>
<string name="group_display_name_field">Nombre mostrado del grupo:</string>
<string name="group_preferences">Preferencias del grupo</string>
<string name="group_members_can_send_dms">Los miembros del grupo pueden enviar mensajes directos.</string>
<string name="group_members_can_delete">Los miembros del grupo pueden eliminar mensajes de forma irreversible.</string>
<string name="v4_3_improved_privacy_and_security_desc">Ocultar pantalla de aplicaciones en aplicaciones recientes.</string>
<string name="encrypt_database">Cifrar</string>
<string name="icon_descr_expand_role">Ampliar la selección de roles</string>
<string name="delete_group_for_all_members_cannot_undo_warning">El grupo se eliminará para todos los miembros. ¡No puede deshacerse!</string>
<string name="network_option_enable_tcp_keep_alive">Activar TCP keep-alive</string>
<string name="feature_enabled_for_you">activado para tí</string>
<string name="server_error">error</string>
<string name="description_via_group_link_incognito">Incógnito mediante enlace de grupo</string>
<string name="error_adding_members">Error al añadir miembro(s)</string>
<string name="error_sending_message">Error enviando mensaje</string>
<string name="error_encrypting_database">Error cifrando la base de datos</string>
<string name="encrypt_database_question">¿Cifrar base de datos\?</string>
<string name="error_with_info">Error: %s</string>
<string name="group_link">Enlace de grupo</string>
<string name="info_row_group">Grupo</string>
<string name="group_full_name_field">Nombre completo del grupo:</string>
<string name="group_profile_is_stored_on_members_devices">El perfil de grupo se almacena en los dispositivos, no en los servidores.</string>
<string name="icon_descr_help">ayuda</string>
<string name="paste_connection_link_below_to_connect">Pega el enlace que has recibido en el recuadro para conectar con tu contacto.</string>
<string name="share_link">Compartir enlace</string>
<string name="how_it_works">Cómo funciona</string>
<string name="delete_message_cannot_be_undone_warning">El mensaje se eliminará. ¡No puede deshacerse!</string>
<string name="incognito_info_protects">El modo incógnito protege la identidad del perfil principal, por cada contacto nuevo se genera un perfil nuevo aleatorio.</string>
<string name="turn_off_battery_optimization">Para poder usarse <b>deshabilita la optimización de batería</b> para <xliff:g id="appName">SimpleX</xliff:g> en el siguiente cuadro de diálogo. De lo contrario las notificaciones estarán desactivadas.</string>
<string name="install_simplex_chat_for_terminal">Instalar <xliff:g id="appNameFull">SimpleX Chat</xliff:g> para terminal</string>
<string name="group_invitation_item_description">invitación al grupo <xliff:g id="group_name">%1$s</xliff:g></string>
<string name="rcv_group_event_member_added">invitado <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="incognito_info_allows">Permite tener muchas conexiones anónimas sin datos compartidos entre estas en un único perfil de chat.</string>
<string name="invite_to_group_button">Invitar al grupo</string>
<string name="to_verify_compare">Para comprobar el cifrado de extremo a extremo con su contacto compare (o escanee) el código en sus dispositivos.</string>
<string name="database_is_not_encrypted">La base de datos no está cifrada. Establece una contraseña para protegerla.</string>
<string name="ensure_smp_server_address_are_correct_format_and_unique">Asegúrate de que las direcciones del servidor SMP tienen el formato correcto, están separadas por líneas y no duplicadas.</string>
<string name="icon_descr_instant_notifications">Notificación instantánea</string>
<string name="network_settings_title">Configuración de red</string>
<string name="network_use_onion_hosts_no_desc_in_alert">No se usarán hosts .onion</string>
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages">Sólo los dispositivos cliente almacenan perfiles de usuario, contactos, grupos y mensajes enviados con <b>cifrado de extremo a extremo de 2 capas</b> .</string>
<string name="onboarding_notifications_mode_subtitle">Puede cambiarse más tarde en Configuración.</string>
<string name="onboarding_notifications_mode_service">Instantánea</string>
<string name="join_group_button">Únete</string>
<string name="join_group_incognito_button">Únete en modo incógnito</string>
<string name="conn_level_desc_indirect">indirecto (<xliff:g id="conn_level">%1$s</xliff:g>)</string>
<string name="theme_light">Claro</string>
<string name="chat_preferences_on">Activado</string>
<string name="message_deletion_prohibited">La eliminación irreversible de mensajes está prohibida en este chat.</string>
<string name="message_deletion_prohibited_in_chat">La eliminación irreversible de mensajes está prohibida en este grupo.</string>
<string name="v4_3_improved_server_configuration">Configuración del servidor mejorada</string>
<string name="alert_text_skipped_messages_it_can_happen_when">Esto puede suceder cuando:
\n1. Los mensajes caducan en el servidor si no se han recibido durante 30 días.
\n2. El servidor que utiliza para recibir los mensajes de este contacto fue actualizado y reiniciado.
\n3. La conexión está comprometida.
\nPor favor, contacta con los desarrolladores a través del menú Configuración para recibir actualizaciones sobre los servidores.
\nAñadiremos redundancia de servidores para evitar la pérdida de mensajes.</string>
<string name="notification_preview_mode_message">Texto del mensaje</string>
<string name="member_info_section_title_member">MIEMBRO</string>
<string name="chat_item_ttl_none">nunca</string>
<string name="network_use_onion_hosts_required_desc_in_alert">Se requieren hosts .onion para la conexión</string>
<string name="network_use_onion_hosts_no_desc">No se usarán hosts .onion</string>
<string name="settings_notification_preview_title">Vista previa de notificación</string>
<string name="alert_title_group_invitation_expired">¡Invitación caducada!</string>
<string name="group_member_status_left">ha salido</string>
<string name="v4_4_live_messages">Mensajes en vivo</string>
<string name="service_notifications">Notificación instantánea</string>
<string name="settings_notifications_mode_title">Servicio de notificaciones</string>
<string name="delete_message_mark_deleted_warning">El mensaje se marcará para eliminar. El destinatario o destinatarios podrán revelar este mensaje.</string>
<string name="live_message">¡Mensaje en vivo!</string>
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app">📱 móvil: pulse <b>Abrir en aplicación móvil</b>, después pulse <b>Conectar</b> en la aplicación.</string>
<string name="mark_read">Marcar como leído</string>
<string name="mark_unread">Marcar como no leído</string>
<string name="invalid_QR_code">Código QR inválido</string>
<string name="incorrect_code">¡Código de seguridad incorrecto!</string>
<string name="markdown_in_messages">Marcadores en mensajes</string>
<string name="network_use_onion_hosts_no">No</string>
<string name="callstatus_missed">llamada perdida</string>
<string name="import_database_confirmation">Importar</string>
<string name="snd_group_event_changed_role_for_yourself">has cambiado tu rol a %s</string>
<string name="button_add_members">Invitar miembros</string>
<string name="no_contacts_selected">Ningún contacto seleccionado</string>
<string name="feature_offered_item">ofrecido %s</string>
<string name="feature_offered_item_with_param">ofrecido %s: %2s</string>
<string name="moderated_item_description">moderado por %s</string>
<string name="invalid_chat">chat no válido</string>
<string name="invalid_data">datos no válidos</string>
<string name="invalid_message_format">formato de mensaje no válido</string>
<string name="live">EN VIVO</string>
<string name="moderated_description">moderado</string>
<string name="display_name_invited_to_connect">invitado a conectarse</string>
<string name="service_notifications_disabled">¡Las notificaciones instantáneas están desactivadas!</string>
<string name="notification_preview_new_message">mensaje nuevo</string>
<string name="notification_new_contact_request">Nueva solicitud de contacto</string>
<string name="auth_log_in_using_credential">Inicie sesión con sus credenciales</string>
<string name="message_delivery_error_title">Error en la entrega del mensaje</string>
<string name="message_delivery_error_desc">Lo más probable es que este contacto haya eliminado la conexión contigo.</string>
<string name="moderate_verb">Moderar</string>
<string name="group_preview_join_as">unirse como %s</string>
<string name="images_limit_desc">Sólo se pueden enviar 10 imágenes al mismo tiempo</string>
<string name="large_file">¡Archivo grande!</string>
<string name="mute_chat">Silenciar</string>
<string name="ensure_ICE_server_address_are_correct_format_and_unique">Asegúrate de que las direcciones del servidor WebRTC ICE tienen el formato correcto, están separadas por líneas y no duplicadas.</string>
<string name="network_use_onion_hosts_required_desc">Se requieren hosts .onion para la conexión</string>
<string name="network_use_onion_hosts_prefer_desc_in_alert">Se usarán hosts .onion cuando estén disponibles.</string>
<string name="immune_to_spam_and_abuse">Inmune a spam y abuso</string>
<string name="many_people_asked_how_can_it_deliver">Muchos se preguntarán: <i>si <xliff:g id="appName">SimpleX</xliff:g> no tiene identificadores de usuario, ¿cómo puede entregar los mensajes\?</i></string>
<string name="incoming_video_call">Videollamada entrante</string>
<string name="snd_group_event_user_left">has salido</string>
<string name="snd_conn_event_switch_queue_phase_completed">has cambiado la dirección</string>
<string name="feature_off">apagado</string>
<string name="v4_3_irreversible_message_deletion">Eliminación del mensaje irreversible</string>
<string name="v4_3_voice_messages_desc">Máximo 40 segundos, recibido al instante.</string>
<string name="v4_5_italian_interface">Interfaz en italiano</string>
<string name="v4_5_message_draft">Borrador de mensaje</string>
<string name="v4_5_reduced_battery_usage_descr">¡Pronto habrá más mejoras!</string>
<string name="v4_5_multiple_chat_profiles">Múltiples perfiles de chat</string>
<string name="notifications">Notificaciones</string>
<string name="no_details">sin detalles</string>
<string name="ok">OK</string>
<string name="only_stored_on_members_devices">(sólo almacenado por miembros del grupo)</string>
<string name="markdown_help">Ayuda marcadores</string>
<string name="network_and_servers">Redes y servidores</string>
<string name="network_use_onion_hosts_prefer_desc">Se usarán hosts .onion cuando estén disponibles.</string>
<string name="italic">cursiva</string>
<string name="incoming_audio_call">Llamada entrante</string>
<string name="video_call_no_encryption">videollamada (sin cifrado e2e)</string>
<string name="status_no_e2e_encryption">sin cifrado e2e</string>
<string name="import_database">Importar base de datos</string>
<string name="settings_section_title_messages">MENSAJES</string>
<string name="import_database_question">¿Importar base de datos\?</string>
<string name="no_received_app_files">Sin archivos recibidos o enviados</string>
<string name="messages_section_title">Mensajes</string>
<string name="new_passphrase">Contraseña nueva…</string>
<string name="join_group_question">¿Unirse al grupo\?</string>
<string name="joining_group">Únete al grupo</string>
<string name="keychain_error">Error en Keystore</string>
<string name="icon_descr_add_members">Invitar miembros</string>
<string name="group_member_role_observer">observador</string>
<string name="group_member_role_member">miembro</string>
<string name="group_member_status_removed">eliminado</string>
<string name="group_member_status_invited">invitado</string>
<string name="no_contacts_to_add">Sin contactos que añadir</string>
<string name="new_member_role">Nuevo rol de miembro</string>
<string name="initial_member_role">Rol inicial</string>
<string name="info_row_local_name">Nombre local</string>
<string name="network_status">Estado de la red</string>
<string name="incognito">Incógnito</string>
<string name="chat_preferences_off">apagado</string>
<string name="new_in_version">Nuevo en %s</string>
<string name="v4_3_improved_privacy_and_security">Seguridad y privacidad mejoradas</string>
<string name="settings_section_title_incognito">Modo incógnito</string>
<string name="new_database_archive">Nuevo archivo de base de datos</string>
<string name="old_database_archive">Archivo de base de datos antiguo</string>
<string name="snd_conn_event_switch_queue_phase_completed_for_member">has cambiado la dirección por %s</string>
<string name="rcv_group_event_member_left">ha salido</string>
<string name="button_leave_group">Salir del grupo</string>
<string name="only_group_owners_can_change_prefs">Sólo los propietarios del grupo pueden cambiar las preferencias de grupo.</string>
<string name="users_delete_data_only">Sólo datos del perfil local</string>
<string name="chat_preferences_no">no</string>
<string name="thousand_abbreviation">k</string>
<string name="marked_deleted_description">marcado eliminado</string>
<string name="icon_descr_call_missed">Llamada perdida</string>
<string name="notifications_will_be_hidden">¡Las notificaciones seguirán enviándose hasta que la aplicación se detenga!</string>
<string name="leave_group_button">Salir</string>
<string name="leave_group_question">¿Salir del grupo\?</string>
<string name="group_member_role_owner">propietario</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">El miembro será eliminado del grupo. ¡No puede deshacerse!</string>
<string name="only_group_owners_can_enable_voice">Sólo los propietarios del grupo pueden activar los mensajes de voz.</string>
<string name="group_unsupported_incognito_main_profile_sent">El modo incógnito no se admite aquí, tu perfil principal aparecerá en miembros del grupo</string>
<string name="icon_descr_more_button">Más</string>
<string name="mark_code_verified">Marcar como verificado</string>
<string name="smp_servers_invalid_address">¡Dirección de servidor no válida!</string>
<string name="make_private_connection">Establecer una conexión privada</string>
<string name="network_error_desc">Comprueba su conexión de red con <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g> e inténtelo de nuevo.</string>
<string name="sender_may_have_deleted_the_connection_request">El remitente puede haber eliminado la solicitud de conexión.</string>
<string name="error_smp_test_certificate">Posiblemente la huella digital del certificado en la dirección del servidor es incorrecta</string>
<string name="reply_verb">Responder</string>
<string name="save_passphrase_in_keychain">Guardar contraseña en Keystore</string>
<string name="database_restore_error">Error al restaurar la base de datos</string>
<string name="select_contacts">Seleccionar contactos</string>
<string name="save_group_profile">Guardar perfil de grupo</string>
<string name="reset_color">Restablecer colores</string>
<string name="only_you_can_send_disappearing">Sólo tú puedes enviar mensajes temporales</string>
<string name="only_your_contact_can_send_disappearing">Sólo tu contacto puede enviar mensajes temporales.</string>
<string name="prohibit_sending_voice">Prohibir el envío de mensajes de voz.</string>
<string name="notifications_mode_off">Se ejecuta cuando la aplicación está abierta</string>
<string name="auth_open_chat_console">Abrir la consola de chat</string>
<string name="save_verb">Guardar</string>
<string name="restore_database_alert_confirm">Restaurar</string>
<string name="network_options_save">Guardar</string>
<string name="prohibit_message_deletion">Prohibir la eliminación irreversible de mensajes.</string>
<string name="v4_4_live_messages_desc">Los destinatarios ven la actualizacion mientras escribes.</string>
<string name="icon_descr_send_message">Enviar Mensaje</string>
<string name="toast_permission_denied">¡Permiso denegado!</string>
<string name="scan_code">Escanear código</string>
<string name="saved_ICE_servers_will_be_removed">Se eliminarán los servidores WebRTC ICE guardados.</string>
<string name="callstatus_rejected">llamada rechazada</string>
<string name="secret">secreto</string>
<string name="open_simplex_chat_to_accept_call">Abrir <xliff:g id="appNameFull">SimpleX Chat</xliff:g> para aceptar llamada</string>
<string name="network_options_reset_to_defaults">Restablecer valores por defecto</string>
<string name="save_color">Guardar color</string>
<string name="icon_descr_server_status_pending">Pendiente</string>
<string name="periodic_notifications">Notificaciones periódicas</string>
<string name="store_passphrase_securely">Guarda la contraseña de forma segura, NO podrás cambiarla si la pierdes.</string>
<string name="restart_the_app_to_create_a_new_chat_profile">Reinicia la aplicación para crear un nuevo perfil de chat.</string>
<string name="restore_database_alert_title">¿Restaurar copia de seguridad de la base de datos\?</string>
<string name="onboarding_notifications_mode_title">Notificaciones privadas</string>
<string name="image_descr_profile_image">imagen del perfil</string>
<string name="prohibit_sending_voice_messages">Prohibir el envío de mensajes de voz.</string>
<string name="protect_app_screen">Proteger la pantalla de la aplicación</string>
<string name="read_more_in_github_with_link">Más información en nuestro <font color="#0088ff">repositorio GitHub</font> .</string>
<string name="icon_descr_record_voice_message">Grabar mensaje de voz</string>
<string name="rcv_group_event_member_deleted">eliminado <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="send_link_previews">Enviar previsualizaciones de enlaces</string>
<string name="send_live_message_desc">Envía un mensaje en vivo: se actualizará para el(los) destinatario(s) a medida que se escribe</string>
<string name="icon_descr_sent_msg_status_send_failed">error de envío</string>
<string name="sending_via">Enviando mediante</string>
<string name="contact_developers">Actualiza la aplicación y ponte en contacto con los desarrolladores.</string>
<string name="sender_cancelled_file_transfer">El remitente ha cancelado la transferencia de archivos.</string>
<string name="smp_server_test_secure_queue">Cola segura</string>
<string name="enter_passphrase_notification_title">Se necesita contraseña</string>
<string name="periodic_notifications_disabled">Notificaciones periódicas desactivadas</string>
<string name="simplex_service_notification_text">Recibiendo mensajes…</string>
<string name="reveal_verb">Revelar</string>
<string name="icon_descr_sent_msg_status_sent">enviado</string>
<string name="reject_contact_button">Rechazar</string>
<string name="network_use_onion_hosts_required">Obligatorio</string>
<string name="save_and_notify_contacts">Guardar y notificar contactos</string>
<string name="opensource_protocol_and_code_anybody_can_run_servers">Protocolo y código abiertos: cualquiera puede usar los servidores.</string>
<string name="role_in_group">Rol</string>
<string name="network_options_revert">Revertir</string>
<string name="network_option_ping_interval">Intervalo PING</string>
<string name="network_option_ping_count">Contador PING</string>
<string name="only_your_contact_can_delete">Sólo tu contacto puede eliminar mensajes de forma irreversible (tu puedes marcar para eliminar).</string>
<string name="v4_5_message_draft_descr">Conserva el último borrador del mensaje con los datos adjuntos.</string>
<string name="v4_5_private_filenames">Nombres de archivos privados</string>
<string name="v4_5_reduced_battery_usage">Reducción del uso de la batería</string>
<string name="observer_cant_send_message_desc">Póngase en contacto con el administrador del grupo.</string>
<string name="ask_your_contact_to_enable_voice">Solicita que tu contacto habilite el envío de mensajes de voz.</string>
<string name="send_live_message">Enviar mensaje en vivo</string>
<string name="scan_QR_code">Escanear código QR</string>
<string name="send_verb">Enviar</string>
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(escanear o pegar desde el portapapeles)</string>
<string name="icon_descr_profile_image_placeholder">Espacio reservado para la imagen del perfil</string>
<string name="image_descr_qr_code">Código QR</string>
<string name="chat_with_the_founder">Envía consultas e ideas</string>
<string name="smp_servers_preset_address">Dirección del servidor predefinida</string>
<string name="send_us_an_email">Contacta por email</string>
<string name="rate_the_app">Valora la aplicación</string>
<string name="save_servers_button">Guardar</string>
<string name="callstate_received_answer">respuesta recibida…</string>
<string name="callstate_received_confirmation">confirmación recibida…</string>
<string name="onboarding_notifications_mode_periodic">Periódico</string>
<string name="privacy_redefined">Privacidad redefinida</string>
<string name="read_more_in_github">Más información en nuestro repositorio GitHub.</string>
<string name="reject">Rechazar</string>
<string name="open_verb">Abrir</string>
<string name="icon_descr_call_pending_sent">Llamada pendiente</string>
<string name="privacy_and_security">Privacidad y seguridad</string>
<string name="store_passphrase_securely_without_recover">Guarda la contraseña de forma segura, NO podrás acceder al chat si la pierdes.</string>
<string name="save_archive">Guardar archivo</string>
<string name="restore_database_alert_desc">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.</string>
<string name="rcv_group_event_user_deleted">te ha eliminado</string>
<string name="receiving_via">Recibiendo mediante</string>
<string name="network_option_protocol_timeout">Tiempo de espera del protocolo</string>
<string name="network_option_seconds_label">seg</string>
<string name="users_delete_with_connections">Perfil y conexiones de servidor</string>
<string name="prohibit_sending_disappearing_messages">Prohibir el envío de mensajes temporales</string>
<string name="only_you_can_send_voice">Sólo tú puedes enviar mensajes de voz.</string>
<string name="only_your_contact_can_send_voice">Sólo tu contacto puede enviar mensajes de voz.</string>
<string name="run_chat_section">EJECUTAR CHAT</string>
<string name="restart_the_app_to_use_imported_chat_database">Reinicia la aplicación para poder usar la base de datos importada.</string>
<string name="enter_correct_current_passphrase">Introduce la contraseña actual correcta.</string>
<string name="feature_received_prohibited">recepción prohibida</string>
<string name="only_you_can_delete_messages">Sólo tú puedes eliminar mensajes de forma irreversible (tu contacto puede marcar para eliminar).</string>
<string name="prohibit_direct_messages">Prohibir el envío de mensajes directos a los miembros.</string>
<string name="prohibit_sending_disappearing">Prohibir el envío de mensajes temporales</string>
<string name="v4_2_security_assessment">Evaluación de la seguridad</string>
<string name="receiving_files_not_yet_supported">la recepción de archivos aún no está disponible</string>
<string name="sending_files_not_yet_supported">el envío de archivos aún no está disponible</string>
<string name="call_connection_peer_to_peer">entre particulares</string>
<string name="icon_descr_call_rejected">Llamada rechazada</string>
<string name="remove_passphrase">Eliminar</string>
<string name="remove_passphrase_from_keychain">¿Eliminar contraseña de Keystore\?</string>
<string name="open_chat">Abrir chat</string>
<string name="restore_database">Restaurar copia de seguridad de la base de datos</string>
<string name="save_passphrase_and_open_chat">Guardar contraseña y abrir el chat</string>
<string name="restore_passphrase_not_found_desc">La contraseña no se ha encontrado en Keystore, introdúzcala manualmente. Esto puede haber ocurrido si has restaurado los datos de la aplicación con una herramienta de copia de seguridad. Si no es así, ponte en contacto con los desarrolladores.</string>
<string name="remove_member_confirmation">Eliminar</string>
<string name="button_remove_member">Eliminar miembro</string>
<string name="button_send_direct_message">Enviar mensaje directo</string>
<string name="reset_verb">Restablecer</string>
<string name="paste_button">Pegar</string>
<string name="security_code">Código de seguridad</string>
<string name="scan_code_from_contacts_app">Escanea el código de seguridad desde la aplicación de tu contacto.</string>
<string name="smp_servers_save">Guardar servidores</string>
<string name="smp_servers_scan_qr">Escanear código QR del servidor</string>
<string name="smp_servers_preset_server">Servidor predefinido</string>
<string name="save_and_notify_contact">Guardar y notificar contacto</string>
<string name="save_preferences_question">¿Guardar preferencias\?</string>
<string name="save_and_notify_group_members">Guardar y notificar a los miembros del grupo</string>
<string name="connection_error_auth_desc">A menos que tu contacto haya eliminado la conexión o que este enlace ya se haya utilizado, podría tratarse de un error. Por favor, notifícalo.
\nPara conectarte, pide a tu contacto que cree otro enlace de conexión y comprueba que tienes buena conexión de red.</string>
<string name="periodic_notifications_desc">La aplicación recoge nuevos mensajes periódicamente por lo que utiliza un pequeño porcentaje de la batería al día. La aplicación no hace uso de notificaciones automáticas: los datos de tu dispositivo no se envían a los servidores.</string>
<string name="la_notice_title_simplex_lock">Bloqueo SimpleX</string>
<string name="auth_unlock">Desbloquear</string>
<string name="this_text_is_available_in_settings">Este texto está disponible en Configuración</string>
<string name="switch_receiving_address_desc">¡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).</string>
<string name="chat_lock">Bloqueo SimpleX</string>
<string name="using_simplex_chat_servers">Usando servidores <xliff:g id="appNameFull">SimpleX Chat</xliff:g>.</string>
<string name="network_session_mode_transport_isolation">Aislamiento de transporte</string>
<string name="strikethrough">tachado</string>
<string name="use_chat">Usar Chat</string>
<string name="settings_section_title_socks">PROXY SOCKS</string>
<string name="settings_section_title_themes">TEMAS</string>
<string name="stop_chat_confirmation">Detener</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">Esta acción no se puede deshacer. Tu perfil, contactos, mensajes y archivos se perderán irreversiblemente.</string>
<string name="skip_inviting_button">Omitir invitación a miembros</string>
<string name="settings_notification_preview_mode_title">Mostrar vista previa</string>
<string name="la_notice_turn_on">Activar</string>
<string name="share_verb">Compartir</string>
<string name="icon_descr_sent_msg_status_unauthorized_send">envío no autorizado</string>
<string name="set_contact_name">Introduce el nombre del contacto</string>
<string name="network_socks_toggle">Usar proxy SOCKS (puerto 9050)</string>
<string name="unknown_error">Error desconocido</string>
<string name="member_role_will_be_changed_with_notification">El rol cambiará a \"%s\". Se notificará a todos los miembros del grupo.</string>
<string name="v4_2_security_assessment_desc">La seguridad de SimpleX Chat fue auditada por Trail of Bits.</string>
<string name="v4_4_disappearing_messages_desc">Los mensajes enviados se eliminarán una vez transcurrido el tiempo establecido.</string>
<string name="ntf_channel_messages">Mensajes de chat SimpleX</string>
<string name="icon_descr_received_msg_status_unread">no leído</string>
<string name="text_field_set_contact_placeholder">Introduce el nombre del contacto…</string>
<string name="switch_receiving_address_question">¿Cambiar dirección de recepción\?</string>
<string name="use_camera_button">Usar cámara</string>
<string name="contact_you_shared_link_with_wont_be_able_to_connect">¡El contacto con el que has compartido este enlace NO podrá conectarse!</string>
<string name="show_QR_code">Mostrar código QR</string>
<string name="this_link_is_not_a_valid_connection_link">¡El enlace no es un enlace de conexión válido!</string>
<string name="this_QR_code_is_not_a_link">¡El código QR no es un enlace!</string>
<string name="share_invitation_link">Compartir enlace de invitación</string>
<string name="update_network_session_mode_question">¿Actualizar el modo de aislamiento de transporte\?</string>
<string name="icon_descr_speaker_on">Altavoz activado</string>
<string name="stop_chat_to_enable_database_actions">Detener Chat para habilitar acciones sobre la base de datos.</string>
<string name="connection_you_accepted_will_be_cancelled">¡La conexión que has aceptado se cancelará!</string>
<string name="database_initialization_error_desc">La base de datos no funciona correctamente. Pulsa para obtener más información</string>
<string name="moderate_message_will_be_marked_warning">El mensaje será marcado como moderado para todos los miembros.</string>
<string name="next_generation_of_private_messaging">La próxima generación de mensajería privada</string>
<string name="delete_files_and_media_desc">Esta acción no se puede deshacer. Se eliminarán todos los archivos y multimedia recibidos y enviados. Las imágenes de baja resolución permanecerán.</string>
<string name="enable_automatic_deletion_message">Esta acción no se puede deshacer. Se eliminarán los mensajes enviados y recibidos anteriores a la selección. Puede tardar varios minutos.</string>
<string name="messages_section_description">Esta configuración se aplica a los mensajes en su perfil actual de Chat</string>
<string name="this_string_is_not_a_connection_link">¡Esta cadena no es un enlace de conexión!</string>
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery">Para preservar tu privacidad, en lugar de notificaciones automáticas la aplicación cuenta con un <b>servicio en segundo plano<xliff:g id="appName">SimpleX</xliff:g></b>, utiliza un pequeño porcentaje de la batería al día.</string>
<string name="icon_descr_settings">Configuración</string>
<string name="icon_descr_speaker_off">Altavoz apagado</string>
<string name="add_contact_or_create_group">Inciar chat nuevo</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">Detener Chat para exportar, importar o eliminar la base de datos del chat. No podrá recibir ni enviar mensajes mientras el chat esté detenido.</string>
<string name="thank_you_for_installing_simplex">Gracias por instalar <xliff:g id="appNameFull">SimpleX Chat</xliff:g>!</string>
<string name="to_protect_privacy_simplex_has_ids_for_queues">Para proteger la privacidad, en lugar de los identificadores de usuario que utilizan el resto de plataformas, <xliff:g id="appName">SimpleX</xliff:g> dispone de identificadores para las colas de mensajes, independientes para cada uno de tus contactos.</string>
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">Para proteger tu información, activa SimpleX Lock.
\nSe te pedirá que completes la autenticación antes de activar esta función.</string>
<string name="updating_settings_will_reconnect_client_to_all_servers">Al actualizar la configuración, el cliente se reconectará a todos los servidores.</string>
<string name="use_simplex_chat_servers__question">¿Usar servidores <xliff:g id="appNameFull">SimpleX Chat</xliff:g>\?</string>
<string name="simplex_link_group">Enlace de grupo SimpleX</string>
<string name="simplex_link_invitation">Invitación única SimpleX</string>
<string name="simplex_link_mode">Enlaces SimpleX</string>
<string name="error_smp_test_server_auth">El servidor requiere autorización para crear colas, comprueba la contraseña</string>
<string name="enter_passphrase_notification_desc">Para recibir notificaciones, introduce la contraseña de la base de datos</string>
<string name="ntf_channel_calls">Llamadas de chat SimpleX</string>
<string name="notifications_mode_periodic">Se inicia periódicamente</string>
<string name="notification_preview_mode_message_desc">Mostrar contacto y mensaje</string>
<string name="notification_preview_mode_contact_desc">Mostrar sólo contacto</string>
<string name="auth_simplex_lock_turned_on">Bloqueo SimpleX activado</string>
<string name="auth_stop_chat">Detener chat</string>
<string name="moderate_message_will_be_deleted_warning">El mensaje se eliminará para todos los miembros.</string>
<string name="share_file">Compartir archivo…</string>
<string name="images_limit_title">¡Demasiadas imágenes!</string>
<string name="image_decoding_exception_desc">La imagen no se puede decodificar. Pruebe otra imagen o pónte en contacto con los desarrolladores.</string>
<string name="network_enable_socks">¿Usa proxy SOCKS\?</string>
<string name="network_use_onion_hosts">Usar hosts .onion</string>
<string name="core_simplexmq_version">simplexmq: v%s (%2s)</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">La plataforma de mensajería y aplicaciones que protege tu privacidad y seguridad.</string>
<string name="first_platform_without_user_ids">La primera plataforma sin identificadores de usuario: diseñada para la privacidad.</string>
<string name="alert_message_no_group">Este grupo ya no existe.</string>
<string name="incognito_info_find">Para encontrar el perfil usado en una conexión en modo incógnito, pulsa el nombre del contacto o del grupo en la parte superior del chat.</string>
<string name="accept_feature_set_1_day">Establecer 1 día</string>
<string name="v4_4_french_interface_descr">Gracias a los usuarios: ¡contribuye a través de Weblate!</string>
<string name="v4_5_italian_interface_descr">Gracias a los usuarios: ¡contribuye a través de Weblate!</string>
<string name="v4_5_private_filenames_descr">Para proteger la zona horaria, los archivos de imagen/voz usan la hora UTC.</string>
<string name="v4_5_transport_isolation">Aislamiento de transporte</string>
<string name="to_share_with_your_contact">(para compartir con tu contacto)</string>
<string name="unmute_chat">Activar audio</string>
<string name="is_verified">%s está verificado</string>
<string name="is_not_verified">%s no está verificado</string>
<string name="smp_servers_test_server">Probar servidor</string>
<string name="smp_servers_test_servers">Probar servidores</string>
<string name="star_on_github">Comienza en GitHub</string>
<string name="smp_servers_per_user">Los servidores para nuevas conexiones de tu perfil de Chat actual</string>
<string name="network_disable_socks">¿Usar conexión directa a Internet\?</string>
<string name="update_onion_hosts_settings_question">¿Actualizar la configuración de los hosts .onion\?</string>
<string name="profile_is_only_shared_with_your_contacts">El perfil sólo se comparte con tus contactos.</string>
<string name="callstate_starting">inicializando…</string>
<string name="alert_title_skipped_messages">Mensajes omitidos</string>
<string name="settings_section_title_settings">CONFIGURACIÓN</string>
<string name="stop_chat_question">¿Detener Chat\?</string>
<string name="chat_item_ttl_seconds">%s segundo(s)</string>
<string name="group_invitation_tap_to_join">Pulsa para unirse</string>
<string name="rcv_group_event_updated_group_profile">perfil de grupo actualizado</string>
<string name="network_option_tcp_connection_timeout">Tiempo de espera de la conexión TCP agotado</string>
<string name="theme">Tema</string>
<string name="set_group_preferences">Establecer preferencias de grupo</string>
<string name="settings_section_title_support">SOPORTE SIMPLEX CHAT</string>
<string name="set_password_to_export">Seleccióna contraseña para exportar</string>
<string name="update_database">Actualizar</string>
<string name="update_database_passphrase">Actualizar contraseña base de datos</string>
<string name="group_invitation_tap_to_join_incognito">Pulsa para unirte en modo incógnito</string>
<string name="switch_verb">Cambiar</string>
<string name="member_role_will_be_changed_with_invitation">El rol cambiará a \"%s\". El miembro recibirá una nueva invitación.</string>
<string name="update_network_settings_confirmation">Actualizar</string>
<string name="update_network_settings_question">¿Actualizar la configuración de red\?</string>
<string name="trying_to_connect_to_server_to_receive_messages">Intentando conectar con el servidor utilizado para recibir mensajes de este contacto.</string>
<string name="unknown_message_format">formato de mensaje desconocido</string>
<string name="trying_to_connect_to_server_to_receive_messages_with_error">Intentando conectar con el servidor utilizado para recibir mensajes de este contacto (error: <xliff:g id="errorMsg">%1$s</xliff:g> ).</string>
<string name="error_smp_test_failed_at_step">Prueba fallida en el paso %s.</string>
<string name="tap_to_start_new_chat">Pulsa para iniciar chat nuevo</string>
<string name="share_message">Compartir mensaje…</string>
<string name="share_image">Compartir imagen…</string>
<string name="show_call_on_lock_screen">Mostrar</string>
<string name="unknown_database_error_with_info">Error desconocido en la base de datos: %s</string>
<string name="database_backup_can_be_restored">El intento de cambiar la contraseña de la base de datos no se ha completado.</string>
<string name="chat_help_tap_button">Pulsa el botón</string>
<string name="to_start_a_new_chat_help_header">Para iniciar un chat nuevo</string>
<string name="switch_receiving_address">Cambiar dirección de recepción</string>
<string name="group_is_decentralized">El grupo está totalmente descentralizado: sólo es visible para los miembros.</string>
<string name="to_connect_via_link_title">Para conectarse mediante enlace</string>
<string name="smp_servers_test_failed">¡Error en prueba del servidor!</string>
<string name="smp_servers_test_some_failed">Algunos servidores no superaron la prueba:</string>
<string name="smp_servers_use_server">Usar servidor</string>
<string name="smp_servers_use_server_for_new_conn">Usar para conexiones nuevas</string>
<string name="theme_system">Sistema</string>
<string name="description_via_one_time_link">mediante enlace único</string>
<string name="your_chats">Tus chats</string>
<string name="voice_message_send_text">Mensaje de voz…</string>
<string name="your_contact_address">Tu dirección de contacto</string>
<string name="icon_descr_video_off">Desactivar vídeo</string>
<string name="icon_descr_video_on">Activar vídeo</string>
<string name="wrong_passphrase">Contraseña de base de datos incorrecta</string>
<string name="wrong_passphrase_title">¡Contraseña incorrecta!</string>
<string name="youve_accepted_group_invitation_connecting_to_inviting_group_member">Te has unido a este grupo. Conectando con miembro del grupo invitado.</string>
<string name="alert_title_cant_invite_contacts_descr">Estás utilizando un perfil incógnito para este grupo. Para evitar compartir tu perfil principal, invitar contactos no está permitido</string>
<string name="you_are_invited_to_group">Has sido invitado al grupo</string>
<string name="v4_3_voice_messages">Mensajes de voz</string>
<string name="v4_3_irreversible_message_deletion_desc">Tus contactos pueden permitir la eliminación completa de mensajes.</string>
<string name="you_control_servers_to_receive_your_contacts_to_send">Tú controlas a través de qué servidor(es) <b>recibes</b> los mensajes. Tus contactos controlan a través de qué servidor(es) <b>envías</b> tus mensajes.</string>
<string name="voice_messages">Mensajes de voz</string>
<string name="voice_messages_are_prohibited">Los mensajes de voz están prohibidos en este grupo.</string>
<string name="v4_4_verify_connection_security">Comprobar la seguridad de la conexión</string>
<string name="you_are_already_connected_to_vName_via_this_link">¡Ya estás conectado a <xliff:g id="contactName" example="Alice">%1$s! </xliff:g>.</string>
<string name="welcome">¡Bienvenido!</string>
<string name="your_chat_profile_will_be_sent_to_your_contact">Tu perfil de chat será enviado
\na tu contacto</string>
<string name="your_ICE_servers">Tus servidores ICE</string>
<string name="you_rejected_group_invitation">Has rechazado la invitación del grupo.</string>
<string name="snd_group_event_changed_member_role">has cambiado el rol de %s a %s</string>
<string name="call_connection_via_relay">mediante servidor de retransmisión</string>
<string name="contact_wants_to_connect_with_you">¡quiere contactar contigo!</string>
<string name="voice_message">Mensaje de voz</string>
<string name="waiting_for_image">Esperando imagen</string>
<string name="webrtc_ice_servers">Servidores WebRTC ICE</string>
<string name="contact_wants_to_connect_via_call"><xliff:g id="contactName" example="Alice">%1$s</xliff:g> quiere conectarse contigo mediante</string>
<string name="failed_to_create_user_duplicate_desc">Tienes un perfil de chat con el mismo nombre mostrado. Debes elegir otro nombre.</string>
<string name="you_can_also_connect_by_clicking_the_link">También puedes conectarte haciendo clic en el enlace. Si se abre en el navegador, haz clic en <b>Abrir en aplicación móvil</b>.</string>
<string name="you_can_connect_to_simplex_chat_founder">Puedes <font color="#0088ff">conectar con los desarrolladores de <xliff:g id="appNameFull">SimpleX Chat</xliff:g> para hacer cualquier pregunta y recibir actualizaciones</font>.</string>
<string name="you_can_share_your_address_anybody_will_be_able_to_connect">Puedes compartir tu dirección como enlace o como código QR: cualquiera podrá conectarse contigo. Si lo eliminas más tarde tus contactos no se perderán.</string>
<string name="observer_cant_send_message_title">¡No puedes enviar mensajes!</string>
<string name="you_can_use_markdown_to_format_messages__prompt">Puedes usar marcadores para dar formato a los mensajes:</string>
<string name="you_must_use_the_most_recent_version_of_database">Debes usar la versión más reciente de tu base de datos SÓLO en un dispositivo, de lo contrario podrías dejar de recibir mensajes de algunos contactos.</string>
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">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).</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">La base de datos actual será ELIMINADA y SUSTITUIDA por la importada.
\nEsta acción no se puede deshacer. Tu perfil, contactos, mensajes y archivos se perderán irreversiblemente.</string>
<string name="incognito_random_profile">Tu perfil aleatorio</string>
<string name="you_will_be_connected_when_your_connection_request_is_accepted">Te conectarás cuando se acepte tu solicitud de conexión, por favor espere o compruébalo más tarde.</string>
<string name="you_will_be_connected_when_your_contacts_device_is_online">Te conectarás cuando el dispositivo de tu contacto esté en línea, por favor espera o compruébalo más tarde.</string>
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">Se te pedirá identificarte cuándo inicies o continues usando la aplicación tras 30 segundos en segundo plano.</string>
<string name="invite_prohibited_description">Estás intentando invitar a un contacto con el que has compartido un perfil incógnito, al grupo en el que utilizas tu perfil principal</string>
<string name="simplex_link_mode_browser">mediante navegador</string>
<string name="simplex_link_connection">mediante <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g></string>
<string name="simplex_service_notification_title">Servicio <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="personal_welcome">¡Bienvenido <xliff:g>%1$s</xliff:g> !</string>
<string name="group_preview_you_are_invited">has sido invitado al grupo</string>
<string name="waiting_for_file">Esperando archivo</string>
<string name="icon_descr_waiting_for_image">Esperando imagen</string>
<string name="voice_message_with_duration">Mensaje de voz (<xliff:g id="duration">%1$s</xliff:g> )</string>
<string name="network_use_onion_hosts_prefer">Cuando esté disponible</string>
<string name="we_do_not_store_contacts_or_messages_on_servers">No almacenamos ninguno de tus contactos o mensajes (una vez entregados) en los servidores.</string>
<string name="you_are_invited_to_group_join_to_connect_with_group_members">Has sido invitado al grupo. Únete para conectarte con los miembros del grupo.</string>
<string name="snd_group_event_member_deleted">has eliminado <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="group_info_member_you">Tú: <xliff:g id="group_info_you">%1$s</xliff:g></string>
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">Puedes compartir un enlace o un código QR: cualquiera podrá unirse al grupo. Si lo eliminas más tarde los miembros del grupo no se perderán.</string>
<string name="incognito_info_share">Cuando compartes un perfil incógnito con alguien, este perfil se usará para los grupos a los que te inviten.</string>
<string name="your_preferences">Tus preferencias</string>
<string name="v4_2_auto_accept_contact_requests_desc">Con mensaje de bienvenida opcional.</string>
<string name="you_are_observer">Tu rol es observador</string>
<string name="verify_security_code">Comprobar código de seguridad</string>
<string name="you_accepted_connection">Has aceptado la conexión</string>
<string name="you_invited_your_contact">Has invitado a tu contacto</string>
<string name="you_will_be_connected_when_group_host_device_is_online">Te conectarás al grupo cuando el dispositivo del anfitrión esté en línea, por favor espera o compruébalo más tarde.</string>
<string name="show_QR_code_for_your_contact_to_scan_from_the_app__multiline">Tu contacto puede escanear el código QR desde la aplicación.</string>
<string name="your_settings">Tu configuración</string>
<string name="your_SMP_servers">Tus servidores SMP</string>
<string name="you_control_your_chat">¡Tú controlas tu chat!</string>
<string name="your_profile_is_stored_on_your_device">Tu perfil, contactos y mensajes entregados se almacenan en tu dispositivo.</string>
<string name="callstate_waiting_for_answer">esperando respuesta…</string>
<string name="callstate_waiting_for_confirmation">esperando confirmación…</string>
<string name="onboarding_notifications_mode_off">Cuando la aplicación se está ejecutando</string>
<string name="icon_descr_video_call">Videollamada</string>
<string name="your_calls">Tus llamadas</string>
<string name="your_ice_servers">Tus servidores ICE</string>
<string name="your_privacy">Tu privacidad</string>
<string name="settings_section_title_you">TU</string>
<string name="your_chat_database">Base de datos de Chat</string>
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">Puedes iniciar el chat en Configuración / Base de datos o reiniciando la aplicación.</string>
<string name="you_sent_group_invitation">Has enviado una invitación de grupo</string>
<string name="num_contacts_selected"><xliff:g id="num_contacts">%1$s</xliff:g> contacto(s) seleccionado(s)</string>
<string name="group_info_section_title_num_members"><xliff:g id="num_members"> %1$s </xliff:g> MIEMBROS</string>
<string name="your_chat_profiles_stored_locally">Tus perfiles de chat se almacenan localmente, sólo en tu dispositivo</string>
<string name="voice_prohibited_in_this_chat">Los mensajes de voz están prohibidos en este chat.</string>
<string name="whats_new">Novedades</string>
<string name="you_have_to_enter_passphrase_every_time">La contraseña no se almacena en el dispositivo, tienes que introducirla cada vez que inicies la aplicación.</string>
<string name="you_joined_this_group">Te has unido a este grupo</string>
<string name="chat_preferences_yes"></string>
<string name="chat_preferences_you_allow">Permites</string>
<string name="app_name"><xliff:g id="appName">SimpleX</xliff:g></string>
<string name="profile_will_be_sent_to_contact_sending_link">Tu perfil se enviará al contacto del que has recibido este enlace.</string>
<string name="you_will_join_group">Te unirás al grupo al que hace referencia este enlace y te conectarás con sus miembros.</string>
<string name="sender_you_pronoun"></string>
<string name="connected_to_server_to_receive_messages_from_contact">Estás conectado al servidor utilizado para recibir mensajes de este contacto.</string>
<string name="description_via_contact_address_link">mediante enlace de dirección de contacto</string>
<string name="description_via_group_link">mediante enlace de grupo</string>
<string name="description_you_shared_one_time_link">has compartido un enlace único</string>
<string name="description_you_shared_one_time_link_incognito">has compartido un enlace único en módo incógnito</string>
<string name="you_have_no_chats">No tienes chats</string>
<string name="contact_sent_large_file">El contacto ha enviado un archivo mayor al máximo admitido (<xliff:g id="maxFileSize">%1$s</xliff:g> ).</string>
<string name="integrity_msg_skipped"><xliff:g id="connection ID" example="1">%1$d</xliff:g> mensaje(s) omitido(s)</string>
<string name="you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved">Dejarás de recibir mensajes de este grupo. El historial del chat se conservará.</string>
<string name="view_security_code">Ver código de seguridad</string>
<string name="you_need_to_allow_to_send_voice">Para poder enviar mensajes de voz debes permitir que tu contacto pueda enviarlos.</string>
<string name="voice_messages_prohibited">¡Mensajes de voz prohibidos!</string>
<string name="group_main_profile_sent">Tu perfil de chat se enviará a los miembros del grupo</string>
<string name="icon_descr_address">Dirección <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="image_descr_simplex_logo">Logo <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="icon_descr_simplex_team">Equipo <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="your_profile_will_be_sent">Tu perfil de chat se enviará a tu contacto</string>
<string name="your_chat_profiles">Tus perfiles de chat</string>
<string name="your_simplex_contact_address">Tu dirección de contacto <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="smp_servers_your_server">Tu servidor</string>
<string name="smp_servers_your_server_address">Dirección de tu servidor</string>
<string name="section_title_welcome_message">MENSAJE DE BIENVENIDA</string>
<string name="your_current_profile">Tu perfil actual</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">Tu perfil se almacena en tu dispositivo y sólo se comparte con tus contactos.
\n
\nLos servidores <xliff:g id="appName">SimpleX</xliff:g> no pueden ver tu perfil.</string>
<string name="language_system">Sistema</string>
</resources>
@@ -598,12 +598,14 @@
<string name="incoming_audio_call">Appel audio entrant</string>
<string name="contact_wants_to_connect_via_call"><xliff:g id="contactName" example="Alice">%1$s</xliff:g> veut se connecter à vous via</string>
<string name="your_calls">Vos appels</string>
<string name="connect_calls_via_relay">Se connecter via relais</string>
<string name="always_use_relay">Se connecter via relais</string>
<string name="call_on_lock_screen">Appels en écran verrouillé :</string>
<string name="show_call_on_lock_screen">Montrer</string>
<string name="no_call_on_lock_screen">Désactiver</string>
<string name="your_ice_servers">Vos serveurs ICE</string>
<string name="webrtc_ice_servers">Serveurs WebRTC ICE</string>
<string name="relay_server_protects_ip">Le serveur relais protège votre adresse IP, mais il peut observer la durée de l\'appel.</string>
<string name="relay_server_if_necessary">Le serveur relais n\'est utilisé que si nécessaire. Un tiers peut observer votre adresse IP.</string>
<string name="open_simplex_chat_to_accept_call">Ouvrez <xliff:g id="appNameFull">SimpleX Chat</xliff:g> pour décrocher</string>
<string name="status_no_e2e_encryption">sans chiffrement de bout en bout</string>
<string name="status_contact_has_e2e_encryption">Ce contact a le chiffrement de bout en bout</string>
@@ -966,4 +968,17 @@
<string name="v4_5_private_filenames_descr">Pour préserver le fuseau horaire, les fichiers image/voix utilisent le système UTC.</string>
<string name="v4_5_transport_isolation">Isolation du transport</string>
<string name="v4_5_multiple_chat_profiles_descr">Différents noms, avatars et mode d\'isolation de transport.</string>
<string name="moderated_description">modéré</string>
<string name="moderated_item_description">modéré par %s</string>
<string name="delete_member_message__question">Supprimer le message de ce membre \?</string>
<string name="moderate_verb">Modéré</string>
<string name="moderate_message_will_be_deleted_warning">Le message sera supprimé pour tous les membres.</string>
<string name="moderate_message_will_be_marked_warning">Le message sera marqué comme modéré pour tous les membres.</string>
<string name="you_are_observer">vous êtes observateur</string>
<string name="error_updating_link_for_group">Erreur lors de la mise à jour du lien de groupe</string>
<string name="initial_member_role">Rôle initial</string>
<string name="observer_cant_send_message_desc">Veuillez contacter l\'administrateur du groupe.</string>
<string name="observer_cant_send_message_title">Vous ne pouvez pas envoyer de messages !</string>
<string name="group_member_role_observer">observateur</string>
<string name="language_system">Système</string>
</resources>
@@ -97,7 +97,7 @@
<string name="invite_to_group_button">समूह में आमंत्रित करें</string>
<string name="message_deletion_prohibited_in_chat">इस समूह में अपरिवर्तनीय संदेश हटाना प्रतिबंधित है।</string>
<string name="italic">तिरछा</string>
<string name="join_group_button">जोड़ना</string>
<string name="join_group_button">प्रवेश लेना</string>
<string name="join_group_incognito_button">गुप्त में शामिल हों</string>
<string name="joining_group">समूह में शामिल होना</string>
<string name="join_group_question">समूह में शामिल हों\?</string>
@@ -107,7 +107,7 @@
<string name="leave_group_question">समूह छोड़ दें</string>
<string name="rcv_group_event_member_left">बाएं</string>
<string name="group_member_status_left">बाएं</string>
<string name="theme_light">रोशनी</string>
<string name="theme_light">प्रकाश</string>
<string name="info_row_local_name">स्थानीय नाम</string>
<string name="users_delete_data_only">केवल स्थानीय प्रोफ़ाइल डेटा</string>
<string name="auth_log_in_using_credential">अपने क्रेडेंशियल का उपयोग करके लॉग इन करें</string>
@@ -121,7 +121,7 @@
<string name="network_status">नेटवर्क की स्थिति</string>
<string name="notification_new_contact_request">नया संपर्क अनुरोध</string>
<string name="delete_files_and_media_all">सभी फाइलों को मिटा दें</string>
<string name="delete_archive">संग्रह हटाएं</string>
<string name="delete_archive">संग्रह हटा देना</string>
<string name="new_database_archive">नया डेटाबेस संग्रह</string>
<string name="new_member_role">नए सदस्य की भूमिका</string>
<string name="settings_notifications_mode_title">अधिसूचना सेवा</string>
@@ -133,7 +133,7 @@
<string name="settings_notification_preview_title">अधिसूचना पूर्वावलोकन</string>
<string name="notifications">सूचनाएं</string>
<string name="full_deletion">सभी के लिए हटाएं</string>
<string name="delete_chat_archive_question">चैट संग्रह मिटाएं\?</string>
<string name="delete_chat_archive_question">लिखचीत संग्रह हटा दे\?</string>
<string name="delete_chat_profile_question">चैट प्रोफ़ाइल हटाएं\?</string>
<string name="users_delete_question">चैट प्रोफ़ाइल हटाएं\?</string>
<string name="users_delete_profile_for">के लिए चैट प्रोफ़ाइल हटाएं</string>
@@ -144,4 +144,40 @@
<string name="delete_image">छवि हटाएं</string>
<string name="button_delete_group">समूह हटाएं</string>
<string name="for_me_only">मेरे लिए हटाएं</string>
</resources>
<string name="hide_verb">छिपाना</string>
<string name="both_you_and_your_contacts_can_delete">आप और आपका संपर्क दोनों भेजे गए संदेशों को अपरिवर्तनीय रूप से हटा सकते हैं।</string>
<string name="message_deletion_prohibited">इस चैट में अपरिवर्तनीय संदेश हटाना प्रतिबंधित है।</string>
<string name="chat_with_the_founder">प्रश्न और विचार भेजें</string>
<string name="send_us_an_email">हमें ईमेल भेजें</string>
<string name="display_name">प्रदर्शित होने वाला नाम</string>
<string name="confirm_verb">पुष्टि करना</string>
<string name="you_accepted_connection">आपने कनेक्शन स्वीकार किया</string>
<string name="contribute">योगदान देना</string>
<string name="both_you_and_your_contact_can_send_disappearing">आप और आपका संपर्क दोनों गायब होने वाले संदेश भेज सकते हैं।</string>
<string name="allow_to_send_disappearing">गायब होने वाले संदेश भेजने की अनुमति दें।</string>
<string name="prohibit_sending_disappearing">गायब होने वाले संदेश भेजने पर रोक लगाएं।</string>
<string name="how_to_use_simplex_chat">इसका उपयोग कैसे करना है</string>
<string name="group_member_status_group_deleted">समूह हटाया गया</string>
<string name="delete_message_cannot_be_undone_warning">संदेश हटा दिया जाएगा - इसे पूर्ववत नहीं किया जा सकता!</string>
<string name="message_delivery_error_title">संदेश वितरण त्रुटि</string>
<string name="group_display_name_field">समूह प्रदर्शन नाम:</string>
<string name="group_full_name_field">समूह का पूरा नाम:</string>
<string name="group_invitation_expired">समूह आमंत्रण समाप्त हो गया</string>
<string name="v4_3_irreversible_message_deletion_desc">आपके संपर्क पूर्ण संदेश को हटाने की अनुमति दे सकते हैं।</string>
<string name="new_in_version">%s में नया</string>
<string name="icon_descr_group_inactive">समूह निष्क्रिय</string>
<string name="delete_group_menu_action">मिटाना</string>
<string name="delete_contact_menu_action">मिटाना</string>
<string name="create_your_profile">अपना प्रोफ़ाइल बनाए</string>
<string name="set_contact_name">संपर्क नाम सेट करें</string>
<string name="icon_descr_email">ईमेल</string>
<string name="callstate_received_answer">जवाब मिला…</string>
<string name="use_chat">चैट का प्रयोग करें</string>
<string name="error_with_info">गलती: %s</string>
<string name="delete_messages_after">संदेशों को बाद में हटाएं</string>
<string name="image_descr">छवि</string>
<string name="icon_descr_server_status_error">गलती</string>
<string name="restore_database_alert_confirm">वापस लौटाना</string>
<string name="a_plus_b">ए + बी</string>
<string name="incognito_random_profile">आपका यादृच्छिक प्रोफ़ाइल</string>
</resources>
@@ -378,7 +378,7 @@
<string name="icon_descr_call_progress">Chiamata in corso</string>
<string name="call_on_lock_screen">Chiamate sulla schermata di blocco:</string>
<string name="icon_descr_call_connecting">Connessione chiamata</string>
<string name="connect_calls_via_relay">Connetti via relay</string>
<string name="always_use_relay">Connetti via relay</string>
<string name="status_contact_has_e2e_encryption">il contatto ha la crittografia e2e</string>
<string name="status_contact_has_no_e2e_encryption">il contatto non ha la crittografia e2e</string>
<string name="no_call_on_lock_screen">Disattiva</string>
@@ -613,7 +613,7 @@
<string name="your_contact_address">Il tuo indirizzo di contatto</string>
<string name="smp_servers_your_server">Il tuo server</string>
<string name="smp_servers_your_server_address">L\'indirizzo del tuo server</string>
<string name="your_simplex_contact_address">Il tuo indirizzo di contatto di <xliff:g id="appName">SimpleX</xliff:g>.</string>
<string name="your_simplex_contact_address">Il tuo indirizzo di contatto di <xliff:g id="appName">SimpleX</xliff:g></string>
<string name="network_disable_socks_info">Se confermi, i server di messaggistica saranno in grado di vedere il tuo indirizzo IP e il tuo fornitore, a quali server ti stai connettendo.</string>
<string name="install_simplex_chat_for_terminal">Installa <xliff:g id="appNameFull">SimpleX Chat</xliff:g> per terminale</string>
<string name="ensure_ICE_server_address_are_correct_format_and_unique">Assicurati che gli indirizzi dei server WebRTC ICE siano nel formato corretto, uno per riga e non doppi.</string>
@@ -718,6 +718,8 @@
<string name="icon_descr_video_off">Video off</string>
<string name="icon_descr_video_on">Video on</string>
<string name="webrtc_ice_servers">Server WebRTC ICE</string>
<string name="relay_server_protects_ip">Il server relay protegge il tuo indirizzo IP, ma può osservare la durata della chiamata.</string>
<string name="relay_server_if_necessary">Il server relay viene usato solo se necessario. Un altro utente può osservare il tuo indirizzo IP.</string>
<string name="integrity_msg_skipped"><xliff:g id="connection ID" example="1">%1$d</xliff:g> messaggio/i saltato/i</string>
<string name="your_calls">Le tue chiamate</string>
<string name="your_ice_servers">I tuoi server ICE</string>
@@ -966,4 +968,17 @@
<string name="v4_5_transport_isolation">Isolamento del trasporto</string>
<string name="v4_5_private_filenames_descr">Per proteggere il fuso orario, i file immagine/vocali usano UTC.</string>
<string name="v4_5_multiple_chat_profiles_descr">Nomi e avatar diversi, isolamento del trasporto.</string>
<string name="moderated_description">moderato</string>
<string name="moderated_item_description">moderato da %s</string>
<string name="delete_member_message__question">Eliminare il messaggio del membro\?</string>
<string name="moderate_verb">Modera</string>
<string name="moderate_message_will_be_deleted_warning">Il messaggio verrà eliminato per tutti i membri.</string>
<string name="moderate_message_will_be_marked_warning">Il messaggio sarà segnato come moderato per tutti i membri.</string>
<string name="you_are_observer">sei un osservatore</string>
<string name="initial_member_role">Ruolo iniziale</string>
<string name="error_updating_link_for_group">Errore nell\'aggiornamento del link del gruppo</string>
<string name="group_member_role_observer">osservatore</string>
<string name="observer_cant_send_message_desc">Contatta l\'amministratore del gruppo.</string>
<string name="observer_cant_send_message_title">Non puoi inviare messaggi!</string>
<string name="language_system">Sistema</string>
</resources>
@@ -83,4 +83,882 @@
<string name="it_can_disabled_via_settings_notifications_still_shown"><b>設定メニューにてオフにできます。</b> アプリがアクティブ時に通知が出ます。</string>
<string name="both_you_and_your_contacts_can_delete">あなたと連絡相手が送信済みメッセージを永久削除できます。</string>
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>QRコードを読み込み</b>:連絡相手のQRコードをスキャンすると繋がります。</string>
<string name="chat_archive_section">チャットのアーカイブ</string>
<string name="delete_chat_archive_question">チャットのアーカイブを削除しますか?</string>
<string name="join_group_incognito_button">シークレットモードで参加</string>
<string name="group_member_status_intro_invitation">接続待ち (招待)</string>
<string name="group_member_status_accepted">接続待ち (承諾済み)</string>
<string name="group_member_status_creator">作成者</string>
<string name="no_contacts_selected">連絡先が選択されてません</string>
<string name="delete_link_question">リンクを削除しますか?</string>
<string name="section_title_for_console">コンソール</string>
<string name="info_row_local_name">ローカルネーム</string>
<string name="member_info_section_title_member">メンバー</string>
<string name="network_options_reset_to_defaults">既定に戻す</string>
<string name="network_option_ping_count">PING回数</string>
<string name="users_delete_profile_for">チャットのプロフィールを削除</string>
<string name="reset_color">既定色に戻す</string>
<string name="group_preferences">グループの設定</string>
<string name="feature_off">オフ</string>
<string name="prohibit_sending_voice_messages">音声メッセージを使用禁止にする。</string>
<string name="only_you_can_send_voice">音声メッセージを送れるのはあなただけです。</string>
<string name="delete_after">次の期間が経ったら削除:</string>
<string name="ttl_sec">%d 秒</string>
<string name="ttl_m">%d分</string>
<string name="v4_2_group_links">グループのリンク</string>
<string name="thousand_abbreviation">k</string>
<string name="connect_via_link_verb">接続</string>
<string name="server_connected">接続中</string>
<string name="server_error">エラー</string>
<string name="server_connecting">接続待ち</string>
<string name="invalid_data">無効なデータ</string>
<string name="invalid_chat">無効なチャット</string>
<string name="live">ライブ (リアルタイム)</string>
<string name="marked_deleted_description">削除済みとマークされました。</string>
<string name="receiving_files_not_yet_supported">ファイルの受信機能はまだ対応されてません。</string>
<string name="display_name_invited_to_connect">招待済み</string>
<string name="failed_to_parse_chat_title">チャット読み込みに失敗</string>
<string name="failed_to_parse_chats_title">チャット読み込みに失敗</string>
<string name="contact_developers">アプリを更新し、開発者にご連絡ください。</string>
<string name="service_notifications">即時通知!</string>
<string name="service_notifications_disabled">即時通知が無効になってます!</string>
<string name="enter_passphrase_notification_title">暗証フレーズが必要</string>
<string name="notification_preview_mode_hidden">プライベート</string>
<string name="notification_preview_mode_contact">連絡先の名前</string>
<string name="notification_preview_somebody">連絡先が非表示:</string>
<string name="auth_open_chat_console">チャットのコンソールを開く</string>
<string name="delete_verb">削除する</string>
<string name="file_saved">ファイルを保存しました</string>
<string name="delete_contact_question">連絡先を削除しますか?</string>
<string name="connect_via_link_or_qr">リンク・QRコード経由で繋がる</string>
<string name="mark_code_verified">検証済みにマーク</string>
<string name="how_to">使い方</string>
<string name="network_use_onion_hosts_required">必須</string>
<string name="incoming_video_call">ビデオ通話着信</string>
<string name="paste_the_link_you_received">頂いたリンクを貼り付ける</string>
<string name="icon_descr_hang_up">通話を切る</string>
<string name="messages_section_title">メッセージ</string>
<string name="rcv_group_event_invited_via_your_group_link">グループリンク経由で招待された</string>
<string name="message_deletion_prohibited">このチャットではメッセージの完全削除が使用禁止です。</string>
<string name="incognito_info_allows">一つのチャットプロフィールで複数の匿名な接続を立ち上げ、それぞれのデータを別々に共通を防ぐことができます。</string>
<string name="onboarding_notifications_mode_subtitle">後でも設定で変えられます。</string>
<string name="error_changing_address">アドレス変更にエラー発生</string>
<string name="error_creating_link_for_group">グループリンク発行にエラー発生</string>
<string name="error_changing_role">役割変更にエラー発生</string>
<string name="error_exporting_chat_database">チャットデータベースのエキスポートにエラー発生</string>
<string name="error_saving_smp_servers">SMPサーバ保存にエラー発生</string>
<string name="error_saving_ICE_servers">ICEサーバ保存にエラー発生</string>
<string name="error_setting_network_config">ネットワーク設定の更新にエラー発生</string>
<string name="icon_descr_file">ファイル</string>
<string name="simplex_link_mode_full">フルリンク</string>
<string name="group_full_name_field">グループのフルネーム:</string>
<string name="group_invitation_expired">グループ招待が期限切れ</string>
<string name="icon_descr_group_inactive">非アクティブなグループ</string>
<string name="group_members_can_send_voice">グループのメンバーが音声メッセージを送信できます。</string>
<string name="group_members_can_delete">グループのメンバーがメッセージを完全削除することができます。</string>
<string name="group_profile_is_stored_on_members_devices">グループのプロフィールはサーバではなく、メンバーの端末に保存されます。</string>
<string name="snd_group_event_group_profile_updated">グループのプロフィールが更新されました。</string>
<string name="notification_display_mode_hidden_desc">連絡先とメッセージ内容をプライベートにする。</string>
<string name="icon_descr_instant_notifications">即時通知</string>
<string name="ensure_smp_server_address_are_correct_format_and_unique">SMPサーバのアドレスを正しく1行ずつに分けて、重複しないように、形式もご確認ください。</string>
<string name="ensure_ICE_server_address_are_correct_format_and_unique">WebRTC ICEサーバのアドレスを正しく1行ずつに分けて、重複しないように、形式もご確認ください。</string>
<string name="many_people_asked_how_can_it_deliver">よく聞かれるのは、 <i>if <xliff:g id="appName">SimpleX</xliff:g> にユーザIDがなければ、メッセージをどうやって届けるのでしょうかと。</i></string>
<string name="how_simplex_works"><xliff:g id="appName">SimpleX</xliff:g> の仕様</string>
<string name="icon_descr_call_progress">通話中</string>
<string name="onboarding_notifications_mode_service_desc"><b>電池消費がより高い</b>!非アクティブ時でもバックグラウンドのサービスが常に稼働します(着信次第に通知がすぐに出ます)。</string>
<string name="callstatus_calling">発信中</string>
<string name="callstatus_ended">通話終了 <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
<string name="icon_descr_call_ended">通話が終了しました。</string>
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">直接会えない時は、 <b>ビデオ通話中にQRコードを見せてもらうか</b>、招待リンクを送ってもらえば相手に繋がります。</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">メンバーをグループから除名する (※元に戻せません※)!</string>
<string name="message_delivery_error_title">メッセージ送信エラー</string>
<string name="call_on_lock_screen">通話をロック画面に表示</string>
<string name="icon_descr_cancel_link_preview">リンクのプレビューを中止</string>
<string name="icon_descr_cancel_live_message">ライブメッセージを中止</string>
<string name="change_member_role_question">グループの役割を変えますか?</string>
<string name="cannot_receive_file">ファイル受信ができません。</string>
<string name="invite_prohibited">連絡先を招待できません!</string>
<string name="change_verb">変更</string>
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel">直接会えない時は、 <b>ビデオ通話にてQRコードを見せるか</b>、招待リンクを送って、相手に繋がります。</string>
<string name="rcv_conn_event_switch_queue_phase_completed">あなたのアドレスを変えました。</string>
<string name="snd_conn_event_switch_queue_phase_changing">アドレスを変更しています…</string>
<string name="chat_database_section">チャットのデータベース</string>
<string name="chat_is_stopped_indication">チャットが停止してます。</string>
<string name="network_disable_socks_info">承諾すると、メッセージのサーバがIPアドレス、ISP、接続サーバを特定できます。</string>
<string name="chat_preferences">チャット設定</string>
<string name="clear_chat_button">消す</string>
<string name="icon_descr_close_button">閉じるボタン</string>
<string name="clear_verification">検証を消す</string>
<string name="image_saved">画像をギャラリーに保存しました。</string>
<string name="choose_file">ファイルを選ぶ</string>
<string name="clear_chat_menu_action">消す</string>
<string name="image_will_be_received_when_contact_is_online">連絡先がオンラインになったら受信されます。しばらくお待ちください。</string>
<string name="v4_4_verify_connection_security_desc">連絡先とセキュリティコードを確認</string>
<string name="install_simplex_chat_for_terminal">ターミナル版の <xliff:g id="appNameFull">SimpleX Chat</xliff:g> をインストール</string>
<string name="v4_3_improved_server_configuration">サーバ設定の向上</string>
<string name="v4_3_improved_privacy_and_security">プライバシーとセキュリティ強化</string>
<string name="settings_section_title_incognito">シークレットモード</string>
<string name="group_unsupported_incognito_main_profile_sent">ここではシークレットモードが無効です。メインのプロフィールがグループのメンバーに送られます。</string>
<string name="new_in_version">%s バージョンアップで新しい</string>
<string name="new_passphrase">新しい暗証フレーズ</string>
<string name="chat_item_ttl_none">一度も</string>
<string name="notification_preview_new_message">新しいメッセージ</string>
<string name="network_use_onion_hosts_no">いいえ</string>
<string name="notifications">通知</string>
<string name="chat_preferences_off">オフ</string>
<string name="callstate_connecting">接続待ち…</string>
<string name="notification_contact_connected">接続中</string>
<string name="contact_connection_pending">接続待ち…</string>
<string name="display_name_connection_established">接続済み</string>
<string name="connect_via_link">リンク経由で繋がる。</string>
<string name="connection_error">接続エラー</string>
<string name="network_use_onion_hosts_required_desc_in_alert">接続にオニオンのホストが必要となります。</string>
<string name="group_member_status_introduced">接続待ち (紹介済み)</string>
<string name="connection_error_auth">接続エラー (AUTH)</string>
<string name="connection_timeout">接続タイムアウト</string>
<string name="connection_request_sent">接続リクエストを送信しました!</string>
<string name="connection_local_display_name">接続 <xliff:g id="connection ID" example="1">%1$d</xliff:g></string>
<string name="connect_via_contact_link">連絡先リンク経由で繋がりますか?</string>
<string name="connect_via_group_link">グループリンク経由で繋がりますか?</string>
<string name="connect_via_invitation_link">招待リンク経由で繋がりますか?</string>
<string name="status_contact_has_e2e_encryption">連絡先はエンドツーエンド暗号化があります。</string>
<string name="description_via_group_link_incognito">グループリンク経由でシークレットモード</string>
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">連絡先と全メッセージが削除されます (※元に戻せません※)!</string>
<string name="contact_preferences">連絡先の設定</string>
<string name="status_contact_has_no_e2e_encryption">連絡先はエンドツーエンド暗号化がありません。</string>
<string name="alert_title_contact_connection_pending">連絡先がまだ繋がってません!</string>
<string name="contact_requests">連絡先のリクエスト</string>
<string name="icon_descr_context">追加情報アイコン</string>
<string name="network_use_onion_hosts_prefer_desc">オニオンのホストが利用可能時に使われます。</string>
<string name="network_use_onion_hosts_no_desc">オニオンのホストが使われません。</string>
<string name="network_use_onion_hosts_prefer_desc_in_alert">オニオンのホストが利用可能時に使われます。</string>
<string name="images_limit_desc">画像を1回で最大10枚を送信できます。</string>
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages"><b>2層エンドツーエンド暗号化</b>で送信されたプロフィール、連絡先、グループ、メッセージは、クライント端末にしか保存されません。</string>
<string name="only_group_owners_can_change_prefs">グループ設定を変えられるのはグループのオーナーだけです。</string>
<string name="only_group_owners_can_enable_voice">音声メッセージを利用可能に設定できるのはグループのオーナーだけです。</string>
<string name="create_profile">プロフィールを作成する</string>
<string name="only_you_can_delete_messages">メッセージの完全削除はあなたにしかできません (あなたの連絡先は削除対象とすることができます)。</string>
<string name="create_your_profile">プロフィールを作成する</string>
<string name="only_your_contact_can_delete">メッセージを完全削除できるのはあなたの連絡相手だけです (あなたは削除対象とすることができます)。</string>
<string name="open_chat">チャットを開く</string>
<string name="only_your_contact_can_send_voice">音声メッセージを送れるのはあなたの連絡相手だけです。</string>
<string name="database_encryption_will_be_updated">データベース暗号化の暗号フレーズが更新され、キーストア (暗証キー保管庫)に保存されます。</string>
<string name="database_error">データベースエラー</string>
<string name="set_password_to_export_desc">データベースはランダムな暗証フレーズで暗号化済みです。エキスポートする前に更新してください。</string>
<string name="passphrase_is_different">データベース暗証フレーズはキーストア (暗証キー保管庫) に保存された暗証フレーズと異なります。</string>
<string name="ttl_d">%d日</string>
<string name="ttl_day">%d 日</string>
<string name="delete_group_menu_action">削除</string>
<string name="incoming_audio_call">音声通話着信</string>
<string name="button_delete_contact">連絡先を削除</string>
<string name="open_simplex_chat_to_accept_call">通話を受けるには <xliff:g id="appNameFull">SimpleX Chat</xliff:g> を開きます。</string>
<string name="deleted_description">削除完了</string>
<string name="delete_files_and_media_for_all_users">全チャットプロフィールのファイルを削除</string>
<string name="full_deletion">全員分を削除</string>
<string name="for_me_only">自分側で削除</string>
<string name="delete_image">画像を削除</string>
<string name="group_invitation_item_description">グループへの招待 <xliff:g id="group_name">%1$s</xliff:g></string>
<string name="invalid_connection_link">無効な繋がりリンク</string>
<string name="smp_servers_invalid_address">無効なサーバアドレス</string>
<string name="invalid_message_format">無効なメッセージのフォーマット</string>
<string name="simplex_link_mode_description">説明</string>
<string name="alert_title_group_invitation_expired">招待が期限切れました!</string>
<string name="smp_servers_delete_server">サーバを削除</string>
<string name="auth_device_authentication_is_disabled_turning_off">端末認証がオフです。SimpleXロックを解除します。</string>
<string name="direct_messages_are_prohibited_in_chat">このグループではメンバー間のダイレクトメッセージが使用禁止です。</string>
<string name="disappearing_messages_are_prohibited">このグループでは消えるメッセージが使用禁止です。</string>
<string name="ttl_min">%d 分</string>
<string name="ttl_weeks">%d 週</string>
<string name="network_option_enable_tcp_keep_alive">TCP keep-aliveを有効にする</string>
<string name="icon_descr_email">メール</string>
<string name="allow_accepting_calls_from_lock_screen">設定メニューでロック画面からの通話を有効にできます。</string>
<string name="people_can_connect_only_via_links_you_share">あなたと繋がることができるのは、あなたからリンクを頂いた方のみです。</string>
<string name="icon_descr_profile_image_placeholder">仮のプロフィール画像</string>
<string name="image_descr_qr_code">QRコード</string>
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">リンクが正しいかどうかご確認ください。または、連絡相手にもう一度リンクをお求めください。</string>
<string name="network_error_desc"><xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g> との接続を確認し、もう一度お試しください。</string>
<string name="enter_correct_current_passphrase">現在の正しい暗証フレーズを入力してください。</string>
<string name="smp_servers_preset_server">プレセットサーバ</string>
<string name="smp_servers_preset_address">プレセットサーバのアドレス</string>
<string name="display_name_connecting">接続待ち…</string>
<string name="description_via_contact_address_link_incognito">連絡先リンク経由でシークレットモード</string>
<string name="description_via_one_time_link_incognito">使い捨てリンク経由でシークレットモード</string>
<string name="moderated_description">モデレーターによって介入済み</string>
<string name="simplex_link_mode_browser_warning">ブラウザでリンクを開くと接続のプライバシーとセキュリティが下がる可能性があります。信頼されないSimpleXリンクは読み込まれません。</string>
<string name="error_joining_group">グループ参加にエラー発生</string>
<string name="error_sending_message">メッセージ送信にエラー発生</string>
<string name="error_accepting_contact_request">連絡先リクエストの承諾にエラー発生</string>
<string name="error_receiving_file">ファイル受信にエラー発生</string>
<string name="error_deleting_contact">連絡先の削除にエラー発生</string>
<string name="error_deleting_group">グループ削除にエラー発生</string>
<string name="error_deleting_pending_contact_connection">接続待ちの連絡先削除にエラー発生</string>
<string name="error_smp_test_certificate">サーバアドレスの証明証IDが正しくないかもしれません。</string>
<string name="smp_server_test_connect">接続</string>
<string name="error_deleting_user">ユーザのプロフィール削除にエラー発生</string>
<string name="periodic_notifications">定期的な通知</string>
<string name="periodic_notifications_disabled">定期的な通知が無効となってます!</string>
<string name="auth_disable_simplex_lock">SimpleXロックを無効にする</string>
<string name="auth_enable_simplex_lock">SimpleXロックを有効にする</string>
<string name="auth_log_in_using_credential">ログイン情報でアクセス</string>
<string name="auth_confirm_credential">アクセス情報を確認</string>
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">端末認証が起動してません。起動したら、設定でSimpleXロックをオンにできます。</string>
<string name="message_delivery_error_desc">恐らくこの連絡先があなたとの接続を削除されました。</string>
<string name="for_everybody">全員用</string>
<string name="error_saving_file">ファイル保存にエラー発生</string>
<string name="icon_descr_server_status_connected">接続中</string>
<string name="icon_descr_server_status_pending">確認待ち</string>
<string name="cancel_verb">中止</string>
<string name="add_contact">使い捨ての招待リンク</string>
<string name="icon_descr_record_voice_message">音声メッセージを録音</string>
<string name="from_gallery_button">ギャラリーから</string>
<string name="delete_contact_menu_action">削除</string>
<string name="icon_descr_help">ヘルプ</string>
<string name="invalid_contact_link">無効なリンク!</string>
<string name="invalid_QR_code">無効なQRコード</string>
<string name="icon_descr_more_button">つづき</string>
<string name="paste_connection_link_below_to_connect">連絡相手から頂いたリンクを以下の入力欄に貼り付けて繋がります。</string>
<string name="incorrect_code">誤ったセキュリティコード!</string>
<string name="paste_button">貼り付け</string>
<string name="chat_console">チャットのコンソール</string>
<string name="configure_ICE_servers">ICEサーバを設定</string>
<string name="how_to_use_your_servers">自分のサーバの使い方</string>
<string name="enter_one_ICE_server_per_line">ICEサーバ (1行に1サーバ)</string>
<string name="network_and_servers">ネットワークとサーバ</string>
<string name="network_settings_title">ネットワーク設定</string>
<string name="network_use_onion_hosts_no_desc_in_alert">オニオンのホストが使われません。</string>
<string name="delete_address">アドレスを削除</string>
<string name="exit_without_saving">保存せずに閉じる</string>
<string name="display_name_cannot_contain_whitespace">表示の名前には空白が使用できません。</string>
<string name="how_to_use_markdown">マークダウン (書式) の使い方</string>
<string name="italic">イタリック文字</string>
<string name="callstatus_rejected">拒否した通話</string>
<string name="callstatus_error">通話エラー</string>
<string name="callstatus_in_progress">通話中</string>
<string name="callstate_connected">接続中</string>
<string name="callstatus_connecting">発信中…</string>
<string name="callstate_ended">終了</string>
<string name="opensource_protocol_and_code_anybody_can_run_servers">プロトコル技術とコードはオープンソースで、どなたでもご自分のサーバを運用できます。</string>
<string name="privacy_redefined">プライバシーの基準を新境地に</string>
<string name="how_it_works">技術の説明</string>
<string name="make_private_connection">プライベートな接続をする</string>
<string name="onboarding_notifications_mode_title">プライベートな通知</string>
<string name="read_more_in_github_with_link"><font color="#0088ff">GitHubリポジトリ</font>で詳細をご確認ください。</string>
<string name="read_more_in_github">GitHubリポジトリで詳細をご確認ください。</string>
<string name="encrypted_video_call">エンドツーエンド暗号化済みビデオ通話</string>
<string name="no_call_on_lock_screen">無効にする</string>
<string name="status_no_e2e_encryption">エンドツーエンド暗号化がありません</string>
<string name="open_verb">開く</string>
<string name="icon_descr_call_connecting">発信中</string>
<string name="icon_descr_flip_camera">カメラ切り替え</string>
<string name="icon_descr_call_missed">不在着信</string>
<string name="icon_descr_call_rejected">拒否した通話</string>
<string name="settings_section_title_develop">開発</string>
<string name="integrity_msg_duplicate">重複メッセージ</string>
<string name="settings_section_title_help">ヘルプ</string>
<string name="protect_app_screen">アプリ画面を守る</string>
<string name="settings_section_title_chats">チャット</string>
<string name="settings_developer_tools">開発ツール</string>
<string name="settings_experimental_features">β機能</string>
<string name="settings_section_title_messages">メッセージ</string>
<string name="settings_section_title_calls">通話</string>
<string name="chat_is_running">チャットは稼働中</string>
<string name="chat_is_stopped">チャットが停止してます。</string>
<string name="database_passphrase">データベース暗証フレーズ</string>
<string name="export_database">データベースをエキスポート</string>
<string name="delete_database">データベースを削除</string>
<string name="import_database">データベースを読み込みますか?</string>
<string name="new_database_archive">新しいデータベースのアーカイブ</string>
<string name="old_database_archive">過去のデータベースアーカイブ</string>
<string name="delete_files_and_media_all">ファイルを全て削除</string>
<string name="delete_files_and_media_question">ファイルとメディアを削除しますか?</string>
<string name="total_files_count_and_size">%d ファイル|合計: %s</string>
<string name="encrypt_database">暗号化する</string>
<string name="remove_passphrase">削除</string>
<string name="current_passphrase">現在の暗証フレーズ</string>
<string name="encrypted_with_random_passphrase">データベースはランダムな暗証フレーズで暗号化済みで、変更可能です。</string>
<string name="change_database_passphrase_question">データベースの暗証フレーズを更新しますか?</string>
<string name="database_will_be_encrypted">データベースが暗号化されます。</string>
<string name="database_will_be_encrypted_and_passphrase_stored">データベースが暗号化され、暗証フレーズがキーストア (暗証キー保管庫) にほぞんされます。</string>
<string name="cannot_access_keychain">キーストア (暗証キーの保管庫) にアクセスできないため、データベースのパスワードが保存できません。</string>
<string name="database_passphrase_will_be_updated">データベース暗号化の暗号フレーズが更新されます。</string>
<string name="database_passphrase_is_required">チャットを開くにはデータベース暗証フレーズが必要です。</string>
<string name="file_with_path">ファイル: %s</string>
<string name="archive_created_on_ts">作成日時 \u0020<xliff:g id="archive_ts">%1$s</xliff:g></string>
<string name="delete_archive">アーカイブを削除</string>
<string name="join_group_button">参加</string>
<string name="join_group_question">グループに参加しますか?</string>
<string name="joining_group">グループに参加</string>
<string name="leave_group_button">脱退</string>
<string name="leave_group_question">グループを脱退しますか?</string>
<string name="alert_message_group_invitation_expired">グループ招待が無効となり、送信元によって取り消されました。</string>
<string name="alert_title_no_group">グループが見つかりません!</string>
<string name="alert_title_cant_invite_contacts">連絡先を招待できません!</string>
<string name="rcv_group_event_group_deleted">削除されたグループ</string>
<string name="rcv_conn_event_switch_queue_phase_changing">アドレスを変更しています…</string>
<string name="clear_contacts_selection_button">選択を取り消す</string>
<string name="group_member_status_complete">完了</string>
<string name="group_member_status_connected">接続中</string>
<string name="group_member_status_announced">接続待ち (アナウンス済み)</string>
<string name="icon_descr_contact_checked">連絡先が確認済み</string>
<string name="delete_group_question">グループを削除をしますか?</string>
<string name="delete_link">リンクを削除</string>
<string name="group_member_status_group_deleted">グループ削除済み</string>
<string name="delete_group_for_all_members_cannot_undo_warning">全員にとってグループが削除されます (※元に戻せません※)!</string>
<string name="group_member_status_invited">招待済み</string>
<string name="button_add_members">メンバーを招待する</string>
<string name="group_member_status_left">脱退しました。</string>
<string name="group_member_role_member">メンバー</string>
<string name="group_member_status_removed">除名されました</string>
<string name="button_remove_member">メンバーを除名する</string>
<string name="change_role">役割変更</string>
<string name="info_row_connection">接続</string>
<string name="conn_level_desc_direct">ダイレクト</string>
<string name="receiving_via">経由で受信</string>
<string name="create_secret_group_title">シークレットグループを作成する</string>
<string name="group_display_name_field">グループの表示名前</string>
<string name="network_status">ネットワーク状況</string>
<string name="network_option_ping_interval">PING間合い</string>
<string name="network_option_protocol_timeout">プロトコル・タイムアウト</string>
<string name="theme_dark">ダークモード</string>
<string name="chat_preferences_contact_allows">連絡先の任意で</string>
<string name="feature_enabled_for_contact">連絡先に有効</string>
<string name="feature_enabled_for_you">あなたに有効</string>
<string name="only_your_contact_can_send_disappearing">消えるメッセージを送れるのはあなたの連絡相手だけです。</string>
<string name="group_members_can_send_dms">グループのメンバーがダイレクトメッセージを送信できます。</string>
<string name="message_deletion_prohibited_in_chat">このグループではメッセージの完全削除が使用禁止です。</string>
<string name="ttl_days">%d 日</string>
<string name="ttl_month">%d 月</string>
<string name="ttl_w">%d週</string>
<string name="ttl_week">%d 週</string>
<string name="v4_4_live_messages_desc">あなたが入力しながら、送信先が更新に気づきます。</string>
<string name="v4_5_italian_interface">イタリア語UI</string>
<string name="contact_already_exists">連絡先が既に存在します。</string>
<string name="error_creating_address">アドレス作成にエラー発生</string>
<string name="error_deleting_contact_request">連絡先リクエスト削除にエラー発生</string>
<string name="hide_notification">プライベートにする</string>
<string name="settings_notifications_mode_title">通知サービス</string>
<string name="notifications_mode_periodic_desc">10分毎に新しいメッセージを1分間確認する。</string>
<string name="icon_descr_edited">編集済み</string>
<string name="icon_descr_cancel_image_preview">画像のプレビューを中止</string>
<string name="chat_with_developers">開発者とチャット</string>
<string name="image_decoding_exception_title">デコードエラー</string>
<string name="image_descr">画像</string>
<string name="icon_descr_server_status_disconnected">切断されました。</string>
<string name="icon_descr_server_status_error">エラー</string>
<string name="ok">OK</string>
<string name="toast_permission_denied">許可がありません!</string>
<string name="clear_verb">消す</string>
<string name="image_descr_link_preview">リンクプレビュー画像</string>
<string name="image_descr_profile_image">プロフィール画像</string>
<string name="markdown_in_messages">メッセージのマークダウン (書式編集)</string>
<string name="smp_servers_check_address">サーバのアドレスを確認してから再度試してください。</string>
<string name="contribute">貢献する</string>
<string name="rate_the_app">アプリを評価</string>
<string name="network_session_mode_user">チャットのプロフィール</string>
<string name="network_session_mode_entity">接続</string>
<string name="core_version">コアのバージョン: v%s</string>
<string name="edit_image">画像を編集</string>
<string name="callstatus_missed">不在着信</string>
<string name="always_use_relay">リレー経由で繋がる。</string>
<string name="status_e2e_encrypted">エンドツーエンド暗号化済み</string>
<string name="chat_database_deleted">チャットのデータベースが削除されました。</string>
<string name="delete_messages_after">次の期間が経ったら、メッセージを削除:</string>
<string name="enable_automatic_deletion_question">自動メッセージ削除を有効にしますか?</string>
<string name="remove_passphrase_from_keychain">キーストア (暗証キー保管庫) を削除しますか?</string>
<string name="database_encrypted">データベースは暗号化済み!</string>
<string name="error_encrypting_database">データベース暗号化ににエラー発生</string>
<string name="confirm_new_passphrase">新しい暗証フレーズを確認…</string>
<string name="encrypt_database_question">データベースを暗号化しますか?</string>
<string name="store_passphrase_securely_without_recover">暗証フレーズを失くさないように保管してください。失くすとチャットにアクセスできなくなります。</string>
<string name="enter_correct_passphrase">正しい暗証フレーズを入力</string>
<string name="enter_passphrase">暗証フレーズを入力</string>
<string name="restore_passphrase_not_found_desc">キーストア (暗証キー保管庫) に暗証フレーズが見つかりません。入力してください。アプリのデータをバックアップのツールで復元させると暗証フレーズが見つかりかねます。そうではない場合は開発者にご連絡ください。</string>
<string name="button_create_group_link">リンクを発行する</string>
<string name="info_row_group">グループ</string>
<string name="error_saving_group_profile">グループのプロフィール保存にエラー発生</string>
<string name="feature_enabled">有効</string>
<string name="group_members_can_send_disappearing">グループのメンバーが消えるメッセージを送信できます。</string>
<string name="ttl_mth">%d月</string>
<string name="v4_3_irreversible_message_deletion">メッセージの完全削除</string>
<string name="v4_3_voice_messages_desc">最大40秒、即受信。</string>
<string name="v4_3_improved_privacy_and_security_desc">起動中アプリリストに出ないようにする。</string>
<string name="v4_4_live_messages">ライブメッセージ</string>
<string name="remove_member_confirmation">除名</string>
<string name="rcv_group_event_member_deleted">除名されました: <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="reply_verb">返信する</string>
<string name="failed_to_create_user_duplicate_title">表示の名前が重複してます!</string>
<string name="failed_to_create_user_title">プロフィール作成にエラー発生</string>
<string name="failed_to_active_user_title">プロフィール切り替えにエラー発生</string>
<string name="error_adding_members">メンバー追加にエラー発生</string>
<string name="smp_server_test_create_queue">サーバの待ち行列を作成する</string>
<string name="smp_server_test_delete_queue">待ち行列を削除</string>
<string name="smp_server_test_disconnect">切断</string>
<string name="turn_off_battery_optimization">利用するには次の画面にてSimpleXに対する <b>電気省電力の設定をオフ</b> for <xliff:g id="appName">SimpleX</xliff:g> してください。そうしないと通知が無効になります。</string>
<string name="database_initialization_error_title">データベースを起動できません。</string>
<string name="settings_notification_preview_title">通知のプレビュー</string>
<string name="simplex_service_notification_text">メッセージ受信中…</string>
<string name="notification_preview_mode_message">メッセージ内容</string>
<string name="notification_new_contact_request">新しい繋がりのリクエスト</string>
<string name="copy_verb">コピー</string>
<string name="delete_message__question">メッセージを削除しますか?</string>
<string name="edit_verb">編集する</string>
<string name="hide_verb">プライベートにする</string>
<string name="delete_message_cannot_be_undone_warning">メッセージが削除されます (※元に戻せません※)!</string>
<string name="delete_message_mark_deleted_warning">メッセージが削除対象となります。宛先にはメッセージの解読ができます。</string>
<string name="icon_descr_cancel_file_preview">ファイルのプレビューを中止</string>
<string name="group_connection_pending">接続待ち…</string>
<string name="group_preview_join_as">%s として参加</string>
<string name="icon_descr_image_snd_complete">画像送信済み</string>
<string name="maximum_supported_file_size">現在、ファイルサイズの最上限は <xliff:g id="maxFileSize">%1$s</xliff:g></string>
<string name="large_file">大型ファイル!</string>
<string name="file_not_found">ファイルが見つかりません</string>
<string name="file_will_be_received_when_contact_is_online">連絡先がオンラインになったら受信されます。しばらくお待ちください。</string>
<string name="live_message">ライブメッセージ!</string>
<string name="ask_your_contact_to_enable_voice">音声メッセージを有効にするように連絡相手に要求してください。</string>
<string name="confirm_verb">確認</string>
<string name="no_details">詳細がありません</string>
<string name="reset_verb">戻す</string>
<string name="copied">クリップボードにコピー完了</string>
<string name="share_one_time_link">使い捨てリンクを発行する</string>
<string name="create_group">シークレットグループを作成する</string>
<string name="only_stored_on_members_devices">(グループのメンバーのみに保存されてます)</string>
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 デスクトップ: <b>「QRコードを読み取る」</b>経由でアプリに表示されるQRコードを読み取る</string>
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser"><xliff:g id="appName">SimpleX Chat</xliff:g> の招待リンクをもらったら、ブラウザで開けます:</string>
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app">📱 携帯: <b>「アプリで開く」</b>をタップし、 アプリ内で<b>「接続」</b>をタップする。</string>
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">拒否しても、相手には知らされません。</string>
<string name="reject_contact_button">拒否</string>
<string name="clear_chat_question">チャットを消しますか?</string>
<string name="mark_read">既読にする</string>
<string name="mark_unread">未読にする</string>
<string name="mute_chat">ミュート</string>
<string name="delete_pending_connection__question">接続待ちの繋がりを削除しますか?</string>
<string name="connect_button">接続</string>
<string name="create_one_time_link">使い捨てリンクを発行する</string>
<string name="one_time_link">使い捨ての招待リンク</string>
<string name="database_passphrase_and_export">データベース暗証フレーズとエキスポート</string>
<string name="how_to_use_simplex_chat">使い方</string>
<string name="markdown_help">マークダウン (書式編集) ガイド</string>
<string name="smp_servers_enter_manually">サーバを手動で入力</string>
<string name="network_use_onion_hosts_required_desc">接続にオニオンのホストが必要となります。</string>
<string name="core_build_timestamp">コアのビルド@: %s</string>
<string name="create_address">アドレスを作成</string>
<string name="delete_address__question">アドレスを削除しますか?</string>
<string name="display_name__field">表示の名前:</string>
<string name="full_name__field">フルネーム:</string>
<string name="create_profile_button">作成</string>
<string name="display_name">表示の名前</string>
<string name="full_name_optional__prompt">フルネーム (任意)</string>
<string name="colored">色付き</string>
<string name="callstate_received_answer">応答</string>
<string name="decentralized">分散型</string>
<string name="immune_to_spam_and_abuse">スパムや悪質送信を完全防止</string>
<string name="onboarding_notifications_mode_service">即時</string>
<string name="onboarding_notifications_mode_periodic">定期的</string>
<string name="call_already_ended">通話は既に終了してます!</string>
<string name="encrypted_audio_call">エンドツーエンド暗号化済みの音声通話</string>
<string name="ignore">無視</string>
<string name="reject">拒否</string>
<string name="call_connection_peer_to_peer">P2P</string>
<string name="privacy_and_security">プライバシーとセキュリティ</string>
<string name="alert_text_skipped_messages_it_can_happen_when">次の場合に起こりうる:
\n① メッセージが受信せずにサーバに溜まって30日が経つ場合
\n② 連絡相手からメッセージが送信中に、ご利用の受信サーバが更新・再起動する場合
\n③ 接続が不安定の場合
\nサーバの更新情報をご希望でしたら、設定にて開発者とお繋ぎください。
\nメッセージの喪失を防ぐために、サーバ冗長性を向上してまいります。</string>
<string name="settings_section_title_device">端末</string>
<string name="no_received_app_files">送受信済みのファイルがありません</string>
<string name="delete_messages">メッセージを削除</string>
<string name="chat_archive_header">チャットのアーカイブ</string>
<string name="rcv_group_event_member_connected">接続中</string>
<string name="rcv_group_event_user_deleted">あなたを除名しました。</string>
<string name="group_link">グループのリンク</string>
<string name="info_row_database_id">データベースID</string>
<string name="error_deleting_link_for_group">グループリンク削除にエラー発生</string>
<string name="users_delete_question">チャットのプロフィールを削除しますか?</string>
<string name="users_delete_data_only">ローカルなプロフィールデータのみ</string>
<string name="users_delete_with_connections">プロフィールとサーバ接続</string>
<string name="theme_light">ライトテーマ</string>
<string name="chat_preferences_default">デフォルト (%s)</string>
<string name="prohibit_sending_disappearing_messages">消えるメッセージを使用禁止にする。</string>
<string name="contacts_can_mark_messages_for_deletion">連絡先はメッセージを削除対象とすることができます。あなたには閲覧可能です。</string>
<string name="only_you_can_send_disappearing">消えるメッセージを送れるのはあなただけです。</string>
<string name="prohibit_message_deletion">メッセージの完全削除を使用禁止にする。</string>
<string name="prohibit_sending_voice">音声メッセージを使用禁止にする。</string>
<string name="feature_cancelled_item">中止されました %s</string>
<string name="v4_4_disappearing_messages">消えるメッセージ</string>
<string name="v4_5_transport_isolation_descr">チャットのプロフィール (既存設定)、または接続 (β機能設定) による</string>
<string name="v4_5_multiple_chat_profiles_descr">異なった名前、アバター、トランスポート隔離。</string>
<string name="v4_4_french_interface">フランス語UI</string>
<string name="v4_5_message_draft">メッセージの下書き</string>
<string name="v4_5_reduced_battery_usage_descr">まだまだ改善してまいります!</string>
<string name="v4_5_multiple_chat_profiles">複数チャットのプロフィール</string>
<string name="v4_5_message_draft_descr">添付を含めて、下書きを保存する。</string>
<string name="v4_5_private_filenames">プライベートなファイル名</string>
<string name="v4_5_reduced_battery_usage">電池使用量低減</string>
<string name="error_removing_member">メンバー除名にエラー発生</string>
<string name="conn_level_desc_indirect">関節 (<xliff:g id="conn_level">%1$s</xliff:g>)</string>
<string name="incognito">シークレットモード</string>
<string name="incognito_info_protects">シークレットモードとは、メインのプロフィールとプロフィール画像を守るために、新しい連絡先を追加する時に、その連絡先に対してランダムなプロフィールが作成されるという対策です。</string>
<string name="chat_preferences_no">いいえ</string>
<string name="chat_preferences_on">オン</string>
<string name="direct_messages">ダイレクトメッセージ</string>
<string name="timed_messages">消えるメッセージ</string>
<string name="disappearing_prohibited_in_this_chat">このチャットでは消えるメッセージが使用禁止です。</string>
<string name="prohibit_direct_messages">メンバー間のダイレクトメッセージを使用禁止にする。</string>
<string name="prohibit_sending_disappearing">消えるメッセージを使用禁止にする。</string>
<string name="ttl_s">%d秒</string>
<string name="ttl_months">%d 月</string>
<string name="ttl_hour">%d 時</string>
<string name="ttl_hours">%d 時</string>
<string name="ttl_h">%d時</string>
<string name="error_starting_chat">チャット開始にエラー発生</string>
<string name="error_stopping_chat">チャット停止にエラー発生</string>
<string name="import_database_question">チャットのデータベースを読み込みますか?</string>
<string name="chat_database_imported">チャットのデータベースが読み込まれました。</string>
<string name="error_deleting_database">チャットデータベース削除にエラー発生</string>
<string name="error_importing_database">チャットデータベースの読み込みにエラー発生</string>
<string name="import_database_confirmation">読み込む</string>
<string name="restart_the_app_to_use_imported_chat_database">読み込んだデータベースを利用するにはアプリを再起動する必要があります。</string>
<string name="delete_chat_profile_question">チャットのプロフィールを削除しますか?</string>
<string name="restart_the_app_to_create_a_new_chat_profile">再起動して新しいチャットプロフィールを作る。</string>
<string name="files_and_media_section">ファイルとメディア</string>
<string name="error_changing_message_deletion">設定変更にエラー発生</string>
<string name="notifications_will_be_hidden">アプリが起動中のみに通知が出ます!</string>
<string name="encrypted_database">暗号化済みデータベース</string>
<string name="keychain_error">キーチェーンのエラー</string>
<string name="store_passphrase_securely">暗証フレーズを失くさないように保管してください。失くすと変更できなくなります。</string>
<string name="error_with_info">エラー: %s</string>
<string name="restore_database_alert_desc">データベースのバックアップで復旧する際に前の暗証フレーズを入力してください。行われたら元に戻せません。</string>
<string name="icon_descr_add_members">メンバーを招待する</string>
<string name="rcv_group_event_member_left">脱退しました。</string>
<string name="rcv_group_event_changed_member_role">%s の役割を %s に変えました。</string>
<string name="rcv_group_event_changed_your_role">役割を %s に変えました。</string>
<string name="rcv_group_event_member_added">招待された <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="snd_conn_event_switch_queue_phase_changing_for_member">アドレスを変更いたします: %s</string>
<string name="group_member_role_owner">オーナー</string>
<string name="group_member_status_connecting">接続待ち</string>
<string name="icon_descr_expand_role">役割の選択を拡大</string>
<string name="invite_to_group_button">グループに招待する</string>
<string name="new_member_role">新しいメンバー役割</string>
<string name="no_contacts_to_add">追加できる連絡先がありません</string>
<string name="button_delete_group">グループを削除</string>
<string name="create_group_link">グループのリンクを発行する</string>
<string name="button_edit_group_profile">グループのプロフィールを編集</string>
<string name="delete_group_for_self_cannot_undo_warning">あなたにとってグループが削除されます (※元に戻せません※)!</string>
<string name="button_leave_group">グループを脱退</string>
<string name="database_restore_error">データベース復元エラー</string>
<string name="rcv_group_event_updated_group_profile">グループプロフィールを更新しました</string>
<string name="snd_group_event_user_left">脱退しました。</string>
<string name="invite_prohibited_description">あなたのメインプロフィールで参加してるグループにシークレットモードのプロフィールで繋がってる連絡先を招待しようとしてます。</string>
<string name="group_info_member_you">あなた: <xliff:g id="group_info_you">%1$s</xliff:g></string>
<string name="role_in_group">役割</string>
<string name="sending_via">経由で送信</string>
<string name="theme_system">システム</string>
<string name="incognito_info_share">連絡相手にシークレットモードのプロフィールを共有すると、その連絡相手に招待されたグループでも同じプロフィールが使われます。</string>
<string name="theme">テーマ</string>
<string name="voice_messages">音声メッセージ</string>
<string name="app_name"><xliff:g id="appName">SimpleX</xliff:g></string>
<string name="you_will_join_group">このリンクのグループに参加し、そのメンバーに繋がります。</string>
<string name="connected_to_server_to_receive_messages_from_contact">この連絡先から受信するメッセージのサーバに既に接続してます。</string>
<string name="sending_files_not_yet_supported">ファイル送信機能がまだ実装されてません</string>
<string name="trying_to_connect_to_server_to_receive_messages">このコンタクトから受信するメッセージのサーバに接続しようとしてます。</string>
<string name="unknown_message_format">不明なメッセージ形式</string>
<string name="sender_you_pronoun">あなた</string>
<string name="description_via_group_link">グループリンク経由</string>
<string name="notification_preview_mode_contact_desc">連絡先のみ表示</string>
<string name="auth_stop_chat">チャットを閉じる</string>
<string name="icon_descr_received_msg_status_unread">未読</string>
<string name="icon_descr_sent_msg_status_send_failed">送信失敗</string>
<string name="personal_welcome">ようこそ <xliff:g>%1$s</xliff:g></string>
<string name="voice_message">音声メッセージ</string>
<string name="view_security_code">セキュリティコードを確認</string>
<string name="send_live_message">ライブメッセージを送信</string>
<string name="scan_QR_code">QRコードを読み込む</string>
<string name="to_connect_via_link_title">リンク経由で接続</string>
<string name="security_code">セキュリティコード</string>
<string name="is_verified">%s は認証済み</string>
<string name="smp_servers">SMPサーバ</string>
<string name="save_servers_button">保存</string>
<string name="update_network_session_mode_question">トランスポート隔離モードを更新しますか?</string>
<string name="save_preferences_question">この設定でよろしいですか?</string>
<string name="icon_descr_video_off">ビデオオフ</string>
<string name="call_connection_via_relay">リレー経由</string>
<string name="icon_descr_video_on">ビデオオン</string>
<string name="icon_descr_speaker_off">スピーカーオフ</string>
<string name="your_chat_database">あなたのチャットデータベース</string>
<string name="stop_chat_confirmation">停止</string>
<string name="stop_chat_to_enable_database_actions">データベース操作をするにはチャットを閉じてからです。</string>
<string name="simplex_link_contact">SimpleX連絡先アドレス</string>
<string name="simplex_link_invitation">SimpleX使い捨て招待リンク</string>
<string name="description_via_contact_address_link">連絡先アドレスリンク経由</string>
<string name="description_via_one_time_link">使い捨てリンク経由</string>
<string name="description_you_shared_one_time_link_incognito">シークレットモードで使い捨てリンクを送りました</string>
<string name="simplex_link_group">SimpleXグループリンク</string>
<string name="simplex_link_mode_browser">ブラウザ経由</string>
<string name="sender_cancelled_file_transfer">ファイル送信が中止されました。</string>
<string name="sender_may_have_deleted_the_connection_request">送信元が繋がりリクエストを削除したかもしれません。</string>
<string name="error_smp_test_server_auth">このサーバで待ち行列を作るには認証が必要です。パスワードをご確認ください。</string>
<string name="periodic_notifications_desc">アプリが定期的に新しいメッセージを受信します。一日の電池使用量が約3%で、プッシュ通知に頼らずに、あなたの端末のデータをサーバに送ることはありません。</string>
<string name="la_notice_title_simplex_lock">SimpleXロック</string>
<string name="enter_passphrase_notification_desc">通知を受けるには、データベースの暗証フレーズを入力してください。</string>
<string name="simplex_service_notification_title"><xliff:g id="appNameFull">SimpleX Chat</xliff:g> サービス</string>
<string name="auth_simplex_lock_turned_on">SimpleXロック:オン</string>
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">起動時、または非アクティブ状態で30秒が経った後に戻ると、認証する必要となります。</string>
<string name="share_verb">共有する</string>
<string name="icon_descr_sent_msg_status_unauthorized_send">非認証の送信</string>
<string name="this_text_is_available_in_settings">このテキストは設定にあります。</string>
<string name="images_limit_title">画像数の上限を超えてます!</string>
<string name="welcome">ようこそ!</string>
<string name="group_preview_you_are_invited">グループ招待が届きました</string>
<string name="your_chats">あなたのチャット</string>
<string name="text_field_set_contact_placeholder">連絡先を設定…</string>
<string name="waiting_for_file">ファイル待ち</string>
<string name="switch_receiving_address_question">受信アドレスを変えますか?</string>
<string name="send_verb">送信する</string>
<string name="send_live_message_desc">ライブメッセージを送信 (入力しながら宛先の画面で更新される)</string>
<string name="to_share_with_your_contact">(連絡先に共有)</string>
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(クリップボードから読み込むか、貼り付ける)</string>
<string name="thank_you_for_installing_simplex"><xliff:g id="appNameFull">SimpleX Chat</xliff:g>をご利用いただきありがとうございます!</string>
<string name="use_camera_button">カメラ起動</string>
<string name="you_accepted_connection">繋がりを承認しました</string>
<string name="you_invited_your_contact">連絡先に招待を送りました</string>
<string name="connection_you_accepted_will_be_cancelled">承認ずみの接続がキャンセルされます!</string>
<string name="contact_you_shared_link_with_wont_be_able_to_connect">あなたからリンクを受けた連絡先が接続できなくなります!</string>
<string name="icon_descr_address"><xliff:g id="appName">SimpleX</xliff:g>アドレス</string>
<string name="show_QR_code">QRコードを表示</string>
<string name="this_link_is_not_a_valid_connection_link">このリンクは有効な接続リンクではありません!</string>
<string name="this_QR_code_is_not_a_link">このQRコードはリンクではありません!</string>
<string name="you_will_be_connected_when_group_host_device_is_online">グループのホスト端末がオンラインになったら、接続されます。後でチェックするか、しばらくお待ちください。</string>
<string name="show_QR_code_for_your_contact_to_scan_from_the_app__multiline">連絡相手がアプリからQRコードを読み込めます。</string>
<string name="you_will_be_connected_when_your_contacts_device_is_online">連絡先がオンラインになったら、接続されます。後でチェックするか、しばらくお待ちください。</string>
<string name="your_chat_profile_will_be_sent_to_your_contact">あなたのチャットプロフィールが
\n連絡相手に送られます。</string>
<string name="share_invitation_link">招待リンクを送る</string>
<string name="your_profile_will_be_sent">あなたのチャットプロフィールが連絡相手に送られます。</string>
<string name="scan_code">コードを読み込む</string>
<string name="scan_code_from_contacts_app">連絡相手のアプリからセキュリティコードを読み込む</string>
<string name="chat_lock">SimpleXロック</string>
<string name="is_not_verified">%s は未認証</string>
<string name="your_contact_address">あなたのチャットアドレス</string>
<string name="your_settings">あなたの設定</string>
<string name="smp_servers_test_server">テストサーバ</string>
<string name="smp_servers_save">サーバを保存</string>
<string name="smp_servers_test_failed">サーバテスト失敗!</string>
<string name="smp_servers_use_server">サーバを使う</string>
<string name="smp_servers_your_server">あなたのサーバ</string>
<string name="smp_servers_your_server_address">あなたのサーバアドレス</string>
<string name="smp_servers_per_user">現在のチャットプロフィールの新しい接続のサーバ</string>
<string name="smp_servers_use_server_for_new_conn">新しい接続に使う</string>
<string name="saved_ICE_servers_will_be_removed">保存されたWebRTC ICEサーバが削除されます。</string>
<string name="your_ICE_servers">あなたのICEサーバ</string>
<string name="network_disable_socks">直接にインタネットに繋がりますか?</string>
<string name="network_enable_socks">SOCKSプロキシを使いますか?</string>
<string name="network_socks_toggle">SOCKSプロキシ (ポート9050) を使う</string>
<string name="update_onion_hosts_settings_question">.onionのホスト設定を更新しますか?</string>
<string name="network_use_onion_hosts">.onionホストを使う</string>
<string name="network_use_onion_hosts_prefer">利用可能時に</string>
<string name="network_session_mode_transport_isolation">トランスポート隔離</string>
<string name="save_and_notify_contact">保存して、連絡先にに知らせる</string>
<string name="your_current_profile">現在のプロフィール</string>
<string name="save_and_notify_contacts">保存して、連絡先にに知らせる</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">あなたのプライバシーとセキュリティを守るメッセージとアプリのプラットフォーム</string>
<string name="we_do_not_store_contacts_or_messages_on_servers">連絡先情報と届けたメッセージをサーバに保存することは一切ありません。</string>
<string name="you_control_your_chat">あなたのチャットはあなたが決めます!</string>
<string name="your_profile_is_stored_on_your_device">あなたのプロフィール、連絡先、送信したメッセージがご自分の端末に保存されます。</string>
<string name="profile_is_only_shared_with_your_contacts">プロフィールは連絡先にしか共有されません。</string>
<string name="you_can_use_markdown_to_format_messages__prompt">メッセージの書式をマークダウンで編集できます。</string>
<string name="secret">シークレット</string>
<string name="strikethrough">取り消し線</string>
<string name="callstate_starting">接続中…</string>
<string name="next_generation_of_private_messaging">次世代のプライバシー・メッセンジャー</string>
<string name="you_control_servers_to_receive_your_contacts_to_send">あなたがメッセージの<b>受信</b>サーバを決められます。あなたの連絡先が同じく、自分に対する受信サーバを決められます。</string>
<string name="icon_descr_video_call">ビデオ通話</string>
<string name="onboarding_notifications_mode_off">アプリが稼働中に</string>
<string name="webrtc_ice_servers">WebRTC ICEサーバ</string>
<string name="your_ice_servers">あなたのICEサーバ</string>
<string name="settings_section_title_settings">設定</string>
<string name="alert_title_skipped_messages">飛ばしたメッセージ</string>
<string name="settings_section_title_you">あなた</string>
<string name="settings_section_title_themes">テーマ</string>
<string name="run_chat_section">チャット起動</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">現在のチャットデータベースが読み込まれたデータベースに上書きされます。
\n元に戻せません。プロフィール、連絡先、メッセージ、ファイルが置き換えられます。</string>
<string name="chat_item_ttl_seconds">%s 秒</string>
<string name="delete_files_and_media_desc">ファイルとメディアが全て削除されます (※元に戻せません※)。低解像度の画像が残ります。</string>
<string name="enable_automatic_deletion_message">選択中の以前の送受信したメッセージが削除されます (※元に戻せません※)。数分かかります。</string>
<string name="update_database">更新</string>
<string name="database_is_not_encrypted">チャットデータベースが暗号化されてません。暗証フレーズを設定して保管してください。</string>
<string name="restore_database">データベースを復元</string>
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">アプリの設定・データベース経由で、またはアプリの再起動でチャットを始められます。</string>
<string name="you_are_invited_to_group_join_to_connect_with_group_members">グループ招待が届きました。参加してグループのメンバーとお繋がりください。</string>
<string name="youve_accepted_group_invitation_connecting_to_inviting_group_member">グループに入りました。招待をくれたメンバーに接続してます。</string>
<string name="you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved">このグループからのメッセージが届かなくなります。チャットの履歴が残ります。</string>
<string name="alert_message_no_group">このグループはもう存在しません。</string>
<string name="group_invitation_tap_to_join">タップして参加</string>
<string name="group_invitation_tap_to_join_incognito">タップしてシークレットモードで参加</string>
<string name="you_joined_this_group">グループに入りました。</string>
<string name="you_rejected_group_invitation">グループの招待を拒否しました</string>
<string name="you_sent_group_invitation">グループの招待を送りました</string>
<string name="snd_group_event_changed_member_role">%sの役割を次に変えました:%s</string>
<string name="button_send_direct_message">ダイレクトメッセージを送信</string>
<string name="num_contacts_selected"><xliff:g id="num_contacts">%1$s</xliff:g>連絡先が選択中</string>
<string name="snd_group_event_member_deleted">除名しました: <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="switch_verb">切り替える</string>
<string name="member_role_will_be_changed_with_notification">役割が「%s」となります。グループの全員に通知が出ます。</string>
<string name="conn_stats_section_title_servers">サーバ</string>
<string name="member_role_will_be_changed_with_invitation">役割が「%s」となります。メンバーに新しい招待が届きます。</string>
<string name="group_is_decentralized">グループは完全分散型で、メンバーしか内容を見れません。</string>
<string name="network_options_save">保存</string>
<string name="update_network_settings_question">ネットワーク設定を更新しますか?</string>
<string name="updating_settings_will_reconnect_client_to_all_servers">設定を更新すると、全サーバにクライントの再接続が行われます。</string>
<string name="your_chat_profiles_stored_locally">チャットプロフィールはローカルであなたの端末だけに保存されます。</string>
<string name="save_color">色を保存</string>
<string name="chat_preferences_you_allow">あなたが次を許可しています:</string>
<string name="chat_preferences_yes">はい</string>
<string name="set_group_preferences">グループ設定を行う</string>
<string name="your_preferences">あなたの設定</string>
<string name="voice_prohibited_in_this_chat">このチャットでは音声メッセージが使用禁止です。</string>
<string name="voice_messages_are_prohibited">このグループでは音声メッセージが使用禁止です。</string>
<string name="v4_2_security_assessment">セキュリティ評価</string>
<string name="whats_new">新着情報</string>
<string name="v4_2_security_assessment_desc">SimpleX ChatはTrail of Bitsによるセキュリティ監査を受けました。</string>
<string name="v4_2_auto_accept_contact_requests_desc">任意的な歓迎メッセージで</string>
<string name="v4_5_italian_interface_descr">ユーザーの皆様に感謝いたします!Weblateにて貢献できます!</string>
<string name="v4_4_verify_connection_security">接続のセキュリティを確認</string>
<string name="error_smp_test_failed_at_step">テストが次のステップで失敗しました:%s</string>
<string name="ntf_channel_messages">SimpleX Chatメッセージ</string>
<string name="ntf_channel_calls">SimpleX Chat通話</string>
<string name="settings_notification_preview_mode_title">プレビューを表示</string>
<string name="notifications_mode_periodic">定期的に起動</string>
<string name="notifications_mode_off">アプリがアクティブ時に実行</string>
<string name="icon_descr_sent_msg_status_sent">送信済み</string>
<string name="you_have_no_chats">あなたはチャットがありません。</string>
<string name="share_message">メッセージを送る…</string>
<string name="share_file">ファイル共有…</string>
<string name="voice_message_send_text">音声メッセージ…</string>
<string name="voice_message_with_duration">音声メッセージ (<xliff:g id="duration">%1$s</xliff:g>)</string>
<string name="icon_descr_send_message">メッセージを送信</string>
<string name="icon_descr_settings">設定</string>
<string name="icon_descr_simplex_team"><xliff:g id="appName">SimpleX</xliff:g>開発チーム</string>
<string name="this_string_is_not_a_connection_link">このストリングは接続リンクではありません!</string>
<string name="chat_with_the_founder">質問やアイデアを送る</string>
<string name="star_on_github">GithubでStar</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">あなたのプロフィールはご自分の端末に保存され、あなたの連絡先のみに共有されます。
\n
\n<xliff:g id="appName">SimpleX</xliff:g>のサーバには開示されません。</string>
<string name="your_calls">あなたの通話</string>
<string name="integrity_msg_skipped"><xliff:g id="connection ID" example="1">%1$d</xliff:g>飛ばしたメッセージ</string>
<string name="send_link_previews">リンクのプレビューを送信</string>
<string name="set_password_to_export">暗証フレーズを設定してからエキスポート</string>
<string name="stop_chat_question">チャットを閉じますか?</string>
<string name="save_passphrase_in_keychain">暗証フレーズをキーストア (暗証キー保管庫) に保存</string>
<string name="wrong_passphrase">データベースの暗証フレーズが違います</string>
<string name="unknown_error">不明なエラー</string>
<string name="save_passphrase_and_open_chat">暗証フレーズをを保存して、チャットを開始</string>
<string name="unknown_database_error_with_info">不明なデータベースのエラー: %s</string>
<string name="wrong_passphrase_title">暗証フレーズが違います!</string>
<string name="you_are_invited_to_group">グループ招待が届きました</string>
<string name="network_option_seconds_label"></string>
<string name="network_option_tcp_connection_timeout">TCP接続タイムアウト</string>
<string name="save_group_profile">保存グループのプロフィール</string>
<string name="v4_3_irreversible_message_deletion_desc">連絡先がメッセージの完全削除を許可できます。</string>
<string name="failed_to_create_user_duplicate_desc">同じ表示名前のチャットプロフィールが既にあります。別のを選んでください。</string>
<string name="smp_server_test_secure_queue">待ち行列セキュリティ確認</string>
<string name="database_initialization_error_desc">データベースが正しく稼働してません。詳細はタップにて</string>
<string name="notification_preview_mode_message_desc">連絡先とメッセージを表示</string>
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">あなたのデータを守るために、SimpleXロックをオンにしてください。
\nオンにするには、認証ステップが行われます。</string>
<string name="la_notice_turn_on">オンにする</string>
<string name="auth_unlock">ロック解除</string>
<string name="save_verb">保存する</string>
<string name="reveal_verb">開示する</string>
<string name="tap_to_start_new_chat">タップして新しいチャットを始める</string>
<string name="image_decoding_exception_desc">画像が解読できません。別のイメージで試すか、開発者に伝えてください。</string>
<string name="icon_descr_waiting_for_image">画像待ち</string>
<string name="waiting_for_image">画像待ち</string>
<string name="contact_sent_large_file">向こうが最上限の大きさを超えるファイルを送ろうとしました (<xliff:g id="maxFileSize">%1$s</xliff:g>)。</string>
<string name="voice_messages_prohibited">音声メッセージは使用禁止です!</string>
<string name="add_contact_or_create_group">新しいチャットを始める</string>
<string name="you_can_connect_to_simplex_chat_founder"><font color="#0088ff"><xliff:g id="appNameFull">SimpleX Chat</xliff:g>の開発者と繋がれば、質問したり、速報を受けたりすることができます</font></string>
<string name="to_start_a_new_chat_help_header">新しいチャットを始めるには</string>
<string name="chat_help_tap_button">ボタンをタップ</string>
<string name="unmute_chat">ミュート解除</string>
<string name="set_contact_name">連絡先を設定</string>
<string name="contact_wants_to_connect_with_you">はあなたと繋がりたいです!</string>
<string name="you_can_also_connect_by_clicking_the_link">リンクをクリックすることでも接続できます。ブラウザが起動すれば <b>Open in mobile app (アプリで開く)</b>ボタンをクリックしてください。</string>
<string name="your_chat_profiles">あなたのチャットプロフィール</string>
<string name="smp_servers_scan_qr">サーバのQRコードを読み込む</string>
<string name="smp_servers_test_some_failed">テストに失敗したサーバがあります:</string>
<string name="use_simplex_chat_servers__question"><xliff:g id="appNameFull">SimpleX Chat</xliff:g>サーバを使いますか?</string>
<string name="using_simplex_chat_servers"><xliff:g id="appNameFull">SimpleX Chat</xliff:g>を使っています。</string>
<string name="share_link">リンクを送る</string>
<string name="core_simplexmq_version">simplexmq: バージョン%s (%2s)</string>
<string name="you_can_share_your_address_anybody_will_be_able_to_connect">あなたと繋がるリンク、またはQRコードを共有できます。誰でも接続できます。後で削除しても、連絡先がそのままのこります。</string>
<string name="section_title_welcome_message">歓迎メッセージ</string>
<string name="callstate_waiting_for_answer">応答待ち…</string>
<string name="callstate_waiting_for_confirmation">確認待ち…</string>
<string name="first_platform_without_user_ids">世界初のユーザーIDのないプラットフォーム|設計も元からプライベート</string>
<string name="use_chat">チャット</string>
<string name="contact_wants_to_connect_via_call"><xliff:g id="contactName" example="Alice">%1$s</xliff:g>は次の方法であなたと繋がりたいです:</string>
<string name="video_call_no_encryption">ビデオ通話 (非エンドツーエンド暗号化)</string>
<string name="show_call_on_lock_screen">表示</string>
<string name="icon_descr_speaker_on">スピーカーオン</string>
<string name="your_privacy">あなたのプライバシー</string>
<string name="messages_section_description">この設定は現在のチャットプロフィールのメッセージに適応されます。</string>
<string name="you_have_to_enter_passphrase_every_time">アプリ起動時に暗証フレーズを入力しなければなりません。端末に保存されてません。</string>
<string name="database_backup_can_be_restored">データベースの暗証フレーズ変更が完了してません。</string>
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">リンク、またはQRコードを共有できます。誰でもグループに参加できます。後で削除しても、グループのメンバーがそのままのこります。</string>
<string name="network_options_revert">元に戻す</string>
<string name="update_network_settings_confirmation">更新</string>
<string name="accept_feature_set_1_day">1日に設定</string>
<string name="v4_4_disappearing_messages_desc">一定時間が経ったら送信されたメッセージが削除されます。</string>
<string name="v4_4_french_interface_descr">ユーザーの皆様に感謝いたします!Weblateにて貢献できます!</string>
<string name="v4_5_private_filenames_descr">時間帯を漏らさないために、画像と音声ファイルはUTCを使います。</string>
<string name="v4_5_transport_isolation">トランスポート隔離</string>
<string name="restore_database_alert_confirm">復元</string>
<string name="restore_database_alert_title">データベースを復元しますか?</string>
<string name="save_and_notify_group_members">保存して、グループのメンバーにに知らせる</string>
<string name="send_us_an_email">メールを送る</string>
<string name="share_image">画像共有…</string>
<string name="simplex_link_mode">SimpleXリンク</string>
<string name="settings_section_title_support">SIMPLEX CHATを支援</string>
<string name="smp_servers_test_servers">テストサーバ</string>
<string name="switch_receiving_address_desc">開発中の機能です!相手のクライアントが4.2でなければ機能しません。アドレス変更が完了すると、会話にメッセージが出ます。連絡相手 (またはグループのメンバー) からメッセージを受信できないかをご確認ください。</string>
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery">あなたのプライバシーを守るために、このアプリはプッシュ通知の変わりに <b><xliff:g id="appName">SimpleX</xliff:g> バックグラウンド・サービス</b> を使ってます。一日の電池使用量は約3%です。</string>
<string name="to_protect_privacy_simplex_has_ids_for_queues">あなたのプライバシーを守るために、他のアプリと違って、ユーザーIDの変わりに <xliff:g id="appName">SimpleX</xliff:g> メッセージ束毎にIDを配布し、各連絡先が別々と扱います。</string>
<string name="group_main_profile_sent">あなたのチャットプロフィールが他のグループメンバーに送られます。</string>
<string name="to_verify_compare">エンドツーエンド暗号化を確認するには、ご自分の端末と連絡先の端末のコードを比べます (スキャンします)。</string>
<string name="trying_to_connect_to_server_to_receive_messages_with_error">このコンタクトから受信するメッセージのサーバに接続しようとしてます。(エラー: <xliff:g id="errorMsg">%1$s</xliff:g>)。</string>
<string name="connection_error_auth_desc">使用済みリンク、または連絡先による接続の削除ではなければ、バッグの可能性があります。開発者にお伝えください。
\n繋がるには、連絡先に新しくリンクを発行してもらって、電波が安定かどうかご確認ください。</string>
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">接続を完了するには、連絡相手がオンラインになる必要があります。
\nこの接続をキャンセルして、連絡先を削除をすることもできます (後でやり直すこともできます)。</string>
<string name="verify_security_code">セキュリティコードを確認</string>
<string name="simplex_link_connection"><xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g>経由</string>
<string name="image_descr_simplex_logo"><xliff:g id="appName">SimpleX</xliff:g>ロゴ</string>
<string name="you_need_to_allow_to_send_voice">音声メッセージを送るには、連絡相手からの音声メッセージを許可しなければなりません。</string>
<string name="you_must_use_the_most_recent_version_of_database">あなたの最新データベースを1つの端末にしか使わなければ、一部の連絡先からメッセージが届きかねます。</string>
<string name="you_are_already_connected_to_vName_via_this_link">既に繋がってます: <xliff:g id="contactName" example="Alice">%1$s!</xliff:g></string>
<string name="alert_title_cant_invite_contacts_descr">シークレットモードのプロフィールでこのグループに参加しています。メインのプロフィールを守るために、招待することができません。</string>
<string name="description_you_shared_one_time_link">使い捨てリンクを送りました</string>
<string name="profile_will_be_sent_to_contact_sending_link">リンクを送ってくれた連絡先にあなたのプロフィールを送ります。</string>
<string name="your_SMP_servers">あなたのSMPサーバ</string>
<string name="your_simplex_contact_address">あなたの<xliff:g id="appName">SimpleX</xliff:g>アドレス</string>
<string name="you_will_be_connected_when_your_connection_request_is_accepted">連絡先が繋がりリクエストを承認したら、接続されます。後でチェックするか、しばらくお待ちください。</string>
<string name="switch_receiving_address">受信アドレスを変える</string>
<string name="incognito_random_profile">あなたのランダム・プロフィール</string>
<string name="incognito_info_find">シークレットモード接続のプロフィールを確認するには、チャットの上部の連絡先、またはグループ名をタップします。</string>
<string name="v4_3_voice_messages">音声メッセージ</string>
<string name="settings_section_title_socks">SOCKSプロキシ</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">データベースのエキスポート、読み込み、削除するにはチャットを閉じてからです。チャットを閉じると送受信ができなくなります。</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">あなたのプロフィール、連絡先、メッセージ、ファイルが完全削除されます (※元に戻せません※)。</string>
<string name="update_database_passphrase">データベース暗証フレーズを更新</string>
<string name="save_archive">アーカイブを保存</string>
<string name="snd_group_event_changed_role_for_yourself">あなたが自分の役割を次に変えました:%s</string>
<string name="snd_conn_event_switch_queue_phase_completed">アドレスを変えました</string>
<string name="snd_conn_event_switch_queue_phase_completed_for_member">%sのアドレスを変えました</string>
<string name="select_contacts">連絡先を選択</string>
<string name="skip_inviting_button">今はメンバーを招待しません</string>
<string name="group_info_section_title_num_members"><xliff:g id="num_members">%1$s</xliff:g>メンバー</string>
</resources>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="chat_item_ttl_month">1 mėnuo</string>
<string name="chat_item_ttl_week">1 savaitė</string>
<string name="about_simplex_chat">Apie <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="chat_item_ttl_day">1 diena</string>
<string name="a_plus_b">a + b</string>
<string name="about_simplex">Apie SimpleX</string>
<string name="smp_servers_add">Pridėti serverį…</string>
<string name="v4_3_improved_server_configuration_desc">Pridėti serverius skenuojant QR kodus.</string>
</resources>
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.SimpleX" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:statusBarColor">@android:color/black</item>
<item name="android:windowBackground">@color/window_background_dark</item>
</style>
</resources>
File diff suppressed because it is too large Load Diff
@@ -1,2 +1,438 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="about_simplex_chat">Sobre o <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="about_simplex">Sobre o SimpleX</string>
<string name="chat_item_ttl_day">1 dia</string>
<string name="chat_item_ttl_week">1 semana</string>
<string name="chat_item_ttl_month">1 mês</string>
<string name="a_plus_b">a + b</string>
<string name="alert_title_cant_invite_contacts">Não é possível convidar contatos!</string>
<string name="rcv_conn_event_switch_queue_phase_changing">mudando endereço…</string>
<string name="snd_conn_event_switch_queue_phase_changing_for_member">mudando endereço para %s…</string>
<string name="snd_conn_event_switch_queue_phase_changing">"mudando endereço…"</string>
<string name="change_role">Mudar regra</string>
<string name="change_verb">Mudar</string>
<string name="incognito_random_profile_from_contact_description">Um perfil aleatório será enviado para o contato do qual você recebeu este link</string>
<string name="both_you_and_your_contacts_can_delete">Você e seu contato podem excluir mensagens enviadas de forma irreversível.</string>
<string name="it_can_disabled_via_settings_notifications_still_shown"><b>Pode ser desativado nas configurações</b> as notificações ainda serão exibidas enquanto o aplicativo estiver em execução.</string>
<string name="both_you_and_your_contact_can_send_voice">Você e seu contato podem enviar mensagens de voz.</string>
<string name="notifications_mode_off_desc">O aplicativo pode receber notificações apenas quando estiver em execução, nenhum serviço em segundo plano será iniciado</string>
<string name="notifications_mode_service">Sempre On</string>
<string name="notifications_mode_periodic_desc">Verifica novas mensagens a cada 10 minutos por até 1 minuto</string>
<string name="auth_unavailable">Autenticação indisponível</string>
<string name="icon_descr_cancel_file_preview">Cancelar visualização do arquivo</string>
<string name="icon_descr_asked_to_receive">Pediu para receber a imagem</string>
<string name="icon_descr_cancel_live_message">Cancelar mensagem ao vivo</string>
<string name="back">Voltar</string>
<string name="choose_file">Selecione o arquivo</string>
<string name="add_new_contact_to_create_one_time_QR_code"><b>Adicionar novo contato</b>: para criar seu QR code único para seu contato.</string>
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>Escanear \u0020QR code</b>: para se conectar ao seu contato que mostra o código QR para você.</string>
<string name="accept_contact_button">Aceitar</string>
<string name="clear_chat_question">Limpar bate-papo\?</string>
<string name="clear_verb">Limpar</string>
<string name="clear_chat_button">Limpar bate-papo</string>
<string name="clear_chat_menu_action">Limpar</string>
<string name="icon_descr_cancel_link_preview">cancelar pré-visualização do link</string>
<string name="feature_cancelled_item">cancelado %s</string>
<string name="app_version_name">Versão do App: v%s</string>
<string name="callstatus_calling">chamando…</string>
<string name="callstatus_in_progress">chamada em andamento</string>
<string name="accept">Aceitar</string>
<string name="call_already_ended">Chamada já encerrada!</string>
<string name="icon_descr_call_progress">Chamada em andamento</string>
<string name="icon_descr_call_ended">Chamada finalizada</string>
<string name="answer_call">Atender ligação</string>
<string name="integrity_msg_bad_hash">hash de mensagem ruim</string>
<string name="integrity_msg_bad_id">ID de mensagem incorreta</string>
<string name="impossible_to_recover_passphrase"><b>Observação</b>: você NÃO poderá recuperar ou alterar a senha se a perder.</string>
<string name="cannot_receive_file">Não é possível receber o arquivo</string>
<string name="icon_descr_cancel_image_preview">Cancelar visualização da imagem</string>
<string name="icon_descr_close_button">Botão Fechar</string>
<string name="clear_verification">Limpar verificação</string>
<string name="app_version_title">Versão do App</string>
<string name="accept_automatically">Automaticamente</string>
<string name="bold">negrito</string>
<string name="callstatus_error">erro de chamada</string>
<string name="settings_audio_video_calls">Chamadas de áudio e vídeo</string>
<string name="accept_call_on_lock_screen">Aceitar</string>
<string name="call_on_lock_screen">Chamadas na tela de bloqueio:</string>
<string name="icon_descr_audio_on">Áudio ligado</string>
<string name="chat_database_imported">Banco de dados de bate-papo importado</string>
<string name="keychain_is_storing_securely">"Android Keystore é usado para armazenar passphrase com segurança - permite que o serviço de notificação funcione."</string>
<string name="keychain_allows_to_receive_ntfs">"O Android Keystore será usado para armazenar passphrase com segurança depois que você reiniciar o aplicativo ou alterar a senha - isso permitirá o recebimento de notificações."</string>
<string name="cannot_access_keychain">Não é possível acessar o Keystore para salvar a senha do banco de dados</string>
<string name="chat_archive_section">ARQUIVO DE BATE-PAPO</string>
<string name="chat_is_stopped_indication">O bate-papo está parado</string>
<string name="clear_contacts_selection_button">Limpar</string>
<string name="incognito_random_profile_description">Um perfil aleatório será enviado para o seu contato</string>
<string name="chat_preferences">Preferências de bate-papo</string>
<string name="network_session_mode_user">perfil de bate-papo</string>
<string name="accept_requests">Aceitar pedidos</string>
<string name="icon_descr_audio_off">Áudio desligado</string>
<string name="auto_accept_images">Aceitar imagens automaticamente</string>
<string name="chat_database_deleted">Banco de dados de bate-papo excluído</string>
<string name="invite_prohibited">Não é possível convidar o contato!</string>
<string name="turning_off_service_and_periodic">A otimização da bateria está ativa, desligando o serviço em segundo plano e as solicitações periódicas de novas mensagens. Você pode reativá-los através das configurações.</string>
<string name="database_initialization_error_title">Não é possível inicializar o banco de dados</string>
<string name="attach">Anexar</string>
<string name="cancel_verb">Cancelar</string>
<string name="chat_console">Console de bate-papo</string>
<string name="smp_servers_check_address">Verifique o endereço do servidor e tente novamente.</string>
<string name="network_session_mode_user_description">Uma conexão TCP separada (e credencial SOCKS) será usada <b>para cada perfil de bate-papo que você tiver no aplicativo</b>.</string>
<string name="onboarding_notifications_mode_off_desc"><b>Melhor para bateria</b>. Você receberá notificações apenas quando o aplicativo estiver em execução, o serviço em segundo plano NÃO será usado.</string>
<string name="onboarding_notifications_mode_service_desc"><b>Consome mais bateria</b>! O serviço em segundo plano está sempre em execução - as notificações serão exibidas assim que as mensagens estiverem disponíveis.</string>
<string name="settings_section_title_chats">CONVERSAS</string>
<string name="settings_section_title_icon">ÍCONE DO APP</string>
<string name="chat_database_section">BANCO DE DADOS DE BATE-PAPO</string>
<string name="chat_is_running">O bate-papo está em execução</string>
<string name="chat_is_stopped">O bate-papo está parado</string>
<string name="change_database_passphrase_question">Alterar passphrase do banco de dados\?</string>
<string name="chat_archive_header">Arquivo de bate-papo</string>
<string name="rcv_conn_event_switch_queue_phase_completed">endereço alterado para você</string>
<string name="both_you_and_your_contact_can_send_disappearing">Você e seu contato podem enviar mensagens que desaparecem.</string>
<string name="full_backup">Backup de dados do aplicativo</string>
<string name="settings_section_title_calls">CHAMADAS</string>
<string name="v4_2_auto_accept_contact_requests">Aceitar solicitações de contato automaticamente</string>
<string name="appearance_settings">Aparência</string>
<string name="notifications_mode_service_desc">O serviço em segundo plano está sempre em execução - as notificações serão exibidas assim que as mensagens estiverem disponíveis.</string>
<string name="network_session_mode_entity_description">Uma conexão TCP separada (e credencial SOCKS) será usada <b>para cada contato e membro do grupo</b>. <b>Observação</b>: se você tiver muitas conexões, o consumo de bateria e tráfego pode ser substancialmente maior e algumas conexões podem falhar.</string>
<string name="onboarding_notifications_mode_periodic_desc"><b>Bom para bateria</b>. O serviço em segundo plano verifica novas mensagens a cada 10 minutos. Você pode perder chamadas e mensagens urgentes.</string>
<string name="callstatus_ended">chamada finalizada <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
<string name="chat_with_developers">Bate-papo com os desenvolvedores</string>
<string name="create_group_link">Criar link de grupo</string>
<string name="button_create_group_link">Criar link</string>
<string name="create_secret_group_title">Criar grupo secreto</string>
<string name="theme_dark">Escuro</string>
<string name="connect_via_invitation_link">Conectar via link de convite\?</string>
<string name="connect_via_contact_link">Conectar via link de contato\?</string>
<string name="smp_server_test_create_queue">Criar fila</string>
<string name="notification_preview_mode_contact">Nome de contato</string>
<string name="notification_preview_somebody">Contato oculto:</string>
<string name="copy_verb">Copiar</string>
<string name="allow_verb">Permitir</string>
<string name="allow_to_send_disappearing">Permitir enviar mensagens que desaparecem.</string>
<string name="allow_direct_messages">Permitir o envio de mensagens diretas aos membros.</string>
<string name="connect_via_link_or_qr">Conectar via link/ QR Code</string>
<string name="clear_chat_warning">"Todas as mensagens serão excluídas - isso não pode ser desfeito! As mensagens serão excluídas APENAS para você."</string>
<string name="smp_servers_preset_add">Adicionar servidores predefinidos</string>
<string name="smp_servers_add">Adicionar servidor…</string>
<string name="create_your_profile">Crie seu perfil</string>
<string name="icon_descr_context">Ícone de contexto</string>
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">Contato e todas as mensagens serão excluídas - isso não pode ser desfeito!</string>
<string name="copied">Copiado para a área de transferência</string>
<string name="accept_connection_request__question">Aceitar solicitação de conexão\?</string>
<string name="network_settings">Configurações de rede avançadas</string>
<string name="contact_requests">Solicitações de contato</string>
<string name="create_address">Criar endereço</string>
<string name="all_your_contacts_will_remain_connected">Todos os seus contatos permanecerão conectados.</string>
<string name="callstatus_accepted">chamada aceita</string>
<string name="status_contact_has_e2e_encryption">Contato tem criptografia e2e</string>
<string name="status_contact_has_no_e2e_encryption">contato não tem criptografia e2e</string>
<string name="contact_preferences">Preferências de contato</string>
<string name="allow_to_delete_messages">Permite excluir irreversivelmente as mensagens enviadas.</string>
<string name="chat_preferences_always">sempre</string>
<string name="v4_3_improved_server_configuration_desc">Adicione servidores digitalizando QR code.</string>
<string name="allow_to_send_voice">Permitir enviar mensagens de voz.</string>
<string name="create_group">Criar grupo secreto</string>
<string name="always_use_relay">Conectar via relay</string>
<string name="users_add">Adicionar perfil</string>
<string name="connect_via_link">Conectar via link</string>
<string name="create_profile">Criar perfil</string>
<string name="database_encrypted">Banco de dados criptografado!</string>
<string name="group_member_status_creator">criador</string>
<string name="users_delete_all_chats_deleted">Todos os bate-papos e mensagens serão excluídos - isso não pode ser desfeito!</string>
<string name="accept_feature">Aceitar</string>
<string name="allow_disappearing_messages_only_if">Permitir mensagens que desaparecem apenas se o seu contato permitir.</string>
<string name="allow_irreversible_message_deletion_only_if">Permita a exclusão irreversível da mensagem somente se o seu contato permitir.</string>
<string name="allow_your_contacts_to_send_disappearing_messages">Permitir que seus contatos enviem mensagens que desaparecem.</string>
<string name="allow_voice_messages_only_if">Permitir mensagens de voz somente se o seu contato permitir.</string>
<string name="allow_your_contacts_to_send_voice_messages">Permitir que seus contatos enviem mensagens de voz.</string>
<string name="group_member_role_admin">admin</string>
<string name="all_group_members_will_remain_connected">Todos os membros do grupo permanecerão conectados.</string>
<string name="contacts_can_mark_messages_for_deletion">"Contatos podem marcar mensagens para exclusão; você será capaz de visualizá-los."</string>
<string name="connect_via_group_link">Conectar via link do grupo\?</string>
<string name="contact_already_exists">Contato já existe</string>
<string name="icon_descr_contact_checked">Contato verificado</string>
<string name="alert_title_contact_connection_pending">Contato ainda não está conectado!</string>
<string name="contribute">Contribuir</string>
<string name="create_profile_button">Criar</string>
<string name="network_enable_socks_info">"Acessar os servidores via proxy SOCKS na porta 9050\? O proxy deve ser iniciado antes de habilitar esta opção."</string>
<string name="allow_your_contacts_irreversibly_delete">Permitir que seus contatos excluam de forma irreversível as mensagens enviadas.</string>
<string name="smp_servers_add_to_another_device">Adicionar a outro dispositivo</string>
<string name="v4_2_group_links_desc">Os administradores podem criar os links para ingressar em grupos.</string>
<string name="allow_voice_messages_question">Permitir mensagens de voz\?</string>
<string name="button_delete_group">Excluir grupo</string>
<string name="info_row_connection">Conexão</string>
<string name="users_delete_question">Excluir perfil de bate-papo\?</string>
<string name="full_deletion">Excluir para todos</string>
<string name="connect_via_link_verb">Conectar</string>
<string name="server_connected">conectado</string>
<string name="server_connecting">conectando</string>
<string name="deleted_description">excluído</string>
<string name="smp_server_test_connect">Conectar</string>
<string name="delete_group_menu_action">Excluir</string>
<string name="connect_button">Conectar</string>
<string name="callstatus_connecting">conectando chamada…</string>
<string name="delete_chat_profile_question">Excluir perfil de bate-papo\?</string>
<string name="delete_files_and_media_for_all_users">Excluir arquivos de todos os perfis de bate-papo</string>
<string name="display_name_connecting">conectando…</string>
<string name="connection_error">Erro de conexão</string>
<string name="button_delete_contact">Excluir contato</string>
<string name="configure_ICE_servers">Configurar servidores ICE</string>
<string name="delete_address__question">Excluir endereço\?</string>
<string name="decentralized">Descentralizado</string>
<string name="delete_database">Excluir banco de dados</string>
<string name="set_password_to_export_desc">"O banco de dados é criptografado usando um passphrase aleatório. Por favor, altere-o antes de exportar."</string>
<string name="confirm_new_passphrase">Confirmar nova passphrase…</string>
<string name="current_passphrase">Passphrase atual…</string>
<string name="database_passphrase_is_required">Passphrase do banco de dados é necessária para abrir o chat.</string>
<string name="delete_archive">Excluir arquivo</string>
<string name="delete_chat_archive_question">Excluir arquivo de bate-papo\?</string>
<string name="rcv_group_event_changed_member_role">regra alterada de %s para %s</string>
<string name="rcv_group_event_member_connected">conectado</string>
<string name="delete_link">Excluir link</string>
<string name="delete_link_question">Excluir link\?</string>
<string name="chat_preferences_default">padrão (%s)</string>
<string name="connection_request_sent">Solicitação de conexão enviada!</string>
<string name="group_member_status_connecting">conectando</string>
<string name="contact_connection_pending">conectando…</string>
<string name="for_me_only">Excluir para mim</string>
<string name="group_connection_pending">conectando…</string>
<string name="delete_contact_question">Excluir contato\?</string>
<string name="confirm_verb">confirmar</string>
<string name="database_passphrase_and_export">Passphrase e exportação do banco de dados</string>
<string name="icon_descr_call_connecting">Conectando chamada</string>
<string name="delete_messages">Excluir mensagens</string>
<string name="database_passphrase_will_be_updated">Passphrase de criptografia do banco de dados será atualizada.</string>
<string name="database_error">Erro de banco de dados</string>
<string name="passphrase_is_different">Passphrase do banco de dados é diferente da salva no Keystore.</string>
<string name="group_member_status_complete">completo</string>
<string name="info_row_database_id">ID do banco de dados</string>
<string name="colored">colorido</string>
<string name="callstate_connected">conectado</string>
<string name="notification_contact_connected">Conectado</string>
<string name="icon_descr_server_status_connected">Conectado</string>
<string name="audio_call_no_encryption">chamada de áudio (não criptografada em e2e)</string>
<string name="change_member_role_question">Alterar a regra do grupo\?</string>
<string name="icon_descr_audio_call">chamada de áudio</string>
<string name="rcv_group_event_changed_your_role">mudou sua regra para %s</string>
<string name="v4_4_verify_connection_security_desc">Compare os códigos de segurança com seus contatos.</string>
<string name="auth_confirm_credential">Confirme sua credencial</string>
<string name="callstate_connecting">conectando…</string>
<string name="group_member_status_announced">conectando (anunciado)</string>
<string name="network_session_mode_entity">Conexão</string>
<string name="connection_error_auth">Erro de conexão (AUTH)</string>
<string name="display_name_connection_established">conexão estabelecida</string>
<string name="connection_local_display_name">conexão <xliff:g id="connection ID" example="1">%1$d</xliff:g></string>
<string name="archive_created_on_ts">Criado em <xliff:g id="archive_ts">%1$s</xliff:g></string>
<string name="maximum_supported_file_size">Atualmente, o tamanho máximo de arquivo suportado é <xliff:g id="maxFileSize">%1$s</xliff:g>.</string>
<string name="delete_verb">Excluir</string>
<string name="database_encryption_will_be_updated">Passphase de criptografia do banco de dados será atualizada e armazenada no Keystore.</string>
<string name="delete_address">Excluir endereço</string>
<string name="encrypted_with_random_passphrase">"O banco de dados é criptografado usando um passphrase aleatório, você pode alterá-la."</string>
<string name="database_passphrase">Passphrase do banco de dados</string>
<string name="database_will_be_encrypted_and_passphrase_stored">O banco de dados será criptografado e o passphrase armazenado no Keystore.</string>
<string name="database_will_be_encrypted">O banco de dados será criptografado.</string>
<string name="ttl_day">%d dia</string>
<string name="image_decoding_exception_title">Erro de decodificação</string>
<string name="delete_contact_menu_action">Excluir</string>
<string name="ttl_days">%d dias</string>
<string name="delete_files_and_media_all">Excluir todos os arquivos</string>
<string name="delete_message__question">Excluir mensagem\?</string>
<string name="delete_after">Excluir depois</string>
<string name="users_delete_profile_for">Excluir perfil de bate-papo para</string>
<string name="rcv_group_event_group_deleted">grupo excluído</string>
<string name="delete_group_question">Excluir grupo\?</string>
<string name="delete_image">Excluir imagem</string>
<string name="delete_files_and_media_question">Excluir arquivos e mídia\?</string>
<string name="group_member_status_connected">conectado</string>
<string name="group_member_status_accepted">conectando (aceito)</string>
<string name="ttl_d">%dd</string>
<string name="v4_5_transport_isolation_descr">Por perfil de bate-papo (padrão) ou por conexão (BETA).</string>
<string name="accept_contact_incognito_button">Aceitar anônimo</string>
<string name="delete_messages_after">Excluir mensagens após</string>
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 desktop: Scaneie o QR code exibido no aplicativo, via <b>Scan QR code</b></string>
<string name="delete_pending_connection__question">Excluir conexão pendente\?</string>
<string name="simplex_link_mode_description">Descrição</string>
<string name="smp_servers_delete_server">Excluir servidor</string>
<string name="group_member_status_intro_invitation">conectando (introduction invitation)</string>
<string name="connection_timeout">Tempo de conexão esgotado</string>
<string name="delete_member_message__question">Excluir mensagem do membro\?</string>
<string name="smp_server_test_delete_queue">Excluir fila</string>
<string name="settings_section_title_device">DISPOSITIVO</string>
<string name="settings_developer_tools">Ferramentas de desenvolvimento</string>
<string name="group_member_status_introduced">conectando (introduced)</string>
<string name="color_primary">Realçar</string>
<string name="error_removing_member">Erro ao remover membro</string>
<string name="error_changing_role">Erro ao alterar regra</string>
<string name="conn_level_desc_direct">direto</string>
<string name="server_error">erro</string>
<string name="failed_to_parse_chat_title">Falha ao carregar o bate-papo</string>
<string name="error_setting_network_config">Erro ao atualizar a configuração de rede</string>
<string name="error_sending_message">Erro ao enviar mensagem</string>
<string name="error_adding_members">Erro ao adicionar membro(s)</string>
<string name="smp_server_test_disconnect">Desconectar</string>
<string name="error_deleting_user">Erro ao excluir perfil do usuário</string>
<string name="ttl_s">%ds</string>
<string name="ttl_months">%d meses</string>
<string name="ttl_weeks">%d semanas</string>
<string name="encrypt_database_question">Criptografar banco de dados\?</string>
<string name="error_receiving_file">Erro ao receber arquivo</string>
<string name="error_creating_address">Erro ao criar endereço</string>
<string name="display_name__field">Nome de exibição:</string>
<string name="error_starting_chat">Erro ao iniciar o bate-papo</string>
<string name="error_deleting_database">Erro ao excluir banco de dados de bate-papo</string>
<string name="encrypt_database">Criptografar</string>
<string name="network_option_enable_tcp_keep_alive">Ativar TCP keep-alive</string>
<string name="failed_to_create_user_title">Erro ao criar perfil!</string>
<string name="error_joining_group">Erro ao ingressar no grupo</string>
<string name="failed_to_create_user_duplicate_title">Nome de exibição duplicado!</string>
<string name="error_deleting_contact">Erro ao excluir contato</string>
<string name="error_changing_address">Erro ao alterar endereço</string>
<string name="error_deleting_pending_contact_connection">Erro ao excluir conexão de contato pendente</string>
<string name="edit_verb">Editar</string>
<string name="enable_automatic_deletion_question">Ativar exclusão automática de mensagens\?</string>
<string name="ttl_sec">%d sec</string>
<string name="error_saving_smp_servers">Erro ao salvar servidores SMP</string>
<string name="error_accepting_contact_request">Erro ao aceitar solicitação de contato</string>
<string name="error_deleting_contact_request">Erro ao excluir solicitação de contato</string>
<string name="failed_to_active_user_title">Erro ao trocar de perfil!</string>
<string name="auth_disable_simplex_lock">Desativar Bloqueio SimpleX</string>
<string name="auth_enable_simplex_lock">Ativar Bloqueio SimpleX</string>
<string name="icon_descr_edited">editado</string>
<string name="icon_descr_server_status_error">Erro</string>
<string name="icon_descr_email">Email</string>
<string name="error_saving_ICE_servers">Erro ao salvar servidores ICE</string>
<string name="exit_without_saving">Sair sem salvar</string>
<string name="display_name">Nome de exibição</string>
<string name="encrypted_video_call">chamada de vídeo criptografada e2e</string>
<string name="integrity_msg_duplicate">mensagem duplicada</string>
<string name="status_e2e_encrypted">criptografado e2e</string>
<string name="export_database">Exportar banco de dados</string>
<string name="total_files_count_and_size">%d arquivo(s) com tamanho total de %s</string>
<string name="error_exporting_chat_database">Erro ao exportar banco de dados de bate-papo</string>
<string name="error_importing_database">Erro ao importar banco de dados de bate-papo</string>
<string name="error_stopping_chat">Erro ao interromper o bate-papo</string>
<string name="error_changing_message_deletion">Erro ao alterar configuração</string>
<string name="error_encrypting_database">Erro ao criptografar o banco de dados</string>
<string name="encrypted_database">Banco de dados criptografado</string>
<string name="enter_correct_passphrase">Digite o passphrase correto.</string>
<string name="enter_passphrase">Digite o passphrase…</string>
<string name="error_with_info">Erro: %s</string>
<string name="button_edit_group_profile">Editar perfil do grupo</string>
<string name="icon_descr_expand_role">Expandir seleção de regra</string>
<string name="error_saving_group_profile">Erro ao salvar o perfil do grupo</string>
<string name="direct_messages">Mensagens diretas</string>
<string name="feature_enabled">habilitado</string>
<string name="feature_enabled_for_contact">habilitado para contato</string>
<string name="feature_enabled_for_you">ativado para você</string>
<string name="ttl_m">%dm</string>
<string name="ttl_min">%d min</string>
<string name="ttl_month">%d mês</string>
<string name="ttl_week">%d semana</string>
<string name="ttl_hour">%d hora</string>
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">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.</string>
<string name="no_call_on_lock_screen">Desativar</string>
<string name="icon_descr_server_status_disconnected">Desconectado</string>
<string name="disappearing_messages_are_prohibited">Mensagens que desaparecem(temporárias) são proibidas neste grupo.</string>
<string name="error_saving_file">Erro ao salvar arquivo</string>
<string name="display_name_cannot_contain_whitespace">O nome de exibição não pode conter espaços em branco.</string>
<string name="encrypted_audio_call">chamada de áudio criptografada e2e</string>
<string name="edit_image">Editar imagem</string>
<string name="smp_servers_enter_manually">Insira o servidor manualmente</string>
<string name="error_deleting_group">Erro ao excluir grupo</string>
<string name="settings_experimental_features">Funcionalidades experimentais</string>
<string name="error_creating_link_for_group">Erro ao criar o link de grupo</string>
<string name="error_deleting_link_for_group">Erro ao excluir o link de grupo</string>
<string name="direct_messages_are_prohibited_in_chat">Mensagens diretas entre membros são proibidas neste grupo.</string>
<string name="ttl_h">%dh</string>
<string name="ttl_hours">%d horas</string>
<string name="description_via_contact_address_link_incognito">anônimo via link de endereço de contato</string>
<string name="description_via_one_time_link_incognito">anônimo via link único</string>
<string name="hide_verb">Esconder</string>
<string name="from_gallery_button">Da Galeria</string>
<string name="group_members_can_send_disappearing">Os membros do grupo podem enviar mensagens que desaparecem.</string>
<string name="icon_descr_file">Arquivo</string>
<string name="full_name__field">Nome completo:</string>
<string name="incoming_audio_call">Chamada de áudio recebida</string>
<string name="v4_4_disappearing_messages">Mensagens que desaparecem</string>
<string name="v4_3_improved_privacy_and_security_desc">"Ocultar aplicativo nos aplicativos recentes."</string>
<string name="icon_descr_image_snd_complete">Imagem enviada</string>
<string name="group_link">Link do grupo</string>
<string name="import_database">Importar banco de dados</string>
<string name="alert_message_group_invitation_expired">O convite de grupo não é mais válido, foi removido pelo remetente.</string>
<string name="icon_descr_group_inactive">Grupo inativo</string>
<string name="alert_title_no_group">Grupo não encontrado!</string>
<string name="delete_group_for_self_cannot_undo_warning">O grupo será excluído para você - isso não pode ser desfeito!</string>
<string name="info_row_group">Grupo</string>
<string name="conn_level_desc_indirect">indireto (<xliff:g id="conn_level">%1$s</xliff:g>)</string>
<string name="incognito">Anônimo</string>
<string name="timed_messages">Mensagens que desaparecem</string>
<string name="group_preferences">Preferências de grupo</string>
<string name="disappearing_prohibited_in_this_chat">Mensagens que desaparecem são proibidas nesse bate-papo.</string>
<string name="group_members_can_send_dms">Os membros do grupo podem enviar mensagens diretas.</string>
<string name="ttl_mth">%dmês</string>
<string name="simplex_link_mode_full">Link completo</string>
<string name="hide_notification">Esconder</string>
<string name="auth_device_authentication_is_disabled_turning_off">A autenticação do dispositivo está desativada. Desativando o SimpleX Lock.</string>
<string name="for_everybody">Para todos</string>
<string name="notification_preview_mode_hidden">Escondido</string>
<string name="create_one_time_link">Gerar um link de convite único.</string>
<string name="how_to_use_your_servers">Como usar seus servidores</string>
<string name="import_database_confirmation">Importar</string>
<string name="import_database_question">Importar banco de dados de bate-papo\?</string>
<string name="group_display_name_field">Nome de exibição do grupo:</string>
<string name="group_full_name_field">Nome completo do grupo:</string>
<string name="v4_2_group_links">Links de grupo</string>
<string name="v4_3_improved_privacy_and_security">Privacidade e segurança aprimoradas</string>
<string name="failed_to_parse_chats_title">Falha ao carregar bate-papos</string>
<string name="file_with_path">Arquivo: %s</string>
<string name="file_saved">Arquivo salvo</string>
<string name="group_members_can_send_voice">Os membros do grupo podem enviar mensagens de voz.</string>
<string name="delete_group_for_all_members_cannot_undo_warning">O grupo será excluído para todos os membros - isso não pode ser desfeito!</string>
<string name="settings_section_title_help">AJUDA</string>
<string name="notification_display_mode_hidden_desc">Ocultar contato e mensagem</string>
<string name="how_to_use_simplex_chat">Como usar</string>
<string name="how_to_use_markdown">Como usar markdown</string>
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel">Se você não puder se encontrar pessoalmente, <b>mostre o QR code na videochamada</b> ou compartilhe o link.</string>
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">Se você não puder encontrar pessoalmente, você pode <b>escanear o QR code na videochamada</b> ou seu contato pode compartilhar um link de convite.</string>
<string name="network_disable_socks_info">Se você confirmar, os servidores de mensagens poderão ver seu endereço IP e seu provedor - e quais servidores você está se conectando.</string>
<string name="image_descr">Imagem</string>
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">Se você recebeu o link de convite <xliff:g id="appName">SimpleX Chat</xliff:g>, você pode abri-lo em seu navegador:</string>
<string name="image_saved">Imagem salva na galeria</string>
<string name="group_unsupported_incognito_main_profile_sent">O modo de navegação anônima não é suportado aqui - seu perfil principal será enviado aos membros do grupo</string>
<string name="description_via_group_link_incognito">anônimo via link do grupo</string>
<string name="incoming_video_call">Chamada de vídeo recebida</string>
<string name="turn_off_battery_optimization">Para usá-lo, por favor <b>desative a otimização da bateria</b> para <xliff:g id="appName">SimpleX</xliff:g> na próxima caixa de diálogo. Caso contrário, as notificações serão desativadas.</string>
<string name="share_one_time_link">Gerar um link de convite único</string>
<string name="file_not_found">Arquivo não encontrado</string>
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">Se você optar por rejeitar o remetente NÃO será notificado.</string>
<string name="incorrect_code">Código de segurança incorreto!</string>
<string name="install_simplex_chat_for_terminal">Instale o <xliff:g id="appNameFull">SimpleX Chat</xliff:g> para o terminal</string>
<string name="full_name_optional__prompt">Nome Completo (opcional)</string>
<string name="how_it_works">Como funciona</string>
<string name="immune_to_spam_and_abuse">Imune a spam e abuso</string>
<string name="icon_descr_flip_camera">Vire a câmera</string>
<string name="icon_descr_hang_up">Desligar</string>
<string name="settings_section_title_incognito">Modo anônimo</string>
<string name="initial_member_role">Regra inicial</string>
<string name="snd_group_event_group_profile_updated">perfil do grupo atualizado</string>
<string name="group_member_status_group_deleted">Grupo excluído</string>
<string name="incognito_info_protects">O modo de navegação anônima protege a privacidade do nome e da imagem do seu perfil principal — para cada novo contato, um novo perfil aleatório é criado.</string>
<string name="group_members_can_delete">Os membros do grupo podem excluir mensagens enviadas de forma irreversível.</string>
<string name="ttl_w">%dsemana</string>
<string name="v4_3_improved_server_configuration">Configuração de servidor aprimorada</string>
<string name="v4_4_french_interface">Interface francesa</string>
<string name="callstate_ended">terminou</string>
<string name="allow_accepting_calls_from_lock_screen">Ative as chamadas pela tela de bloqueio nas Configurações.</string>
<string name="files_and_media_section">Arquivos &amp; mídia</string>
<string name="error_updating_link_for_group">Erro ao atualizar o link do grupo</string>
<string name="group_invitation_expired">O convite do grupo expirou</string>
<string name="file_will_be_received_when_contact_is_online">O arquivo será recebido quando seu contato estiver online, aguarde ou verifique mais tarde!</string>
<string name="group_profile_is_stored_on_members_devices">O perfil do grupo é armazenado nos dispositivos dos membros, não nos servidores.</string>
<string name="icon_descr_help">ajuda</string>
<string name="how_simplex_works">Como <xliff:g id="appName">SimpleX</xliff:g> funciona</string>
<string name="enter_one_ICE_server_per_line">Servidores ICE (um por linha)</string>
<string name="ignore">Ignorar</string>
<string name="image_will_be_received_when_contact_is_online">A imagem será recebida quando seu contato estiver online, aguarde ou verifique mais tarde!</string>
</resources>
@@ -514,13 +514,15 @@
<!-- Call settings -->
<string name="settings_audio_video_calls">Аудио- и видеозвонки</string>
<string name="your_calls">Ваши звонки</string>
<string name="connect_calls_via_relay">Соединяться через сервер (relay)</string>
<string name="always_use_relay">Всегда соединяться через relay</string>
<string name="call_on_lock_screen">Звонки на экране блокировки:</string>
<string name="accept_call_on_lock_screen">Принимать</string>
<string name="show_call_on_lock_screen">Показывать</string>
<string name="no_call_on_lock_screen">Выключить</string>
<string name="your_ice_servers">Ваши ICE серверы</string>
<string name="webrtc_ice_servers">WebRTC ICE серверы</string>
<string name="relay_server_protects_ip">Relay сервер защищает ваш IP адрес, но может отслеживать продолжительность звонка.</string>
<string name="relay_server_if_necessary">Relay сервер используется только при необходимости. Другая сторона может видеть ваш IP адрес.</string>
<!-- Call Lock Screen -->
<string name="open_simplex_chat_to_accept_call">Откройте <xliff:g id="appNameFull">SimpleX Chat</xliff:g>\nчтобы принять звонок</string>
<string name="allow_accepting_calls_from_lock_screen">Вы можете разрешить принимать звонки на экране блокировки через Настройки.</string>
@@ -1038,4 +1040,16 @@
<string name="v4_5_reduced_battery_usage_descr">Дополнительные улучшения скоро!</string>
<string name="v4_5_reduced_battery_usage">Уменьшенное потребление батареи</string>
<string name="v4_5_transport_isolation">Отдельные транспортные сессии</string>
<string name="moderated_description">удалено</string>
<string name="moderated_item_description">удалено %s</string>
<string name="delete_member_message__question">Удалить сообщение участника\?</string>
<string name="moderate_verb">Модерировать</string>
<string name="moderate_message_will_be_deleted_warning">Сообщение будет удалено для всех членов группы.</string>
<string name="moderate_message_will_be_marked_warning">Сообщение будет помечено как удаленное для всех членов группы.</string>
<string name="observer_cant_send_message_desc">Пожалуйста, свяжитесь с админом группы.</string>
<string name="observer_cant_send_message_title">Вы не можете отправлять сообщения!</string>
<string name="you_are_observer">только чтение сообщений</string>
<string name="group_member_role_observer">читатель</string>
<string name="initial_member_role">Роль при вступлении</string>
<string name="error_updating_link_for_group">Ошибка обновления ссылки группы</string>
</resources>
@@ -9,13 +9,13 @@
<string name="accept_contact_button">接受</string>
<string name="accept_call_on_lock_screen">接受</string>
<string name="accept_feature">接受</string>
<string name="chat_item_ttl_month">1月</string>
<string name="chat_item_ttl_month">1</string>
<string name="chat_item_ttl_week">1周</string>
<string name="color_primary">强化</string>
<string name="color_primary">色调</string>
<string name="callstatus_accepted">已接受通话</string>
<string name="accept">接受</string>
<string name="network_enable_socks_info">通过 SOCKS 代理访问服务器在端口9050?允许该选项前必须开始代理。</string>
<string name="smp_servers_add">添加服务器…</string>
<string name="smp_servers_add">添加服务器…</string>
<string name="smp_servers_add_to_another_device">添加另一设备</string>
<string name="group_member_role_admin">管理员</string>
<string name="v4_3_improved_server_configuration_desc">扫描二维码来添加服务器。</string>
@@ -38,7 +38,7 @@
<string name="messages_section_title">消息</string>
<string name="delete_messages_after">在此后删除消息</string>
<string name="settings_section_title_messages">消息</string>
<string name="users_add">添加资料</string>
<string name="users_add">添加个人资料</string>
<string name="users_delete_all_chats_deleted">所有聊天记录和消息将被删除——这一行为无法撤销!</string>
<string name="clear_chat_warning">所有聊天记录和消息将被删除——这一行为无法撤销!只有您的消息会被删除。</string>
<string name="allow_to_send_voice">允许发送语音消息。</string>
@@ -67,7 +67,7 @@
<string name="connect_via_contact_link">通过联系人链接连接?</string>
<string name="connect_via_group_link">通过群组链接连接?</string>
<string name="connect_via_link_or_qr">通过群组链接/二维码连接</string>
<string name="connect_calls_via_relay">通过继电器连接</string>
<string name="always_use_relay">通过继连接</string>
<string name="allow_your_contacts_irreversibly_delete">允许您的联系人不可撤回地删除已发送消息。</string>
<string name="chat_preferences_contact_allows">联系人允许</string>
<string name="allow_voice_messages_only_if">仅有您的联系人许可后才允许语音消息。</string>
@@ -99,7 +99,7 @@
<string name="app_version_title">应用程序版本</string>
<string name="full_backup">应用程序数据备份</string>
<string name="settings_section_title_icon">应用程序图标</string>
<string name="incognito_random_profile_from_contact_description">一个随机资料将被发送到收到链接的联系人那里</string>
<string name="incognito_random_profile_from_contact_description">随机配置文件将发送给您从中收到链接的联系人</string>
<string name="app_version_name">应用程序版本:v%s</string>
<string name="notifications_mode_off_desc">仅在运行时应用程序可以接受通知,不会启动后台服务</string>
<string name="incognito_random_profile_description">一个随机资料将发送给您的联系人</string>
@@ -138,14 +138,14 @@
<string name="invite_prohibited">无法邀请联系人!</string>
<string name="cancel_verb">取消</string>
<string name="callstatus_ended">通话结束 <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
<string name="change_verb"></string>
<string name="change_verb"></string>
<string name="icon_descr_call_ended">通话结束</string>
<string name="change_database_passphrase_question">更改数据库密码?</string>
<string name="callstatus_error">通话错误</string>
<string name="rcv_conn_event_switch_queue_phase_completed">为您更改地址</string>
<string name="callstatus_in_progress">通话中</string>
<string name="icon_descr_call_progress">通话进行中</string>
<string name="callstatus_calling">呼叫中…</string>
<string name="callstatus_calling">呼叫中…</string>
<string name="icon_descr_cancel_live_message">取消实时消息</string>
<string name="settings_section_title_calls">通话</string>
<string name="call_on_lock_screen">在锁定屏幕上通话:</string>
@@ -160,9 +160,9 @@
<string name="change_role">改变角色</string>
<string name="change_member_role_question">更改群组角色?</string>
<string name="icon_descr_cancel_link_preview">取消链接预览</string>
<string name="snd_conn_event_switch_queue_phase_changing_for_member">为 %s 更改地址…</string>
<string name="rcv_conn_event_switch_queue_phase_changing">更改地址…</string>
<string name="snd_conn_event_switch_queue_phase_changing">更改地址…</string>
<string name="snd_conn_event_switch_queue_phase_changing_for_member">为 %s 更改地址中…</string>
<string name="rcv_conn_event_switch_queue_phase_changing">更改地址中…</string>
<string name="snd_conn_event_switch_queue_phase_changing">更改地址…</string>
<string name="create_your_profile">创建您的资料</string>
<string name="chat_database_deleted">聊天数据库已删除</string>
<string name="chat_database_imported">聊天数据库已导入</string>
@@ -185,20 +185,20 @@
<string name="incognito">隐身聊天</string>
<string name="joining_group">加入群组</string>
<string name="join_group_incognito_button">加入隐身聊天</string>
<string name="settings_section_title_incognito">隐身聊天模式</string>
<string name="group_unsupported_incognito_main_profile_sent">这里不支持隐身聊天模式——您的主要资料将发送给群组成员</string>
<string name="settings_section_title_incognito">隐身模式</string>
<string name="group_unsupported_incognito_main_profile_sent">此处不支持隐身模式——您的主要个人资料将发送给群组成员</string>
<string name="tap_to_start_new_chat">点击开始一个新聊天</string>
<string name="incognito_random_profile">您的随机资料</string>
<string name="description_via_contact_address_link_incognito">通过联系地址链接隐身聊天</string>
<string name="description_via_group_link_incognito">通过群组链接隐身聊天</string>
<string name="description_via_contact_address_link_incognito">通过联系地址链接隐身</string>
<string name="description_via_group_link_incognito">通过群组链接隐身</string>
<string name="description_you_shared_one_time_link_incognito">您分享了一次性链接隐身聊天</string>
<string name="group_invitation_tap_to_join_incognito">点击以加入隐身聊天</string>
<string name="group_main_profile_sent">您的聊天资料将被发送给群组成员</string>
<string name="invite_prohibited_description">您正在尝试邀请与您共享隐身聊天资料的联系人加入您使用主要资料的群组</string>
<string name="incognito_info_protects">隐身聊天模式可以保护的主要资料名和头像的隐私——每个新联系人创建一个新的随机资料。</string>
<string name="alert_title_cant_invite_contacts_descr">您正在为该群组使用隐身聊天资料——为防止共享您的主要资料,邀请联系人是不允许的</string>
<string name="invite_prohibited_description">您正在尝试邀请与您共享隐身个人资料的联系人加入您使用主要个人资料的群组</string>
<string name="incognito_info_protects">隐身模式可以保护的主要个人资料名称和图像的隐私——对于每个新联系人,都会创建一个新的随机个人资料。</string>
<string name="alert_title_cant_invite_contacts_descr">您正在为该群组使用隐身个人资料——为防止共享您的主要个人资料,不允许邀请联系人</string>
<string name="your_profile_will_be_sent">您的聊天资料将被发送给您的联系人</string>
<string name="description_via_one_time_link_incognito">通过一次性链接隐身聊天</string>
<string name="description_via_one_time_link_incognito">通过一次性链接隐身</string>
<string name="only_group_owners_can_enable_voice">只有群主可以启用语音信息。</string>
<string name="your_privacy">您的隐私设置</string>
<string name="privacy_and_security">隐私和安全</string>
@@ -218,42 +218,767 @@
<string name="passphrase_is_different">数据库密码不同于保存在密钥库中的密码。</string>
<string name="database_encryption_will_be_updated">数据库加密密码将被更新并存储在密钥库中。</string>
<string name="database_will_be_encrypted_and_passphrase_stored">数据库将被加密,密码存储在密钥库中。</string>
<string name="restore_passphrase_not_found_desc">在密匙库中没有找到密码,请手动输入。如果使用备份工具恢复了应用程序的数据,可能会发生这种情况。如果不是这种情况,请联系开发者。</string>
<string name="restore_passphrase_not_found_desc">在密匙库中没有找到密码,请手动输入。如果使用备份工具恢复了应用程序的数据,可能会发生这种情况。如果不是这种情况,请联系开发者。</string>
<string name="remove_passphrase_from_keychain">从密钥库中删除密码?</string>
<string name="save_passphrase_in_keychain">在密钥库中保存密码</string>
<string name="simplex_service_notification_title"><xliff:g id="appNameFull">SimpleX Chat</xliff:g> 服务</string>
<string name="settings_notifications_mode_title">通知服务</string>
<string name="confirm_new_passphrase">确认新口令</string>
<string name="confirm_new_passphrase">确认新密码…</string>
<string name="group_member_status_complete">完整的</string>
<string name="group_member_status_connected">连接</string>
<string name="chat_preferences">聊天偏好</string>
<string name="group_member_status_connected">连接</string>
<string name="chat_preferences">聊天偏好设置</string>
<string name="settings_section_title_chats">聊天</string>
<string name="clear_verb"></string>
<string name="clear_chat_menu_action"></string>
<string name="clear_chat_button">清除聊天记录</string>
<string name="clear_verb"></string>
<string name="clear_chat_menu_action"></string>
<string name="clear_chat_button">清除聊天</string>
<string name="clear_chat_question">清除聊天记录?</string>
<string name="chat_with_developers">与开发者聊天</string>
<string name="clear_contacts_selection_button">清除</string>
<string name="colored">有色</string>
<string name="callstate_connected">连接</string>
<string name="callstate_connected">连接</string>
<string name="connect_button">连接</string>
<string name="connect_via_link_verb">连接</string>
<string name="choose_file">选择文件</string>
<string name="network_session_mode_user">聊天资料</string>
<string name="v4_5_transport_isolation_descr">按聊天资料(默认)或按连接(BETA)。</string>
<string name="smp_servers_check_address">检查服务器地址并再试一次。</string>
<string name="clear_verification">晰的验证</string>
<string name="icon_descr_close_button">关闭键</string>
<string name="configure_ICE_servers">配置ICE服务器</string>
<string name="clear_verification">验证</string>
<string name="icon_descr_close_button">关闭</string>
<string name="configure_ICE_servers">配置 ICE 服务器</string>
<string name="confirm_verb">确认</string>
<string name="auth_confirm_credential">确认您的证书</string>
<string name="server_connected">连接</string>
<string name="icon_descr_server_status_connected">连接</string>
<string name="server_connected">连接</string>
<string name="icon_descr_server_status_connected">连接</string>
<string name="smp_server_test_connect">连接</string>
<string name="notification_contact_connected">连接</string>
<string name="server_connecting">连接</string>
<string name="group_member_status_connecting">连接</string>
<string name="notification_contact_connected">连接</string>
<string name="server_connecting">连接</string>
<string name="group_member_status_connecting">连接</string>
<string name="notifications_mode_periodic_desc">每10分钟检查一次新消息,最长1分钟</string>
<string name="rcv_group_event_member_connected">连接</string>
<string name="v4_4_verify_connection_security_desc">的联系人比较安全码</string>
<string name="rcv_group_event_member_connected">连接</string>
<string name="v4_4_verify_connection_security_desc">的联系人比较安全码</string>
<string name="incoming_audio_call">语音通话来电</string>
<string name="error_changing_message_deletion">更改设置错误</string>
<string name="alert_message_group_invitation_expired">群组邀请不再有效,已被发件人删除。</string>
<string name="failed_to_create_user_duplicate_title">重复的显示名!</string>
<string name="failed_to_create_user_title">创建资料错误!</string>
<string name="error_accepting_contact_request">接受联系人请求错误</string>
<string name="error_deleting_group">删除群组错误</string>
<string name="error_deleting_pending_contact_connection">删除待定的联系人连接错误</string>
<string name="error_receiving_file">接收文件错误</string>
<string name="failed_to_active_user_title">切换资料错误!</string>
<string name="notification_preview_mode_hidden">已隐藏</string>
<string name="edit_verb">编辑</string>
<string name="notification_display_mode_hidden_desc">隐藏联系人和消息</string>
<string name="icon_descr_edited">已编辑</string>
<string name="for_everybody">对于每个人</string>
<string name="image_decoding_exception_title">解码错误</string>
<string name="image_saved">图片保存到相册</string>
<string name="image_will_be_received_when_contact_is_online">图片将在您的联系人在线时收到,请稍等或稍后查看!</string>
<string name="error_saving_file">保存文件错误</string>
<string name="icon_descr_file">文件</string>
<string name="file_not_found">未找到文件</string>
<string name="file_saved">文件已保存</string>
<string name="icon_descr_server_status_disconnected">已断开连接</string>
<string name="icon_descr_server_status_error">错误</string>
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 桌面:通过 <b>扫描二维码</b> 从应用程序扫描显示的二维码。</string>
<string name="delete_pending_connection__question">删除待定连接?</string>
<string name="how_to_use_markdown">如何使用 markdown</string>
<string name="create_profile_button">创建</string>
<string name="display_name_cannot_contain_whitespace">显示名不能包含空格。</string>
<string name="decentralized">分散式</string>
<string name="immune_to_spam_and_abuse">不受垃圾和骚扰消息影响</string>
<string name="encrypted_video_call">端到端加密语音通话</string>
<string name="ignore">忽视</string>
<string name="incoming_video_call">视频通话来电</string>
<string name="no_call_on_lock_screen">禁用</string>
<string name="status_e2e_encrypted">端到端加密</string>
<string name="status_contact_has_e2e_encryption">联系人具有端到端加密</string>
<string name="allow_accepting_calls_from_lock_screen">通过设置启用在锁定屏幕上通话。</string>
<string name="icon_descr_call_connecting">连接通话中</string>
<string name="status_contact_has_no_e2e_encryption">联系人没有端到端加密</string>
<string name="icon_descr_hang_up">挂断电话</string>
<string name="integrity_msg_duplicate">重复的消息</string>
<string name="settings_section_title_help">帮助</string>
<string name="settings_experimental_features">实验性功能</string>
<string name="settings_section_title_device">设备</string>
<string name="settings_developer_tools">开发者工具</string>
<string name="export_database">导出数据库</string>
<string name="database_passphrase">数据库密码</string>
<string name="import_database">导入数据库</string>
<string name="files_and_media_section">文件和媒体</string>
<string name="current_passphrase">现有密码……</string>
<string name="encrypt_database">加密</string>
<string name="encrypted_database">加密的数据库</string>
<string name="enter_correct_passphrase">输入正确密码。</string>
<string name="icon_descr_group_inactive">不活跃群组</string>
<string name="group_member_status_creator">创建者</string>
<string name="group_member_status_accepted">连接中(已接受)</string>
<string name="group_member_status_announced">连接中(已宣布)</string>
<string name="icon_descr_expand_role">扩展角色选择</string>
<string name="group_link">群组链接</string>
<string name="error_deleting_link_for_group">删除群组链接错误</string>
<string name="info_row_database_id">数据库 ID</string>
<string name="error_removing_member">删除成员错误</string>
<string name="error_changing_role">更改角色错误</string>
<string name="info_row_group">群组</string>
<string name="timed_messages">限时消息</string>
<string name="ttl_day">%d 天</string>
<string name="group_connection_pending">连接中……</string>
<string name="callstatus_connecting">连接通话中……</string>
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">联系人和所有的消息都将被删除——这是不可逆回的!</string>
<string name="notification_preview_mode_contact">联系人姓名</string>
<string name="group_member_status_intro_invitation">连接(介绍邀请)</string>
<string name="contact_requests">联系人请求</string>
<string name="callstate_connecting">连接中……</string>
<string name="contacts_can_mark_messages_for_deletion">联系人可以将信息标记为删除;您将可以查看这些信息。</string>
<string name="contribute">贡献</string>
<string name="icon_descr_contact_checked">已检查联系人</string>
<string name="notification_preview_somebody">联系人已隐藏:</string>
<string name="alert_title_contact_connection_pending">联系人尚未连接!</string>
<string name="icon_descr_context">上下文图标</string>
<string name="copied">复制到剪贴板</string>
<string name="contact_connection_pending">连接中……</string>
<string name="create_group_link">创建群组链接</string>
<string name="create_group">创建私密群组</string>
<string name="button_create_group_link">创建链接</string>
<string name="share_one_time_link">创建一次性邀请链接</string>
<string name="smp_server_test_create_queue">创建队列</string>
<string name="create_secret_group_title">创建私密群组</string>
<string name="v4_5_multiple_chat_profiles_descr">不同的名字、头像和传输隔离。</string>
<string name="v4_4_french_interface">法语界面</string>
<string name="create_one_time_link">创建一次性邀请链接</string>
<string name="how_to_use_simplex_chat">如何使用它</string>
<string name="server_error">错误</string>
<string name="display_name_connecting">连接中……</string>
<string name="failed_to_parse_chat_title">加载聊天失败</string>
<string name="failed_to_parse_chats_title">无法加载聊天</string>
<string name="error_adding_members">添加成员错误</string>
<string name="hide_notification">隐藏</string>
<string name="copy_verb">复制</string>
<string name="hide_verb">隐藏</string>
<string name="how_to">如何</string>
<string name="icon_descr_help">帮助</string>
<string name="ttl_d">%dd</string>
<string name="database_will_be_encrypted">数据库将被加密。</string>
<string name="encrypted_audio_call">端到端加密语音通话</string>
<string name="enter_one_ICE_server_per_line">ICE 服务器(每行一个)</string>
<string name="create_address">创建地址</string>
<string name="core_build_timestamp">核心构建于:%s</string>
<string name="core_version">核心版本: v%s</string>
<string name="display_name__field">显示名:</string>
<string name="full_name__field">全名:</string>
<string name="display_name">显示名。</string>
<string name="full_name_optional__prompt">全名(可选)</string>
<string name="callstate_ended">已结束</string>
<string name="group_member_status_group_deleted">群组已删除</string>
<string name="delete_group_for_all_members_cannot_undo_warning">将为所有成员删除群组——此操作无法撤消!</string>
<string name="conn_level_desc_direct">直接</string>
<string name="direct_messages">直接信息</string>
<string name="feature_enabled">已启用</string>
<string name="group_members_can_send_voice">群组成员可以发送语音消息。</string>
<string name="v4_2_group_links">群组链接</string>
<string name="error_starting_chat">启动聊天错误</string>
<string name="database_encrypted">数据库已加密!</string>
<string name="encrypt_database_question">加密数据库?</string>
<string name="encrypted_with_random_passphrase">数据库使用随机密码进行加密,您可以更改它。</string>
<string name="database_passphrase_is_required">打开聊天需要数据库密码。</string>
<string name="settings_section_title_develop">开发</string>
<string name="error_stopping_chat">停止聊天错误</string>
<string name="import_database_question">导入聊天数据库?</string>
<string name="error_deleting_database">删除聊天数据库错误</string>
<string name="import_database_confirmation">导入</string>
<string name="enter_passphrase">输入密码……</string>
<string name="database_passphrase_will_be_updated">数据库加密密码将被更新。</string>
<string name="database_error">数据库错误</string>
<string name="snd_group_event_group_profile_updated">群组资料已更新</string>
<string name="group_full_name_field">群组全名:</string>
<string name="theme_dark">深色</string>
<string name="feature_enabled_for_contact">已为联系人启用</string>
<string name="feature_enabled_for_you">为您启用</string>
<string name="group_members_can_send_disappearing">群组成员可以发送限时消息。</string>
<string name="create_profile">创建个人资料</string>
<string name="how_it_works">工作原理</string>
<string name="alert_title_no_group">未找到群组!</string>
<string name="error_creating_link_for_group">创建群组链接错误</string>
<string name="group_member_status_introduced">连接中(已介绍)</string>
<string name="set_password_to_export_desc">数据库使用随机密码进行加密。请在导出前更改它。</string>
<string name="database_passphrase_and_export">数据库密码和导出</string>
<string name="smp_server_test_delete_queue">删除队列</string>
<string name="smp_servers_delete_server">删除服务器</string>
<string name="simplex_link_mode_description">描述</string>
<string name="disappearing_prohibited_in_this_chat">此聊天中禁止显示限时消息。</string>
<string name="smp_server_test_disconnect">断开连接</string>
<string name="error_changing_address">更改地址错误</string>
<string name="auth_enable_simplex_lock">启用 SimpleX 锁定</string>
<string name="error_creating_address">创建地址错误</string>
<string name="network_option_enable_tcp_keep_alive">启用 TCP 保持活跃状态</string>
<string name="smp_servers_enter_manually">手动输入服务器</string>
<string name="error_deleting_contact">删除联系人错误</string>
<string name="error_setting_network_config">更新网络配置错误</string>
<string name="error_deleting_contact_request">删除联系人请求错误</string>
<string name="error_saving_group_profile">保存群组资料错误</string>
<string name="error_saving_smp_servers">保存 SMP 服务器错误</string>
<string name="error_saving_ICE_servers">保存 ICE 服务器错误</string>
<string name="error_sending_message">发送消息错误</string>
<string name="simplex_link_mode_full">完整链接</string>
<string name="group_display_name_field">群组显示名称:</string>
<string name="group_invitation_expired">群组邀请已过期</string>
<string name="delete_group_for_self_cannot_undo_warning">将为您删除群组——此操作无法撤消!</string>
<string name="group_profile_is_stored_on_members_devices">群组资料存储在成员的设备上,而不是服务器上。</string>
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">如果您选择拒绝发件人,将不会收到通知。</string>
<string name="how_to_use_your_servers">如何使用您的服务器</string>
<string name="network_disable_socks_info">如果您确认,消息服务器将能够看到您的 IP 地址和您的提供商——以及您正在连接的服务器。</string>
<string name="image_descr">图片</string>
<string name="icon_descr_image_snd_complete">图片已发送</string>
<string name="auth_device_authentication_is_disabled_turning_off">设备认证被禁用。关闭 SimpleX 锁定。</string>
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">没有启用设备认证。一旦启用设备认证,您可以通过设置打开 SimpleX 锁定。</string>
<string name="auth_disable_simplex_lock">禁用 SimpleX 锁定</string>
<string name="maximum_supported_file_size">目前支持的最大文件尺寸是 <xliff:g id="maxFileSize">%1$s</xliff:g></string>
<string name="file_will_be_received_when_contact_is_online">文件将在您的联系人在线时收到,请稍等或稍后再查看!</string>
<string name="from_gallery_button">从图库</string>
<string name="exit_without_saving">退出而不保存</string>
<string name="icon_descr_flip_camera">翻转相机</string>
<string name="enable_automatic_deletion_question">启用自动删除消息?</string>
<string name="section_title_for_console">用于控制台</string>
<string name="direct_messages_are_prohibited_in_chat">此群中禁止成员之间私聊。</string>
<string name="disappearing_messages_are_prohibited">该组禁止限时消息。</string>
<string name="group_members_can_delete">群组成员可以不可撤回地删除已发送的消息。</string>
<string name="group_members_can_send_dms">群组成员可以私信。</string>
<string name="v4_4_disappearing_messages">限时消息</string>
<string name="v4_3_improved_privacy_and_security_desc">在最近的应用程序中隐藏应用程序屏幕。</string>
<string name="leave_group_button">离开</string>
<string name="alert_title_group_invitation_expired">邀请已过期!</string>
<string name="live_message">实时消息!</string>
<string name="image_descr_link_preview">链接预览图片</string>
<string name="invalid_QR_code">无效的二维码</string>
<string name="onboarding_notifications_mode_subtitle">以后可以通过设置进行更改。</string>
<string name="alert_text_skipped_messages_it_can_happen_when">它可以在以下情况下发生:
\n1. 如果消息在30天内没有被收到,就会在服务器上过期。
\n2. 您用于接收来自此联系人的消息的服务器已更新并重新启动。
\n3. 连接受损。
\n请通过设置与开发者联系,以接收有关服务器的更新。
\n我们将添加服务器冗余以防止丢失消息。</string>
<string name="leave_group_question">离开群组?</string>
<string name="rcv_group_event_invited_via_your_group_link">通过您的群组链接邀请</string>
<string name="info_row_local_name">本地名称</string>
<string name="invalid_message_format">无效的消息格式</string>
<string name="invalid_data">无效数据</string>
<string name="live">实时</string>
<string name="display_name_invited_to_connect">已邀请连接</string>
<string name="invalid_connection_link">无效的连接链接</string>
<string name="italic">斜体</string>
<string name="group_member_status_invited">已邀请</string>
<string name="invite_to_group_button">邀请加入群组</string>
<string name="join_group_button">加入</string>
<string name="join_group_question">加入群组?</string>
<string name="icon_descr_add_members">邀请成员</string>
<string name="group_member_status_left">已离开</string>
<string name="theme_light">浅色</string>
<string name="message_deletion_prohibited">此聊天中禁止不可撤回消息移除。</string>
<string name="v4_5_italian_interface">意大利语界面</string>
<string name="incorrect_code">安全码不正确!</string>
<string name="service_notifications_disabled">即时通知被禁用!</string>
<string name="invalid_chat">无效聊天</string>
<string name="smp_servers_invalid_address">无效的服务器地址!</string>
<string name="button_add_members">邀请成员</string>
<string name="button_leave_group">离开群组</string>
<string name="users_delete_data_only">仅本地配置文件数据</string>
<string name="icon_descr_instant_notifications">即时通知</string>
<string name="service_notifications">即时通知!</string>
<string name="auth_log_in_using_credential">使用您的凭据登录</string>
<string name="large_file">大文件!</string>
<string name="invalid_contact_link">链接无效!</string>
<string name="rcv_group_event_member_left">已离开</string>
<string name="message_deletion_prohibited_in_chat">此群组中禁止不可撤回消息移除。</string>
<string name="v4_3_irreversible_message_deletion">不可撤回消息移除</string>
<string name="v4_4_live_messages">实时消息</string>
<string name="notification_preview_mode_message">消息正文</string>
<string name="callstate_waiting_for_confirmation">等待确认中……</string>
<string name="onboarding_notifications_mode_service">即时</string>
<string name="only_your_contact_can_send_disappearing">只有您的联系人才可以发送限时消息。</string>
<string name="notification_preview_mode_message_desc">显示联系人和消息</string>
<string name="notification_preview_mode_contact_desc">只显示联系人</string>
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">为保护您的信息,请打开 SimpleX 锁定。
\n在启用此功能之前,系统将提示您完成身份验证。</string>
<string name="your_chats">您的聊天</string>
<string name="share_file">分享文件……</string>
<string name="share_image">分享图片……</string>
<string name="share_message">分享消息……</string>
<string name="text_field_set_contact_placeholder">设置联系人姓名……</string>
<string name="callstate_received_answer">已收到回复……</string>
<string name="callstate_received_confirmation">已受到确认……</string>
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages">只有客户端设备存储用户配置文件、联系人、群组和使用 <b>双层端到端加密 </b> 发送的消息。</string>
<string name="video_call_no_encryption">视频通话(非端到端加密)</string>
<string name="onboarding_notifications_mode_periodic">定期</string>
<string name="onboarding_notifications_mode_title">私人通知</string>
<string name="onboarding_notifications_mode_off">应用程序运行时</string>
<string name="status_no_e2e_encryption">无端到端加密</string>
<string name="show_call_on_lock_screen">显示</string>
<string name="you_must_use_the_most_recent_version_of_database">您只能在一台设备上使用最新版本的聊天数据库,否则您可能会停止接收来自某些联系人的消息。</string>
<string name="new_passphrase">新密码……</string>
<string name="member_role_will_be_changed_with_notification">该角色将更改为“%s”。群组中每个人都会收到通知。</string>
<string name="your_contact_address">您的联系人地址</string>
<string name="chat_lock">SimpleX 锁定</string>
<string name="periodic_notifications">定期通知</string>
<string name="notifications_mode_periodic">定期启动</string>
<string name="notification_preview_new_message">新消息</string>
<string name="auth_unlock">解锁</string>
<string name="voice_message_send_text">语音消息……</string>
<string name="network_use_onion_hosts_no"></string>
<string name="callstate_starting">启动中……</string>
<string name="prohibit_sending_disappearing_messages">禁止发送限时消息。</string>
<string name="only_you_can_send_disappearing">只有您可以发送限时消息。</string>
<string name="only_your_contact_can_delete">只有您的联系人才能不可撤回地删除消息(您可以将它们标记为删除)。</string>
<string name="prohibit_sending_disappearing">禁止发送限时消息。</string>
<string name="notifications_will_be_hidden">通知只会在应用程序停止之前发送!</string>
<string name="chat_preferences_no"></string>
<string name="prohibit_message_deletion">禁止不可撤回消息删除。</string>
<string name="notification_new_contact_request">新联系人请求</string>
<string name="callstate_waiting_for_answer">等待答复中……</string>
<string name="la_notice_title_simplex_lock">SimpleX 锁定</string>
<string name="auth_simplex_lock_turned_on">已开启 SimpleX 锁定</string>
<string name="notifications">通知</string>
<string name="simplex_service_notification_text">正在接收消息……</string>
<string name="enter_passphrase_notification_desc">要接收通知,请输入数据库密码</string>
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery">为了保护您的隐私,该应用程序没有推送通知,而是具有 <b><xliff:g id="appName">SimpleX</xliff:g> 后台服务 </b>——它每天使用百分之几的电池。</string>
<string name="your_settings">您的设置</string>
<string name="turn_off_battery_optimization">为了使用它,请 <b>禁用电池优化</b><xliff:g id="appName">SimpleX</xliff:g>在下一个对话框。否则通知将被禁用。</string>
<string name="settings_notification_preview_title">通知预览</string>
<string name="enter_passphrase_notification_title">需要密码</string>
<string name="periodic_notifications_disabled">定期通知被禁用!</string>
<string name="notifications_mode_off">在应用程序打开时运行</string>
<string name="settings_notification_preview_mode_title">显示预览</string>
<string name="periodic_notifications_desc">该应用程序会定期获取新消息——它每天会消耗百分之几的电量。该应用程序不使用推送通知——您设备中的数据不会发送到服务器。</string>
<string name="v4_3_irreversible_message_deletion_desc">您的联系人可以允许完全删除消息。</string>
<string name="v4_4_disappearing_messages_desc">已发送的消息将在设定的时间后被删除。</string>
<string name="your_chat_database">您的聊天数据库</string>
<string name="wrong_passphrase_title">密码错误!</string>
<string name="save_verb">保存</string>
<string name="open_verb">打开</string>
<string name="update_database">更新</string>
<string name="save_passphrase_and_open_chat">保存密码并打开聊天</string>
<string name="open_chat">打开聊天</string>
<string name="database_backup_can_be_restored">更改数据库密码的尝试未完成。</string>
<string name="remove_member_confirmation">移除</string>
<string name="sender_you_pronoun"></string>
<string name="save_servers_button">保存</string>
<string name="settings_section_title_you"></string>
<string name="remove_passphrase">移除</string>
<string name="you_have_to_enter_passphrase_every_time">您必须在每次应用程序启动时输入密码——它不存储在设备上。</string>
<string name="set_password_to_export">设置密码来导出</string>
<string name="enter_correct_current_passphrase">请输入正确的当前密码。</string>
<string name="update_database_passphrase">更新数据库密码</string>
<string name="database_is_not_encrypted">您的聊天数据库未加密——设置密码来保护它。</string>
<string name="store_passphrase_securely_without_recover">请安全地保存密码,如果您丢失了密码,您将无法访问聊天。</string>
<string name="store_passphrase_securely">请安全地保存密码,如果您丢失了密码,您将无法更改它。</string>
<string name="wrong_passphrase">数据库密码错误</string>
<string name="network_options_save">保存</string>
<string name="update_network_settings_confirmation">更新</string>
<string name="open_simplex_chat_to_accept_call">打开 <xliff:g id="appNameFull">SimpleX Chat</xliff:g> 来接听电话</string>
<string name="icon_descr_video_call">视频通话</string>
<string name="contact_wants_to_connect_via_call"><xliff:g id="contactName" example="Alice">%1$s</xliff:g> 想通过以下方式与您联系</string>
<string name="icon_descr_call_rejected">拒接来电</string>
<string name="call_connection_peer_to_peer">点对点</string>
<string name="error_with_info">错误:%s</string>
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">如果您不能亲自见面,您可以 <b>扫描视频通话中的二维码</b>,或者您的联系人可以分享邀请链接。</string>
<string name="your_calls">您的通话</string>
<string name="call_connection_via_relay">通过中继</string>
<string name="callstatus_missed">未接来电</string>
<string name="callstatus_rejected">拒接来电</string>
<string name="v4_3_voice_messages">语音消息</string>
<string name="voice_messages">语音消息</string>
<string name="ntf_channel_calls">SimpleX Chat 通话</string>
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel">如果您不能亲自见面,<b>在视频通话</b>中出示二维码,或分享链接。</string>
<string name="your_chat_profiles">您的聊天资料</string>
<string name="icon_descr_call_missed">未接来电</string>
<string name="icon_descr_call_pending_sent">待定来电</string>
<string name="your_chat_profiles_stored_locally">您的聊天资料存储在本地,仅存储在您的设备上</string>
<string name="connection_error_auth_desc">除非您的联系人已删除此连接或此链接已被使用,否则它可能是一个错误——请报告。
\n如果要连接,请让您的联系人创建另一个连接链接,并检查您的网络连接是否稳定。</string>
<string name="you_are_already_connected_to_vName_via_this_link">您已经连接到 <xliff:g id="contactName" example="Alice">%1$s!</xliff:g></string>
<string name="your_chat_profile_will_be_sent_to_your_contact">您的聊天资料将被发送
\n给您的联系人</string>
<string name="users_delete_with_connections">资料和服务器连接</string>
<string name="update_network_settings_question">更新网络设置?</string>
<string name="only_you_can_delete_messages">只有您可以不可撤回地删除消息(您的联系人可以将它们标记为删除)。</string>
<string name="restart_the_app_to_create_a_new_chat_profile">重新启动应用程序以创建新的聊天资料。</string>
<string name="error_smp_test_server_auth">服务器需要授权才能创建队列,检查密码</string>
<string name="error_smp_test_failed_at_step">测试在步骤 %s 失败。</string>
<string name="failed_to_create_user_duplicate_desc">您已经有一个显示名相同的聊天资料。请选择另一个名字。</string>
<string name="icon_descr_sent_msg_status_sent">已发送</string>
<string name="mute_chat">静音</string>
<string name="image_descr_profile_image">资料图片</string>
<string name="icon_descr_settings">设置</string>
<string name="settings_section_title_settings">设置</string>
<string name="unknown_error">未知错误</string>
<string name="unknown_database_error_with_info">未知数据库错误:%s</string>
<string name="rcv_group_event_updated_group_profile">已更新的群组资料</string>
<string name="rcv_group_event_member_deleted">已删除 <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="snd_group_event_member_deleted">您删除了 <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="profile_will_be_sent_to_contact_sending_link">您的个人资料将发送给您收到此链接的联系人。</string>
<string name="trying_to_connect_to_server_to_receive_messages_with_error">正在尝试连接到用于从该联系人接收消息的服务器(错误:<xliff:g id="errorMsg">%1$s</xliff:g>)。</string>
<string name="connected_to_server_to_receive_messages_from_contact">您已连接到用于接收该联系人消息的服务器。</string>
<string name="description_you_shared_one_time_link">您分享了一次性链接</string>
<string name="message_delivery_error_desc">很可能此联系人已经删除了与您的联系。</string>
<string name="icon_descr_profile_image_placeholder">资料图片占位符</string>
<string name="smp_servers_per_user">您当前聊天资料的新连接服务器</string>
<string name="your_current_profile">您当前的资料</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">您的资料存储在您的设备上并且仅与您的联系人共享。
\n
\n<xliff:g id="appName">SimpleX</xliff:g> 服务器无法看见您的资料。</string>
<string name="your_profile_is_stored_on_your_device">您的资料、联系人和发送的消息存储在您的设备上。</string>
<string name="profile_is_only_shared_with_your_contacts">该资料仅与您的联系人共享。</string>
<string name="chat_preferences_on"></string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">此操作无法撤消——您的个人资料、联系人、消息和文件将不可撤回地丢失。</string>
<string name="messages_section_description">此设置适用于您当前聊天资料中的消息</string>
<string name="database_restore_error">恢复数据库错误</string>
<string name="restore_database_alert_confirm">恢复</string>
<string name="you_sent_group_invitation">您发送了群组邀请</string>
<string name="you_rejected_group_invitation">您拒绝了群组邀请</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">您当前的聊天数据库将被删除并替换为导入的数据库。
\n此操作无法撤消——您的个人资料、联系人、消息和文件将不可撤回地丢失。</string>
<string name="rcv_group_event_member_added">已邀请 <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="save_group_profile">保存群组资料</string>
<string name="error_smp_test_certificate">服务器地址中的证书指纹可能不正确</string>
<string name="network_error_desc">请使用 <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g> 检查您的网络连接,然后重试。</string>
<string name="v4_5_multiple_chat_profiles">多个聊天资料</string>
<string name="database_initialization_error_desc">数据库不能正常工作。点击了解更多</string>
<string name="message_delivery_error_title">消息传递错误</string>
<string name="ttl_hour">%d 小时</string>
<string name="ttl_hours">%d 小时</string>
<string name="ttl_month">%d 月</string>
<string name="ttl_sec">%d 秒</string>
<string name="how_simplex_works"><xliff:g id="appName">SimpleX</xliff:g> 是如何工作的</string>
<string name="ensure_ICE_server_address_are_correct_format_and_unique">确保 WebRTC ICE 服务器地址格式正确、每行分开且不重复。</string>
<string name="many_people_asked_how_can_it_deliver">许多人问:<i>如果<xliff:g id="appName">SimpleX</xliff:g>没有用户标识符,它是怎样传递信息的?</i></string>
<string name="ensure_smp_server_address_are_correct_format_and_unique">确保 SMP 服务器地址格式正确、每行分开且不重复。</string>
<string name="markdown_help">Markdown 帮助</string>
<string name="mark_code_verified">标记为已验证</string>
<string name="make_private_connection">建立私密连接</string>
<string name="group_preview_join_as">以 %s 身份加入</string>
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">如果您收到 <xliff:g id="appName">SimpleX Chat</xliff:g> 邀请链接,您可以在浏览器中打开它:</string>
<string name="mark_read">标记为已读</string>
<string name="mark_unread">标记为未读</string>
<string name="markdown_in_messages">在消息中使用 Markdown</string>
<string name="file_with_path">文件:%s</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">成员将被移出群组——此操作无法撤消!</string>
<string name="v4_5_message_draft">消息草稿</string>
<string name="thousand_abbreviation">k</string>
<string name="marked_deleted_description">标记为已删除</string>
<string name="ttl_week">%d 星期</string>
<string name="you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved">您将停止接收来自该群组的消息。聊天记录将被保留。</string>
<string name="group_member_role_member">成员</string>
<string name="member_info_section_title_member">成员</string>
<string name="ttl_weeks">%d 星期</string>
<string name="ttl_min">%d 分钟</string>
<string name="ttl_months">%d 月</string>
<string name="network_and_servers">网络和服务器</string>
<string name="network_settings_title">网络设置</string>
<string name="moderated_description">已被管理员移除</string>
<string name="network_use_onion_hosts_prefer_desc">Onion 主机将在可用时使用。</string>
<string name="network_use_onion_hosts_no_desc">将不会使用 Onion 主机。</string>
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app">📱 手机:点击<b>在手机应用程序中打开</b>,然后在应用程序中点击<b>连接</b></string>
<string name="delete_message_mark_deleted_warning">消息将被标记为删除。收件人将能够揭示此消息。</string>
<string name="v4_5_reduced_battery_usage_descr">更多改进即将推出!</string>
<string name="no_contacts_selected">未选择联系人</string>
<string name="one_time_link">一次性邀请链接</string>
<string name="feature_off">关闭</string>
<string name="network_use_onion_hosts_required_desc">连接需要 Onion 主机。</string>
<string name="network_use_onion_hosts_prefer_desc_in_alert">Onion 主机将在可用时使用。</string>
<string name="chat_item_ttl_none">从不</string>
<string name="feature_offered_item">已提供 %s</string>
<string name="feature_offered_item_with_param">已提供 %s%2s</string>
<string name="new_in_version">%s 中的新功能</string>
<string name="add_contact">一次性邀请链接</string>
<string name="ok">好的</string>
<string name="no_details">没有细节</string>
<string name="only_stored_on_members_devices">(仅由群组成员存储)</string>
<string name="only_you_can_send_voice">只有您可以发送语音消息。</string>
<string name="delete_message_cannot_be_undone_warning">消息将被删除——此操作无法撤消!</string>
<string name="images_limit_desc">一次只能发送10张图片</string>
<string name="icon_descr_more_button">更多</string>
<string name="new_database_archive">新数据库存档</string>
<string name="old_database_archive">旧数据库存档</string>
<string name="new_member_role">新成员角色</string>
<string name="no_contacts_to_add">没有联系人可添加</string>
<string name="network_status">网络状态</string>
<string name="chat_preferences_off">关闭</string>
<string name="network_use_onion_hosts_no_desc_in_alert">将不会使用 Onion 主机。</string>
<string name="network_use_onion_hosts_required_desc_in_alert">连接需要 Onion 主机。</string>
<string name="no_received_app_files">没有收到或发送的文件</string>
<string name="sender_cancelled_file_transfer">发送人已取消文件传输。</string>
<string name="share_verb">分享</string>
<string name="send_live_message">发送实时消息</string>
<string name="this_text_is_available_in_settings">此文本在设置中可用</string>
<string name="icon_descr_received_msg_status_unread">未读</string>
<string name="saved_ICE_servers_will_be_removed">保存的 WebRTC ICE 服务器将被删除。</string>
<string name="is_verified">%s 已验证</string>
<string name="smp_servers_use_server_for_new_conn">用于新连接</string>
<string name="network_disable_socks">使用直接互联网连接?</string>
<string name="network_use_onion_hosts_required">必要</string>
<string name="save_and_notify_contact">保存并通知联系人</string>
<string name="save_and_notify_contacts">保存并通知联系人</string>
<string name="read_more_in_github">在我们的 GitHub 仓库中阅读更多内容。</string>
<string name="reject">拒绝</string>
<string name="to_protect_privacy_simplex_has_ids_for_queues">为了保护隐私,而不是所有其他平台使用的用户 ID,<xliff:g id="appName">SimpleX</xliff:g> 具有消息队列的标识符,每个联系人都是分开的。</string>
<string name="network_option_tcp_connection_timeout">TCP 连接超时</string>
<string name="feature_received_prohibited">收到,禁止</string>
<string name="accept_feature_set_1_day">设定1天</string>
<string name="v4_2_security_assessment_desc">SimpleX Chat 安全性由 Trail of Bits 审核。</string>
<string name="simplex_link_mode_browser_warning">在浏览器中打开链接可能会降低连接的隐私和安全性。SimpleX 上不受信任的链接将显示为红色。</string>
<string name="restore_database_alert_desc">恢复数据库备份后请输入之前的密码。 此操作无法撤消。</string>
<string name="contact_developers">请更新应用程序并联系开发者。</string>
<string name="opensource_protocol_and_code_anybody_can_run_servers">开源协议和代码——任何人都可以运行服务器。</string>
<string name="paste_button">粘贴</string>
<string name="network_option_ping_count">PING 次数</string>
<string name="prohibit_sending_voice">禁止发送语音消息。</string>
<string name="network_option_ping_interval">PING 间隔</string>
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">请检查您使用的链接是否正确,或者让您的联系人给您发送另一个链接。</string>
<string name="network_option_protocol_timeout">协议超时</string>
<string name="reject_contact_button">拒绝</string>
<string name="reply_verb">回复</string>
<string name="network_options_reset_to_defaults">重置为默认</string>
<string name="run_chat_section">运行聊天程序</string>
<string name="save_archive">保存存档</string>
<string name="scan_code">扫码</string>
<string name="scan_code_from_contacts_app">从您联系人的应用程序中扫描安全码。</string>
<string name="security_code">安全码</string>
<string name="secret">秘密</string>
<string name="v4_2_security_assessment">安全评估</string>
<string name="ntf_channel_messages">SimpleX 消息</string>
<string name="is_not_verified">%s 未验证</string>
<string name="v4_5_italian_interface_descr">感谢用户——通过 Weblate 做出贡献!</string>
<string name="first_platform_without_user_ids">第一个没有任何用户标识符的平台——专为隐私保护设计。</string>
<string name="group_is_decentralized">该小组是完全分散式的——它只对成员可见。</string>
<string name="image_decoding_exception_desc">图像无法解码。 请尝试不同的图像或联系开发者。</string>
<string name="theme">主题</string>
<string name="delete_files_and_media_desc">此操作无法撤消——所有接收和发送的文件和媒体都将被删除。 低分辨率图片将保留。</string>
<string name="member_role_will_be_changed_with_invitation">角色将更改为“%s”。 该成员将收到新的邀请。</string>
<string name="enable_automatic_deletion_message">此操作无法撤消——早于所选的发送和接收的消息将被删除。 这可能需要几分钟时间。</string>
<string name="this_QR_code_is_not_a_link">此二维码不是链接!</string>
<string name="switch_receiving_address_desc">此功能是实验性的! 它仅在其他客户端安装了 4.2 版时才有效。 地址更改完成后,您应该会在对话中看到该消息——请检查您是否仍能收到来自该联系人(或群组成员)的消息。</string>
<string name="this_link_is_not_a_valid_connection_link">此链接不是有效的连接链接!</string>
<string name="to_start_a_new_chat_help_header">开始新的聊天</string>
<string name="to_verify_compare">要与您的联系人验证端到端加密,请比较(或扫描)您设备上的代码。</string>
<string name="unmute_chat">取消静音</string>
<string name="update_onion_hosts_settings_question">更新 .onion 主机设置?</string>
<string name="update_network_session_mode_question">更新传输隔离模式?</string>
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(从剪贴板扫描或粘贴)</string>
<string name="smp_server_test_secure_queue">保护队列</string>
<string name="reveal_verb">揭示</string>
<string name="la_notice_turn_on">打开</string>
<string name="icon_descr_sent_msg_status_send_failed">发送失败</string>
<string name="icon_descr_sent_msg_status_unauthorized_send">未经授权发送</string>
<string name="images_limit_title">太多图片!</string>
<string name="icon_descr_server_status_pending">待办的</string>
<string name="switch_receiving_address_question">切换接收地址吗?</string>
<string name="ask_your_contact_to_enable_voice">请让您的联系人启用发送语音消息。</string>
<string name="icon_descr_record_voice_message">录制语音消息</string>
<string name="icon_descr_send_message">发消息</string>
<string name="reset_verb">重置</string>
<string name="send_verb">发送</string>
<string name="send_live_message_desc">发送实时消息——它会在您键入时为收件人更新</string>
<string name="add_contact_or_create_group">开始新聊天</string>
<string name="to_share_with_your_contact">(与您的联系人分享)</string>
<string name="to_connect_via_link_title">通过链接连接</string>
<string name="set_contact_name">设置联系人姓名</string>
<string name="connection_you_accepted_will_be_cancelled">您接受的连接将被取消!</string>
<string name="contact_you_shared_link_with_wont_be_able_to_connect">您与之共享此链接的联系人将无法连接!</string>
<string name="show_QR_code">显示二维码</string>
<string name="chat_with_the_founder">发送问题和想法</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">保护您的隐私和安全的消息传递和应用程序平台。</string>
<string name="strikethrough">删去</string>
<string name="people_can_connect_only_via_links_you_share">人们只能通过您共享的链接与您建立联系。</string>
<string name="next_generation_of_private_messaging">下一代私密通讯软件</string>
<string name="paste_the_link_you_received">粘贴收到的链接</string>
<string name="alert_title_skipped_messages">已跳过消息</string>
<string name="settings_section_title_support">支持 SIMPLEX CHAT</string>
<string name="send_link_previews">发送链接预览</string>
<string name="settings_section_title_socks">SOCKS 代理</string>
<string name="stop_chat_question">停止聊天程序?</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">停止聊天以便导出、导入或删除聊天数据库。在聊天停止期间,您将无法收发消息。</string>
<string name="restore_database">恢复数据库备份</string>
<string name="restore_database_alert_title">恢复数据库备份?</string>
<string name="button_remove_member">删除成员</string>
<string name="button_send_direct_message">发送私信</string>
<string name="receiving_via">接收通过</string>
<string name="sending_via">发送通过</string>
<string name="conn_stats_section_title_servers">服务器</string>
<string name="switch_receiving_address">切换接收地址</string>
<string name="v4_5_message_draft_descr">保留最后的消息草稿及其附件。</string>
<string name="v4_5_private_filenames">私密文件名</string>
<string name="v4_4_french_interface_descr">感谢用户——通过 Weblate 做出贡献!</string>
<string name="v4_5_transport_isolation">传输隔离</string>
<string name="paste_connection_link_below_to_connect">将您收到的链接粘贴到下面的框中以与您的联系人联系。</string>
<string name="share_invitation_link">分享邀请链接</string>
<string name="this_string_is_not_a_connection_link">此字符串不是连接链接!</string>
<string name="send_us_an_email">给我们发电子邮件</string>
<string name="smp_servers">SMP 服务器</string>
<string name="sending_files_not_yet_supported">尚不支持发送文件</string>
<string name="trying_to_connect_to_server_to_receive_messages">正在尝试连接到用于从该联系人接收消息的服务器。</string>
<string name="receiving_files_not_yet_supported">尚不支持接收文件</string>
<string name="unknown_message_format">未知消息格式</string>
<string name="smp_servers_test_server">测试服务器</string>
<string name="smp_servers_test_servers">测试服务器</string>
<string name="simplex_link_contact">SimpleX 联系地址</string>
<string name="simplex_link_invitation">SimpleX 一次性邀请</string>
<string name="simplex_link_group">SimpleX 群组链接</string>
<string name="simplex_link_mode">SimpleX 链接</string>
<string name="sender_may_have_deleted_the_connection_request">发送人可能已删除连接请求。</string>
<string name="smp_servers_preset_server">预设服务器</string>
<string name="image_descr_qr_code">二维码</string>
<string name="network_session_mode_transport_isolation">传输隔离</string>
<string name="share_link">分享链接</string>
<string name="select_contacts">选择联系人</string>
<string name="skip_inviting_button">跳过邀请成员</string>
<string name="switch_verb">转变</string>
<string name="prohibit_sending_voice_messages">禁止发送语音消息。</string>
<string name="only_your_contact_can_send_voice">只有您的联系人可以发送语音消息。</string>
<string name="prohibit_direct_messages">禁止直接向成员发送私信。</string>
<string name="protect_app_screen">保护应用程序屏幕</string>
<string name="settings_section_title_themes">主题</string>
<string name="stop_chat_to_enable_database_actions">停止聊天以启用数据库操作。</string>
<string name="chat_item_ttl_seconds">%s 秒</string>
<string name="alert_message_no_group">该群组已不存在。</string>
<string name="group_invitation_tap_to_join">点击加入</string>
<string name="stop_chat_confirmation">停止</string>
<string name="restart_the_app_to_use_imported_chat_database">重新启动应用程序以使用导入的聊天数据库。</string>
<string name="group_member_role_owner">所有者</string>
<string name="group_member_status_removed">已删除</string>
<string name="role_in_group">角色</string>
<string name="network_option_seconds_label"></string>
<string name="network_options_revert">恢复</string>
<string name="reset_color">重置颜色</string>
<string name="save_color">保存颜色</string>
<string name="v4_5_reduced_battery_usage">减少电池使用量</string>
<string name="v4_5_private_filenames_descr">为了保护时区,图像/语音文件使用 UTC。</string>
<string name="use_chat">使用聊天</string>
<string name="read_more_in_github_with_link">在我们的 <font color="#0088ff">GitHub 存储库</font> 中阅读更多内容。</string>
<string name="auth_open_chat_console">打开聊天控制台</string>
<string name="auth_stop_chat">Stop chat</string>
<string name="toast_permission_denied">权限被拒绝!</string>
<string name="chat_help_tap_button">点击按钮</string>
<string name="thank_you_for_installing_simplex">感谢您安装 <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="use_camera_button">使用相机</string>
<string name="smp_servers_preset_address">预设服务器地址</string>
<string name="smp_servers_scan_qr">扫描服务器二维码</string>
<string name="smp_servers_test_failed">服务器测试失败!</string>
<string name="smp_servers_test_some_failed">一些服务器未通过测试:</string>
<string name="star_on_github">在 GitHub 上加星</string>
<string name="save_and_notify_group_members">保存并通知群组成员</string>
<string name="icon_descr_speaker_off">扬声器关闭</string>
<string name="icon_descr_speaker_on">扬声器开启</string>
<string name="rcv_group_event_user_deleted">已将您移除</string>
<string name="updating_settings_will_reconnect_client_to_all_servers">更新设置会将客户端重新连接到所有服务器。</string>
<string name="theme_system">系统</string>
<string name="v4_4_live_messages_desc">对方会在您键入时看到更新。</string>
<string name="view_security_code">查看安全码</string>
<string name="voice_message_with_duration">语音消息 (<xliff:g id="duration">%1$s</xliff:g>)</string>
<string name="waiting_for_image">等待图像中</string>
<string name="welcome">欢迎!</string>
<string name="personal_welcome">欢迎 <xliff:g>%1$s</xliff:g></string>
<string name="you_will_be_connected_when_your_contacts_device_is_online">当您的联系人设备在线时,您将可以连接,请稍等或稍后查看!</string>
<string name="rate_the_app">评价此应用程序</string>
<string name="network_enable_socks">使用 SOCKS 代理?</string>
<string name="network_socks_toggle">使用 SOCKS 代理(端口 9050</string>
<string name="total_files_count_and_size">%d 个文件,总大小为 %s</string>
<string name="you_joined_this_group">您已加入此群组</string>
<string name="you_are_invited_to_group">您被邀请加入群组</string>
<string name="chat_preferences_default">默认(%s</string>
<string name="voice_prohibited_in_this_chat">此聊天中禁止语音消息。</string>
<string name="voice_messages_are_prohibited">语音信息在该群组中被禁用。</string>
<string name="verify_security_code">验证安全码</string>
<string name="using_simplex_chat_servers">使用 <xliff:g id="appNameFull">SimpleX Chat</xliff:g> 服务器。</string>
<string name="simplex_link_connection">通过 <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g></string>
<string name="group_invitation_item_description">邀请至群组 <xliff:g id="group_name">%1$s</xliff:g></string>
<string name="icon_descr_address"><xliff:g id="appName">SimpleX</xliff:g> 地址</string>
<string name="icon_descr_simplex_team"><xliff:g id="appName">SimpleX</xliff:g> 团队</string>
<string name="group_info_section_title_num_members"><xliff:g id="num_members">%1$s</xliff:g> 成员</string>
<string name="chat_preferences_yes"></string>
<string name="you_can_share_your_address_anybody_will_be_able_to_connect">您可以将您的地址作为链接或二维码共享——任何人都可以连接到您。 如果您以后删除它,您不会丢失您的联系人。</string>
<string name="you_control_servers_to_receive_your_contacts_to_send">您可以控制通过哪些服务器<b>接收</b>消息,您的联系人 - 您用来向他们发送消息的服务器。</string>
<string name="show_QR_code_for_your_contact_to_scan_from_the_app__multiline">您的联系人可以从应用程序中扫描二维码。</string>
<string name="you_will_be_connected_when_group_host_device_is_online">您将在组主设备上线时连接到该群组,请稍等或稍后再检查!</string>
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">当您启动应用或在应用程序驻留后台超过30 秒后,您将需要进行身份验证。</string>
<string name="archive_created_on_ts">创建于 <xliff:g id="archive_ts">%1$s</xliff:g></string>
<string name="you_can_connect_to_simplex_chat_founder">您可以 <font color="#0088ff"> 连接到 <xliff:g id="appNameFull"> SimpleX Chat </xliff:g> 开发者提出任何问题并接收更新 </font></string>
<string name="you_accepted_connection">您已接受连接</string>
<string name="your_SMP_servers">您的 SMP 服务器</string>
<string name="integrity_msg_skipped"><xliff:g id="connection ID" example="1">%1$d</xliff:g> 已跳过消息</string>
<string name="ttl_s">%ds</string>
<string name="whats_new">更新内容</string>
<string name="group_preview_you_are_invited">您被邀请加入群组</string>
<string name="you_have_no_chats">您没有聊天记录</string>
<string name="icon_descr_waiting_for_image">等待图像中</string>
<string name="voice_message">语音消息</string>
<string name="voice_messages_prohibited">语音消息禁止发送!</string>
<string name="you_need_to_allow_to_send_voice">您需要允许您的联系人发送语音消息才能发送它们。</string>
<string name="scan_QR_code">扫描二维码</string>
<string name="you_invited_your_contact">您邀请了您的联系人</string>
<string name="contact_wants_to_connect_with_you">想要与您连接!</string>
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">您的联系人需要在线才能完成连接。
\n您可以取消此连接并删除联系人(稍后尝试使用新链接)。</string>
<string name="image_descr_simplex_logo"><xliff:g id="appName">SimpleX</xliff:g> 标志</string>
<string name="your_simplex_contact_address">您的 <xliff:g id="appName">SimpleX</xliff:g> 联系地址</string>
<string name="install_simplex_chat_for_terminal">为终端安装 <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="use_simplex_chat_servers__question">使用 <xliff:g id="appNameFull">SimpleX Chat</xliff:g> 服务器?</string>
<string name="we_do_not_store_contacts_or_messages_on_servers">我们不会在服务器上存储您的任何联系人或消息(一旦发送)。</string>
<string name="webrtc_ice_servers">WebRTC ICE 服务器</string>
<string name="relay_server_protects_ip">中继服务器保护您的 IP 地址,但它可以观察通话的持续时间。</string>
<string name="relay_server_if_necessary">中继服务器仅在必要时使用。其他人可能会观察到您的IP地址。</string>
<string name="your_ice_servers">您的 ICE 服务器</string>
<string name="icon_descr_video_off">视频关闭</string>
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">您可以通过应用设置/数据库或重启应用开始聊天。</string>
<string name="snd_group_event_changed_member_role">您将 %s 的角色更改为 %s</string>
<string name="snd_group_event_changed_role_for_yourself">您将自己的角色更改为 %s</string>
<string name="snd_conn_event_switch_queue_phase_completed">您已更改地址</string>
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">您可以共享链接或二维码——任何人都可以加入该群组。如果您稍后将其删除,您不会失去该组的成员。</string>
<string name="conn_level_desc_indirect">间接(<xliff:g id="conn_level">%1$s</xliff:g></string>
<string name="you_can_also_connect_by_clicking_the_link">您也可以通过点击链接进行连接。 如果它在浏览器中打开,请单击<b>在移动应用程序中打开</b>按钮。</string>
<string name="app_name"><xliff:g id="appName">SimpleX</xliff:g></string>
<string name="you_will_join_group">您将加入此链接指向的群组并连接到其群组成员。</string>
<string name="description_via_group_link">通过群组链接</string>
<string name="description_via_one_time_link">通过一次性链接</string>
<string name="description_via_contact_address_link">通过联系地址链接</string>
<string name="simplex_link_mode_browser">通过浏览器</string>
<string name="smp_servers_your_server">您的服务器</string>
<string name="network_use_onion_hosts_prefer">当可用时</string>
<string name="network_use_onion_hosts">使用 .onion 主机</string>
<string name="your_ICE_servers">您的 ICE 服务器</string>
<string name="core_simplexmq_version">simplexmq: v%s (%2s)</string>
<string name="section_title_welcome_message">欢迎消息</string>
<string name="you_control_your_chat">您的聊天由您掌控!</string>
<string name="you_can_use_markdown_to_format_messages__prompt">您可以使用 markdown 来编排消息格式:</string>
<string name="ttl_h">%dh</string>
<string name="ttl_days">%d 天</string>
<string name="ttl_w">%dw</string>
<string name="you_are_invited_to_group_join_to_connect_with_group_members">您被邀请加入群组。 加入以与群组成员联系。</string>
<string name="youve_accepted_group_invitation_connecting_to_inviting_group_member">你加入了这个群组。连接到邀请组成员。</string>
<string name="snd_conn_event_switch_queue_phase_completed_for_member">您更改了 %s 的地址</string>
<string name="snd_group_event_user_left">您已离开</string>
<string name="num_contacts_selected"><xliff:g id="connection ID" example="1">%1$d</xliff:g> 已选择联系人</string>
<string name="chat_preferences_you_allow">您允许</string>
<string name="v4_2_auto_accept_contact_requests_desc">带有可选的欢迎消息。</string>
<string name="ttl_m">%dm</string>
<string name="ttl_mth">%dmth</string>
<string name="waiting_for_file">等待文件中</string>
<string name="contact_sent_large_file">您的联系人发送的文件大于当前支持的最大大小 (&lt;xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"maxFileSize\"&gt;%1$s&lt;/xliff :g&gt;).</string>
<string name="you_will_be_connected_when_your_connection_request_is_accepted">当您的连接请求被接受后,您将可以连接,请稍等或稍后检查!</string>
<string name="smp_servers_use_server">使用服务器</string>
<string name="smp_servers_your_server_address">您的服务器地址</string>
<string name="icon_descr_video_on">视频开启</string>
<string name="v4_3_voice_messages_desc">最多 40 秒,立即收到。</string>
<string name="v4_4_verify_connection_security">验证连接安全</string>
<string name="moderated_item_description">由 %s 审核</string>
<string name="moderate_verb">管理员移除</string>
<string name="moderate_message_will_be_deleted_warning">将为所有成员删除该消息。</string>
<string name="moderate_message_will_be_marked_warning">该消息将对所有成员显示为已审核。</string>
<string name="delete_member_message__question">删除成员消息?</string>
<string name="group_member_role_observer">观察者</string>
<string name="you_are_observer">您是观察者</string>
<string name="error_updating_link_for_group">更新群组链接错误</string>
<string name="observer_cant_send_message_title">您无法发送消息!</string>
<string name="initial_member_role">初始角色</string>
<string name="observer_cant_send_message_desc">请联系群组管理员。</string>
<string name="language_system">系统</string>
</resources>
@@ -6,16 +6,981 @@
<string name="about_simplex">關於 SimpleX</string>
<string name="accept_call_on_lock_screen">接受</string>
<string name="accept_feature">接受</string>
<string name="chat_item_ttl_day">1 </string>
<string name="chat_item_ttl_day">1 </string>
<string name="chat_item_ttl_month">1 個月</string>
<string name="accept_contact_button">接受</string>
<string name="about_simplex_chat">關於<xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="accept_connection_request__question">接受連線要求\?</string>
<string name="callstatus_accepted">已接受電話</string>
<string name="network_enable_socks_info">要在端口 9050 啟動 SOCKS 代理伺服器嗎\? 在啟用這個選項之前,必須先啟動代理伺服器。</string>
<string name="about_simplex_chat">關於 <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="accept_connection_request__question">接受連線請求?</string>
<string name="callstatus_accepted">已接受收聽電話</string>
<string name="network_enable_socks_info">要在端口 9050 啟動 SOCKS 代理伺服器嗎在啟用這個選項之前,必須先啟動代理伺服器。</string>
<string name="group_member_role_admin">管理員</string>
<string name="above_then_preposition_continuation">以上,然後:</string>
<string name="above_then_preposition_continuation">然後選按:</string>
<string name="smp_servers_preset_add">加入預設伺服器</string>
<string name="smp_servers_add">新增伺服器…</string>
<string name="smp_servers_add">新增伺服器 </string>
<string name="accept">接受</string>
<string name="auth_unavailable">認證無效</string>
<string name="allow_verb">允許</string>
<string name="display_name__field">顯示名稱:</string>
<string name="full_name__field">全名:</string>
<string name="onboarding_notifications_mode_service_desc"><b>使用更多電量</b>!通知服務會長期在背景中運行 – 一但有訊息就會顯示在通知內。</string>
<string name="onboarding_notifications_mode_periodic_desc"><b>對電量也不錯</b>。通知服務會每十分鐘運行一次。你可能會錯過電話通話或訊息。</string>
<string name="answer_call">回應通話請求</string>
<string name="clear_contacts_selection_button">清除</string>
<string name="allow_direct_messages">允許在群組內選擇成員後傳送訊息。</string>
<string name="ttl_sec">%d 秒</string>
<string name="feature_cancelled_item">已取消 %s</string>
<string name="v4_2_auto_accept_contact_requests">自動接受聯絡人請求</string>
<string name="group_unsupported_incognito_main_profile_sent">匿名聊天模式在這裡是不支援 - 你的個人檔案會顯示於群組內</string>
<string name="chat_preferences_no">不要</string>
<string name="allow_to_send_disappearing">允許傳送自動銷毀的訊息。</string>
<string name="database_initialization_error_title">無法初始化數據庫</string>
<string name="notifications_mode_service">一直開啟</string>
<string name="auth_disable_simplex_lock">關閉 SimpleX 鎖定</string>
<string name="auth_enable_simplex_lock">啟動 SimpleX 鎖定</string>
<string name="copy_verb">複製</string>
<string name="reply_verb">回覆</string>
<string name="share_verb">分享</string>
<string name="attach">附件</string>
<string name="chat_with_developers">和開發人員對話</string>
<string name="your_chats">你的對話</string>
<string name="share_file">分享檔案 …</string>
<string name="share_message">分享訊息</string>
<string name="icon_descr_cancel_image_preview">取消圖片預覽</string>
<string name="allow_voice_messages_question">允許使用語音訊息?</string>
<string name="cancel_verb">取消</string>
<string name="icon_descr_cancel_live_message">取消實況訊息</string>
<string name="add_new_contact_to_create_one_time_QR_code"><b>新增新的聯絡人</b>:新增新的聯絡人可以使用二維碼建立你的一次性二維碼。</string>
<string name="scan_QR_code_to_connect_to_contact_who_shows_QR_code"><b>掃描二維碼</b>:連接到向你出示二維碼的聯絡人。</string>
<string name="choose_file">選擇檔案</string>
<string name="use_camera_button">使用相機</string>
<string name="from_gallery_button">從圖片庫選擇圖片</string>
<string name="accept_contact_incognito_button">接受匿名聊天模式</string>
<string name="clear_chat_warning">所有訊息記錄會刪除 - 這不能還原!這些訊息只會在你裝置中刪除。</string>
<string name="clear_verb">清除</string>
<string name="clear_chat_question">要清除對話記錄?</string>
<string name="icon_descr_cancel_link_preview">取消連結預覽</string>
<string name="clear_chat_menu_action">清除</string>
<string name="clear_chat_button">清除對話記錄</string>
<string name="share_invitation_link">分享邀請連結</string>
<string name="chat_with_the_founder">傳送問題和想法給開發者</string>
<string name="how_to_use_simplex_chat">如何使用</string>
<string name="install_simplex_chat_for_terminal">使用終端機安裝 <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="app_version_title">應用程式版本</string>
<string name="all_your_contacts_will_remain_connected">你的所有聯絡人會保持連接。</string>
<string name="app_version_code">程式建構:%s</string>
<string name="app_version_name">應用程式版本:v%s</string>
<string name="share_link">分享連結</string>
<string name="accept_automatically">自動接受所有請求</string>
<string name="your_current_profile">你目前的個人檔案</string>
<string name="display_name_cannot_contain_whitespace">顯示的名稱字與字中間不能有空白。</string>
<string name="save_preferences_question">儲存設定?</string>
<string name="display_name">顯示名稱</string>
<string name="full_name_optional__prompt">全名(可選)</string>
<string name="callstatus_error">通話出現錯誤</string>
<string name="callstatus_calling">正在撥打 …</string>
<string name="callstatus_in_progress">通話中</string>
<string name="secret">私密</string>
<string name="callstate_connected">已連接</string>
<string name="onboarding_notifications_mode_off_desc"><b>對電量最好</b>。 只有在應用程式運行中的時侯才可以接收訊息,後台服務並不會使用。</string>
<string name="encrypted_video_call">端對端加密視訊通話</string>
<string name="video_call_no_encryption">視訊通話(沒有端對端加密)</string>
<string name="call_already_ended">通話已經結束了!</string>
<string name="icon_descr_audio_off">關閉語音</string>
<string name="icon_descr_audio_on">開啟語音</string>
<string name="icon_descr_call_ended">通話已經取消了</string>
<string name="icon_descr_call_progress">通話中</string>
<string name="icon_descr_speaker_on">開啟喇叭</string>
<string name="settings_section_title_calls">通話</string>
<string name="appearance_settings">主題</string>
<string name="audio_call_no_encryption">語音通話(沒有端對端加密)</string>
<string name="icon_descr_audio_call">語音通話</string>
<string name="settings_audio_video_calls">語音 &amp; 視訊通話</string>
<string name="icon_descr_video_call">視訊通話</string>
<string name="bold">粗體</string>
<string name="auto_accept_images">自動接收圖片</string>
<string name="full_backup">備份應用程式資料</string>
<string name="settings_section_title_icon">應用程式圖示</string>
<string name="chat_database_imported">已匯入對話資料庫</string>
<string name="keychain_is_storing_securely">Android 金鑰庫是用於安全地儲存密碼 - 確保通知服務的運作</string>
<string name="impossible_to_recover_passphrase"><b>請注意</b>:如果你忘記了密碼你將不能再次復原或更改密碼。</string>
<string name="keychain_allows_to_receive_ntfs">當你重新啟動應用程式或更改密碼後, Android 金鑰庫將會用來安全地儲存密碼 - 將會允許接到通知。</string>
<string name="chat_is_stopped_indication">聊天室已停止運作</string>
<string name="only_group_owners_can_change_prefs">只有這個群組的負責人才能更改群組內的設定。</string>
<string name="change_verb">修改</string>
<string name="users_add">加入新的個人檔案</string>
<string name="users_delete_all_chats_deleted">所有對話和對話記錄會刪除 - 這不能還原!</string>
<string name="incognito">匿名聊天模式</string>
<string name="chat_preferences_always">經常</string>
<string name="chat_preferences_on">開啟</string>
<string name="your_preferences">你的設定</string>
<string name="allow_your_contacts_to_send_voice_messages">允許你的聯絡人傳送語音訊息。</string>
<string name="allow_voice_messages_only_if">只能在你的聯絡人允許使用語言訊息的時候,才能使用語音訊息。</string>
<string name="both_you_and_your_contact_can_send_disappearing">你和你的聯絡人都可以傳送自動銷毀的訊息。</string>
<string name="only_you_can_send_disappearing">只有你能傳送自動銷毀的訊息。</string>
<string name="both_you_and_your_contact_can_send_voice">你和你的聯絡人都可以傳送語音訊息。</string>
<string name="v4_2_group_links_desc">管理員可以建立可以加入群組的連結。</string>
<string name="v4_3_improved_server_configuration_desc">使用二維碼掃描並新增伺服器。</string>
<string name="chat_is_running">聊天室運行中</string>
<string name="chat_database_section">聊天室數據庫</string>
<string name="chat_is_stopped">聊天室已經停止</string>
<string name="stop_chat_confirmation">停止</string>
<string name="chat_database_deleted">已刪除數據庫的對話內容</string>
<string name="stop_chat_to_enable_database_actions">停止聊天室以啟用數據庫功能。</string>
<string name="change_database_passphrase_question">更改數據庫密碼?</string>
<string name="leave_group_question">確定要退出群組?</string>
<string name="leave_group_button">退出</string>
<string name="alert_title_cant_invite_contacts">無法邀請該聯絡人!</string>
<string name="rcv_group_event_member_connected">已連接</string>
<string name="rcv_group_event_member_left">已離開</string>
<string name="invite_prohibited">無法邀請該聯絡人!</string>
<string name="create_secret_group_title">建立私密群組</string>
<string name="button_leave_group">退出群組</string>
<string name="group_member_status_connected">已連接</string>
<string name="group_display_name_field">群組顯示名稱:</string>
<string name="group_full_name_field">群組全名:</string>
<string name="chat_preferences">對話設定</string>
<string name="chat_preferences_off">關閉</string>
<string name="chat_preferences_yes"></string>
<string name="timed_messages">自動銷毀訊息</string>
<string name="group_members_can_send_dms">群組內的成員可以私訊群組內的成員。</string>
<string name="ttl_min">%d 分鐘</string>
<string name="ttl_month">%d 月</string>
<string name="callstatus_ended">通話結束 <xliff:g id="duration" example="01:15">%1$s</xliff:g></string>
<string name="icon_descr_cancel_file_preview">取消檔案預覽</string>
<string name="cannot_receive_file">無法接收文件</string>
<string name="failed_to_create_user_duplicate_title">重複的顯示名稱!</string>
<string name="network_session_mode_entity_description">一個單獨的 TCP 連接(和 SOCKS 憑證)將用於<b>每個聯絡人和群組內的成員</b>
\n<b>請注意</b>:如果你有很多連接,你的電話電量和數據流量的消耗率會大大增加,一些連接有機會會連接失敗。</string>
<string name="network_session_mode_user_description">一個單獨的 TCP 連接(和 SOCKS 憑證)將用於&lt;b&gt;每個聊天室的設定&lt;b&gt;</string>
<string name="back">返回</string>
<string name="turning_off_service_and_periodic">省電模式運行中,關閉了背景通知服務和定期更新接收訊息。你可以在通知設定內重新啟用。</string>
<string name="settings_section_title_incognito">匿名聊天模式</string>
<string name="chat_preferences_default">預設 (%s)</string>
<string name="group_preferences">群組設定</string>
<string name="contact_preferences">聯絡人設定</string>
<string name="share_image">分享圖片 …</string>
<string name="both_you_and_your_contacts_can_delete">你和你的聯絡人都可以不可逆地刪除已經傳送的訊息</string>
<string name="server_connected">已連接</string>
<string name="simplex_link_mode_description">簡介</string>
<string name="simplex_link_mode_full">完整連結</string>
<string name="it_can_disabled_via_settings_notifications_still_shown"><b>你可以通過設定關閉</b> – 當應用程式運行時,通知服務仍然會運行。</string>
<string name="notifications_mode_service_desc">通知服務會一直在後台中運行 - 一但接收到新訊息就會顯示於通知內。</string>
<string name="notifications_mode_off_desc">應用程式只會在運行中的時候才會收到訊息的通知。</string>
<string name="icon_descr_asked_to_receive">要求接收圖片</string>
<string name="network_settings">進階網路設定</string>
<string name="rcv_conn_event_switch_queue_phase_completed">已修改你的地址</string>
<string name="rcv_conn_event_switch_queue_phase_changing">更改地址中 …</string>
<string name="snd_conn_event_switch_queue_phase_changing">更改地址中 …</string>
<string name="v4_4_disappearing_messages">自動銷毀訊息</string>
<string name="add_contact_or_create_group">開始新對話/創建新群組</string>
<string name="create_group">建立私密群組</string>
<string name="share_one_time_link">建立一次性邀請連結</string>
<string name="to_share_with_your_contact">(分享給你的聯絡人)</string>
<string name="chat_help_tap_button">點擊按鈕</string>
<string name="thank_you_for_installing_simplex">感謝你安裝 <xliff:g id="appNameFull">SimpleX Chat</xliff:g></string>
<string name="mute_chat">靜音</string>
<string name="unmute_chat">解除靜音</string>
<string name="your_settings">你的設定</string>
<string name="smp_servers_add_to_another_device">加入到另一個裝置上</string>
<string name="smp_servers_check_address">檢查輸入的伺服器地址然後再試一次。</string>
<string name="chat_console">終端機對話</string>
<string name="star_on_github">於 Github 給個星星</string>
<string name="incognito_info_protects">匿名聊天模式會保護你的真實個人檔案名稱和頭像 — 當有新聯絡人的時候會自動建立一個隨機性的個人檔案</string>
<string name="incognito_info_allows">這樣就會每一個對話中也擁有不同的顯示名稱並且沒有任何的個人資料可用於分享或有機會外洩</string>
<string name="incognito_info_find">若要查找用於匿名聊天模式連接的個人檔案,請點擊聯絡人或群組名稱。</string>
<string name="allow_disappearing_messages_only_if">只有你的聯絡人允許的情況下,才允許自動銷毀訊息。</string>
<string name="allow_your_contacts_to_send_disappearing_messages">允許你的聯絡人傳送自動銷毀的訊息。</string>
<string name="allow_irreversible_message_deletion_only_if">只有你的聯絡人允許的情況下,才允許不可逆地將訊息刪除。</string>
<string name="allow_your_contacts_irreversibly_delete">允許你的聯絡人可以不可逆地刪除已發送的訊息。</string>
<string name="allow_to_delete_messages">允許將不可撤銷的訊息刪除。</string>
<string name="allow_to_send_voice">允許傳送語音訊息。</string>
<string name="delete_after">多久後刪除</string>
<string name="all_group_members_will_remain_connected">群組內所有成員會保持連接</string>
<string name="color_primary">自訂顏色</string>
<string name="moderated_description">即時顯示訊息</string>
<string name="simplex_link_group">SimpleX 群組連結</string>
<string name="v4_5_private_filenames">私人檔案名稱</string>
<string name="error_adding_members">加入成員(s) 時出錯</string>
<string name="failed_to_create_user_title">個人檔案建立失敗!</string>
<string name="failed_to_create_user_duplicate_desc">你已經有一個個人檔案的顯示名稱和現在選擇建立的個人檔案名稱相同。請選擇其他名稱。</string>
<string name="failed_to_active_user_title">個人檔案切換失敗!</string>
<string name="error_joining_group">加入群組時出錯</string>
<string name="sender_cancelled_file_transfer">傳送者已取消傳送檔案。</string>
<string name="error_receiving_file">接收檔案時出錯</string>
<string name="error_creating_address">建立地址時出錯</string>
<string name="v4_5_private_filenames_descr">為了保護私人檔案,圖片或語音文件使用 UTC。</string>
<string name="sending_files_not_yet_supported">目前還不支援傳送檔案</string>
<string name="receiving_files_not_yet_supported">目前還不支援接收檔案</string>
<string name="sender_you_pronoun"></string>
<string name="unknown_message_format">未知的訊息格式</string>
<string name="invalid_message_format">無效的訊息格式</string>
<string name="live">實況</string>
<string name="invalid_chat">無效聊天</string>
<string name="invalid_data">無效數據</string>
<string name="connection_local_display_name">連接 <xliff:g id="connection ID" example="1">%1$d</xliff:g></string>
<string name="display_name_connection_established">已建立連線</string>
<string name="display_name_invited_to_connect">邀請連線</string>
<string name="display_name_connecting">連接中 …</string>
<string name="description_you_shared_one_time_link">你分享了一個一次性連結</string>
<string name="description_you_shared_one_time_link_incognito">你分享了一個匿名聊天模式的一次性連結</string>
<string name="simplex_link_contact">SimpleX 聯絡人地址</string>
<string name="simplex_link_invitation">SimpleX 一次性連結</string>
<string name="simplex_link_mode">SimpleX 連結</string>
<string name="simplex_link_connection">通過 <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g></string>
<string name="simplex_link_mode_browser">通過瀏覽器</string>
<string name="error_sending_message">傳送訊息時出錯</string>
<string name="contact_already_exists">聯絡人已存在</string>
<string name="you_are_already_connected_to_vName_via_this_link">你已經連接到 <xliff:g id="contactName" example="Alice">%1$s!</xliff:g></string>
<string name="v4_5_transport_isolation_descr">使用個人檔案(預設值)或使用連接(測試版)。</string>
<string name="v4_5_reduced_battery_usage">減少電量使用</string>
<string name="v4_5_reduced_battery_usage_descr">更多功能即將推出!</string>
<string name="v4_5_italian_interface">意大利語言界面</string>
<string name="v4_5_italian_interface_descr">感謝用戶 - 使用 Weblate 的翻譯貢獻!</string>
<string name="app_name"><xliff:g id="appName">SimpleX</xliff:g></string>
<string name="thousand_abbreviation">k</string>
<string name="connect_via_contact_link">透過連結連接聯絡人?</string>
<string name="connect_via_invitation_link">透過邀請連結連接?</string>
<string name="connect_via_group_link">通過邀請連結連接群組?</string>
<string name="profile_will_be_sent_to_contact_sending_link">你的個人檔案將會傳送給你收到此連結的聯絡人</string>
<string name="you_will_join_group">你將會加入此連結內的群組並且連接到此群組成為群組內的成員。</string>
<string name="connect_via_link_verb">連接</string>
<string name="server_error">錯誤</string>
<string name="server_connecting">連接中</string>
<string name="connected_to_server_to_receive_messages_from_contact">你已連接到此聯絡人使用的伺服器以接收訊息。</string>
<string name="trying_to_connect_to_server_to_receive_messages_with_error">嘗試連接至用於接收此聯絡人訊息的伺服器 (錯誤:<xliff:g id="errorMsg">%1$s</xliff:g>).</string>
<string name="trying_to_connect_to_server_to_receive_messages">正在嘗試連接到用於接收此聯絡人訊息伺服器。</string>
<string name="deleted_description">已刪除</string>
<string name="marked_deleted_description">已標記為刪除</string>
<string name="simplex_link_mode_browser_warning">在瀏覽器中開啟連結可能會有私隱疑慮和不確定性。不受 SimpleX 信任的連結會顯示紅色。</string>
<string name="error_saving_smp_servers">儲存 SMP 伺服器時出錯</string>
<string name="ensure_smp_server_address_are_correct_format_and_unique">請確保 SMP 伺服器連結格式正確,隔行顯示且不重複。</string>
<string name="error_setting_network_config">更新網路配置時出錯</string>
<string name="failed_to_parse_chat_title">聯絡人載入失敗</string>
<string name="failed_to_parse_chats_title">多個聯絡人載入失敗</string>
<string name="contact_developers">請更新應用程式或聯絡開發人員。</string>
<string name="connection_timeout">連線超時</string>
<string name="connection_error">連線失敗</string>
<string name="network_error_desc">請使用 <xliff:g id="serverHost" example="smp.simplex.im">%1$s</xliff:g> 檢查你的網路連線並且再試一次。</string>
<string name="smp_server_test_connect">連接</string>
<string name="periodic_notifications_disabled">定期通知已禁用!</string>
<string name="enter_passphrase_notification_title">需要使用密碼</string>
<string name="notification_preview_mode_contact_desc">只顯示聯絡人名稱</string>
<string name="auth_device_authentication_is_disabled_turning_off">裝置內的螢幕鎖定已關閉。正在關閉 SimpleX 鎖定。</string>
<string name="save_verb">儲存</string>
<string name="images_limit_title">太多圖片!</string>
<string name="error_saving_file">儲存檔案的時候出現錯誤</string>
<string name="notification_new_contact_request">有新的聯絡人連線請求</string>
<string name="auth_confirm_credential">確認你的憑據</string>
<string name="hide_verb">隱藏</string>
<string name="file_saved">已儲存檔案</string>
<string name="invalid_connection_link">無效的連線連結</string>
<string name="sender_may_have_deleted_the_connection_request">傳送者似乎已經刪除了連接的請求。</string>
<string name="error_deleting_contact">刪除聯絡人時出錯</string>
<string name="error_deleting_group">刪除群組時出錯</string>
<string name="error_deleting_contact_request">刪除聯絡人</string>
<string name="error_smp_test_failed_at_step">測試在步驟 %s 失敗。</string>
<string name="error_smp_test_server_auth">伺服器需要授權才能建立佇列,請檢查密碼</string>
<string name="error_smp_test_certificate">伺服器地址的憑證指紋可能不正確</string>
<string name="icon_descr_instant_notifications">即時收到通知</string>
<string name="service_notifications">即時通知!</string>
<string name="service_notifications_disabled">已禁用即時收到通知!</string>
<string name="database_initialization_error_desc">數據庫目前沒有正常運作。點擊查看更多</string>
<string name="ntf_channel_calls">SimpleX Chat 電話來電</string>
<string name="settings_notifications_mode_title">通知服務</string>
<string name="settings_notification_preview_mode_title">顯示預覽</string>
<string name="settings_notification_preview_title">通知預覽</string>
<string name="auth_you_will_be_required_to_authenticate_when_you_start_or_resume">如果你解鎖程式三十秒後再次啟動或返回應用程式,你會需要進行多一次解鎖程式。</string>
<string name="auth_unlock">已解鎖</string>
<string name="auth_log_in_using_credential">使用你的憑據登入</string>
<string name="auth_open_chat_console">使用終端機開啟對話</string>
<string name="message_delivery_error_title">傳送訊息有錯誤</string>
<string name="message_delivery_error_desc">大概你的聯絡人已經刪除了和你的對話並且已經沒有和你有連線。</string>
<string name="for_me_only">只為我刪除</string>
<string name="for_everybody">為所有人刪除</string>
<string name="icon_descr_edited">已修改</string>
<string name="icon_descr_sent_msg_status_sent">已傳送</string>
<string name="icon_descr_sent_msg_status_unauthorized_send">未經授權傳送</string>
<string name="icon_descr_sent_msg_status_send_failed">傳送失敗</string>
<string name="personal_welcome">歡迎 <xliff:g>%1$s</xliff:g></string>
<string name="welcome">歡迎!</string>
<string name="this_text_is_available_in_settings">在設定中可用這文字</string>
<string name="contact_connection_pending">連接中 …</string>
<string name="group_preview_you_are_invited">你被邀請加入至群組</string>
<string name="group_preview_join_as">加入為 %s</string>
<string name="group_connection_pending">連接中 …</string>
<string name="tap_to_start_new_chat">點擊開始新對話</string>
<string name="file_not_found">找不到檔案</string>
<string name="voice_message_with_duration">語音訊息 (<xliff:g id="duration">%1$s</xliff:g>)</string>
<string name="voice_message_send_text">語音訊息 …</string>
<string name="icon_descr_record_voice_message">錄製語音訊息</string>
<string name="you_need_to_allow_to_send_voice">你需要在設定上開放權限允許你的聯絡人傳送語音訊息。</string>
<string name="voice_messages_prohibited">禁止語音訊息!</string>
<string name="ask_your_contact_to_enable_voice">請你的聯絡人開放權限允許你傳送語音訊息</string>
<string name="only_group_owners_can_enable_voice">只有群組的負責人才能啟用語音訊息</string>
<string name="send_verb">傳送</string>
<string name="please_check_correct_link_and_maybe_ask_for_a_new_one">請你確認使用的是正確的連結,或者請你的聯絡人傳送一個新的連結給你。</string>
<string name="connection_error_auth">連接錯誤 (AUTH)</string>
<string name="connection_error_auth_desc">除非你的聯絡人刪除了連結或此連結已經被使用,否則它可能是一個錯誤 - 請報告問題。
\n要連線,請詢問你的聯絡人建立新的連結和確保你的網路是穩定的。</string>
<string name="error_accepting_contact_request">接受聯絡人的連接請求時出錯</string>
<string name="error_deleting_pending_contact_connection">刪除待處理的聊絡人連接時出錯</string>
<string name="error_changing_address">更改地址時出錯</string>
<string name="smp_server_test_create_queue">建立佇列</string>
<string name="smp_server_test_secure_queue">安全佇列</string>
<string name="smp_server_test_delete_queue">刪除佇列</string>
<string name="smp_server_test_disconnect">斷開連接</string>
<string name="turn_off_battery_optimization">為了使用它,請 <b>禁用電量優化</b> 為了 <xliff:g id="appName">SimpleX</xliff:g> 在下一個對話中。否則,將會禁用通知。</string>
<string name="enter_passphrase_notification_desc">在接收通知之前,請你輸入數據庫的密碼</string>
<string name="periodic_notifications_desc">應用程式會定期推送新訊息 — 它每天會消耗百分之幾的電量。 應用程式將不使用推送通知 — 你裝置中的數據不會傳送至伺服器。</string>
<string name="simplex_service_notification_title"><xliff:g id="appNameFull">SimpleX Chat</xliff:g> 服務</string>
<string name="simplex_service_notification_text">正在接收訊息 …</string>
<string name="hide_notification">隱藏</string>
<string name="ntf_channel_messages">SimpleX Chat 訊息</string>
<string name="notifications_mode_off">當應用程式是開啟</string>
<string name="notifications_mode_periodic">定期啟用</string>
<string name="notification_preview_mode_message_desc">顯示聯絡人名稱和訊息內容</string>
<string name="notification_display_mode_hidden_desc">隱藏聯絡人名稱和訊息內容</string>
<string name="notification_preview_somebody">隱藏聯絡人:</string>
<string name="notification_preview_new_message">有新訊息</string>
<string name="notification_contact_connected">已連線</string>
<string name="la_notice_title_simplex_lock">SimpleX 鎖定</string>
<string name="la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled">為了保護你的個人訊息,開啟 SimpleX 鎖定。
\n在啟用此功能之前,系統將提示你完成螢幕鎖定的功能。</string>
<string name="la_notice_turn_on">打開</string>
<string name="auth_simplex_lock_turned_on">SimpleX 鎖定已開啟</string>
<string name="auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled">你的裝置沒有啟動螢幕鎖定。你可以通過設定內啟動螢幕鎖定,當你啟動後就可以使用 SimpleX 鎖定。</string>
<string name="edit_verb">修改</string>
<string name="delete_verb">刪除</string>
<string name="reveal_verb">展露</string>
<string name="delete_message__question">確定要刪除訊息?</string>
<string name="delete_message_cannot_be_undone_warning">訊息會刪除 - 並且不能還原!</string>
<string name="delete_message_mark_deleted_warning">訊息將被標記為刪除。 接收訊息的人(多個) 能夠展露此訊息。</string>
<string name="icon_descr_received_msg_status_unread">未讀</string>
<string name="you_have_no_chats">你沒有聯絡人</string>
<string name="image_decoding_exception_title">解碼錯誤</string>
<string name="contact_sent_large_file">你的聯絡人傳送的檔案大於目前支持的最大上限 (<xliff:g id="maxFileSize">%1$s</xliff:g>).</string>
<string name="images_limit_desc">只能同一時間傳送十張圖片</string>
<string name="maximum_supported_file_size">目前支援的最大檔案大小為 <xliff:g id="maxFileSize">%1$s</xliff:g></string>
<string name="file_will_be_received_when_contact_is_online">下載檔案需要傳送者上線的時候才能下載檔案,請等待對方上線!</string>
<string name="voice_message">語音訊息</string>
<string name="send_live_message">傳送實況的訊息</string>
<string name="live_message">實況訊息!</string>
<string name="send_live_message_desc">傳送實況訊息 - 這會即時顯示你在輸入中的文字</string>
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(掃描或使用剪貼薄貼上)</string>
<string name="toast_permission_denied">權限拒絕!</string>
<string name="to_preserve_privacy_simplex_has_background_service_instead_of_push_notifications_it_uses_a_few_pc_battery">為了保護你的私隱,&lt;b xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\"&gt;SimpleX&lt;/xliff:g&gt; 有一個後台通知服務 – 它每天使用你幾 % 的電量。</string>
<string name="periodic_notifications">定期通知</string>
<string name="notifications_mode_periodic_desc">每十分鐘會檢查一次訊息,最快可設為每分鐘檢查一次</string>
<string name="notification_preview_mode_message">訊息文字</string>
<string name="notification_preview_mode_contact">聯絡人名稱</string>
<string name="notification_preview_mode_hidden">隱藏</string>
<string name="image_descr">圖片</string>
<string name="icon_descr_waiting_for_image">等待圖片</string>
<string name="icon_descr_image_snd_complete">已傳送圖片</string>
<string name="waiting_for_image">等待圖片</string>
<string name="image_will_be_received_when_contact_is_online">下載圖片需要傳送者上線的時候才能下載圖片,請等待對方上線!</string>
<string name="image_saved">圖片已儲存至圖片庫</string>
<string name="notifications">通知</string>
<string name="delete_contact_question">刪除聯絡人?</string>
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">此聯絡人和此聯絡人的訊息會全部刪除 - 這不能還原!</string>
<string name="button_delete_contact">刪除聯絡人</string>
<string name="text_field_set_contact_placeholder">設置聯絡人名稱 …</string>
<string name="icon_descr_server_status_connected">已連接</string>
<string name="icon_descr_server_status_disconnected">已斷開連接</string>
<string name="icon_descr_server_status_error">錯誤</string>
<string name="icon_descr_server_status_pending">待處理</string>
<string name="switch_receiving_address_question">切換接收地址?</string>
<string name="switch_receiving_address_desc">此功能目前還是實驗階段! 對方需要使用 4.2 版本或更高的版本才能成功生效。 地址更改後,你會在對話中看到新訊息 - 請測試你更改地址後是否仍然能夠收到來自這聯絡人(或群組內的成員)的訊息。</string>
<string name="view_security_code">查看安全碼</string>
<string name="verify_security_code">驗證安全碼</string>
<string name="icon_descr_send_message">傳送訊息</string>
<string name="error_deleting_user">刪除個人檔案時出現錯誤</string>
<string name="auth_stop_chat">停止對話</string>
<string name="image_decoding_exception_desc">圖片不能解碼,嘗試其他圖片或聯絡開發人員。</string>
<string name="icon_descr_file">檔案</string>
<string name="large_file">大型檔案</string>
<string name="waiting_for_file">等待檔案中</string>
<string name="confirm_verb">確定</string>
<string name="reset_verb">重設</string>
<string name="ok">OK</string>
<string name="no_details">沒有詳細資料</string>
<string name="add_contact">一次性邀請連結</string>
<string name="copied">已複製至你的剪貼薄</string>
<string name="connect_via_link_or_qr">使用連結連接 / 使用二維碼連接</string>
<string name="scan_QR_code">掃描二維碼</string>
<string name="only_stored_on_members_devices">(僅由群組成員儲存)</string>
<string name="contact_wants_to_connect_with_you">想和你對話!</string>
<string name="image_descr_simplex_logo"><xliff:g id="appName">SimpleX</xliff:g> 徽標</string>
<string name="connect_via_link">透過連結連接</string>
<string name="smp_servers_preset_server">預設伺服器</string>
<string name="smp_servers_your_server_address">你的伺服器位址</string>
<string name="smp_servers_delete_server">刪除伺服器</string>
<string name="your_ICE_servers">你的 ICE 伺服器</string>
<string name="enter_one_ICE_server_per_line">ICE 伺服器(每行一個)</string>
<string name="network_use_onion_hosts">使用 .onion 主機</string>
<string name="network_use_onion_hosts_no_desc">Onion 主機不會啟用</string>
<string name="network_use_onion_hosts_prefer_desc_in_alert">當有的時候 Onion 將會啟用。</string>
<string name="network_use_onion_hosts_no_desc_in_alert">Onion 主機不會被啟用。</string>
<string name="network_session_mode_entity">連接</string>
<string name="delete_address">刪除地址</string>
<string name="colored">顏色</string>
<string name="how_to_use_your_servers">如何使用你的伺服器</string>
<string name="core_build_timestamp">核心建立於:%s</string>
<string name="to_connect_via_link_title">使用連結連接</string>
<string name="desktop_scan_QR_code_from_app_via_scan_QR_code">💻 桌面版:於應用程式內掃描一個已存在的二維碼,透過二維碼掃描。</string>
<string name="icon_descr_settings">設定</string>
<string name="this_QR_code_is_not_a_link">這個二維碼不是一個連結!</string>
<string name="create_one_time_link">建立一次性邀請連結</string>
<string name="network_use_onion_hosts_prefer">當有</string>
<string name="core_version">核心版本:v%s</string>
<string name="core_simplexmq_version">simplexmq: v%s (%2s)</string>
<string name="create_address">建立地址</string>
<string name="contact_requests">聯絡人請求</string>
<string name="section_title_welcome_message">歡迎訊息</string>
<string name="edit_image">編輯圖片</string>
<string name="italic">斜體</string>
<string name="callstatus_rejected">已拒絕收聽電話</string>
<string name="callstatus_connecting">連接電話中 …</string>
<string name="callstate_waiting_for_confirmation">等待對方確定 …</string>
<string name="contribute">貢獻</string>
<string name="rate_the_app">評價程式</string>
<string name="save_servers_button">儲存</string>
<string name="ensure_ICE_server_address_are_correct_format_and_unique">請確保你的 WebRTC ICE 伺服器地址是正確的格式,每行也有分隔和沒有重複。</string>
<string name="network_disable_socks">使用直接互聯網連接?</string>
<string name="network_disable_socks_info">如果你確定,你的訊息伺服器能夠看到你的 IP 位置,和你的網路供應商 - 你正在連接到哪些伺服器。</string>
<string name="update_onion_hosts_settings_question">更新 .onion 主機設定?</string>
<string name="delete_image">刪除圖片</string>
<string name="callstate_starting">開始中 …</string>
<string name="callstate_waiting_for_answer">等待對方回應 …</string>
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">如果你收到 &lt;xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"appName\"&gt;SimepleX Chat 邀請連結,你可以使用瀏覧器開啟:</string>
<string name="mobile_tap_open_in_mobile_app_then_tap_connect_in_app">📱 電話版: 點擊 <b>使用電話程式開啟</b>, 然後在程式內點擊 <b>連接</b>.</string>
<string name="if_you_choose_to_reject_the_sender_will_not_be_notified">如果你選擇拒絕,傳送者將不會收到通知。</string>
<string name="reject_contact_button">拒絕</string>
<string name="delete_contact_menu_action">刪除</string>
<string name="delete_group_menu_action">刪除</string>
<string name="mark_read">標記為已讀</string>
<string name="mark_unread">標記為未讀</string>
<string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">你的聯絡人需要上線才能連接成功。
\n你可以取消此連線和刪除此聯絡人(或者你可以稍後使用新的連結再試一次)。</string>
<string name="image_descr_qr_code">二維碼</string>
<string name="image_descr_profile_image">個人檔案頭像</string>
<string name="image_descr_link_preview">預覧連結圖片</string>
<string name="icon_descr_address"><xliff:g id="appName">SimpleX</xliff:g> 地址</string>
<string name="icon_descr_help">幫助</string>
<string name="icon_descr_simplex_team"><xliff:g id="appName">SimpleX</xliff:g> 團隊</string>
<string name="icon_descr_email">電郵</string>
<string name="icon_descr_more_button">查看更多</string>
<string name="show_QR_code">顯示二維碼</string>
<string name="invalid_QR_code">無效的二維碼</string>
<string name="invalid_contact_link">無效連結!</string>
<string name="this_link_is_not_a_valid_connection_link">這個連結不是一個有效的連接連結!</string>
<string name="connection_request_sent">連線請求已傳送</string>
<string name="you_will_be_connected_when_group_host_device_is_online">當群組的建立人上線,你便會成功連接至群組,請耐心等待!</string>
<string name="you_will_be_connected_when_your_connection_request_is_accepted">當你的連接請求已被接受,你便會連接成功,請耐心等待!</string>
<string name="you_will_be_connected_when_your_contacts_device_is_online">當你的聯絡人上線,你便會連線成功,請耐心等待!</string>
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel">如果你不能面對面接觸此聯絡人,<b>可於視訊通話中出示你的二維碼</b>,或者分享連結。</string>
<string name="your_chat_profile_will_be_sent_to_your_contact">你的個人檔案會傳送給
\n你的聯絡人</string>
<string name="paste_connection_link_below_to_connect">將你收到的連結貼上至下面的框內以開展你與你的聯絡人對話。</string>
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link">如果你不能面對面接觸此聯絡人,你可以於 <b>視訊對話中掃描二維碼</b>,或者你可以分享一個邀請連結給此聯絡人。</string>
<string name="your_profile_will_be_sent">你的個人檔案會傳送給你的聯絡人。</string>
<string name="paste_button">貼上</string>
<string name="this_string_is_not_a_connection_link">這些字串不是連接連結!</string>
<string name="you_can_also_connect_by_clicking_the_link">你也可以點擊連結連接。如果在瀏覧器中開啟,點擊 <b>程式內的開啟</b> 按扭。</string>
<string name="one_time_link">一次性邀請連結</string>
<string name="your_contact_address">你的聯絡人地址</string>
<string name="scan_code">掃描二碼碼</string>
<string name="incorrect_code">錯誤的安全碼!</string>
<string name="scan_code_from_contacts_app">在你聯絡人的程式內掃描安全碼</string>
<string name="security_code">安全碼</string>
<string name="markdown_help">Markdown 幫助</string>
<string name="markdown_in_messages">於訊息中使用 Markdown 語法</string>
<string name="smp_servers_enter_manually">人手輸入伺服器地址</string>
<string name="smp_servers_use_server">使用伺服器</string>
<string name="smp_servers_use_server_for_new_conn">用於新的連接</string>
<string name="smp_servers_invalid_address">無效的伺服器地址</string>
<string name="smp_servers_per_user">此伺服器用於你目前的個人檔案</string>
<string name="use_simplex_chat_servers__question">使用 <xliff:g id="appNameFull">SimpleX Chat</xliff:g> 伺服器?</string>
<string name="your_SMP_servers">你的 SMP 伺服器</string>
<string name="using_simplex_chat_servers">目前使用 <xliff:g id="appNameFull">SimpleX Chat</xliff:g> 伺服器。</string>
<string name="how_to">如何?</string>
<string name="configure_ICE_servers">配置 ICE 伺服器</string>
<string name="saved_ICE_servers_will_be_removed">已儲存的 WebRTC ICE 伺服器將會移除。</string>
<string name="error_saving_ICE_servers">儲存 ICE 伺服器時有錯誤</string>
<string name="network_use_onion_hosts_no">不要</string>
<string name="network_use_onion_hosts_required">需要</string>
<string name="network_use_onion_hosts_prefer_desc">Onion 主機會當有的時侯啟用</string>
<string name="network_use_onion_hosts_required_desc_in_alert">連接時將需要 Onion 主機</string>
<string name="delete_address__question">刪除地址?</string>
<string name="you_can_share_your_address_anybody_will_be_able_to_connect">你可以使用連結或二維碼分享你的地址 - 任何人也可以和你連線。如果你不主動刪除你的聯絡人,你並不會遺失你的聯絡人</string>
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">你的個人檔案只會儲存於你的裝置和只會分享給你的聯絡人。
\n
\n<xliff:g id="appName">SimpleX</xliff:g> 伺服器並不會看到你的個人檔案。</string>
<string name="save_and_notify_contact">儲存並通知你的聯絡人</string>
<string name="save_and_notify_contacts">儲存並通知你的多個聯絡人</string>
<string name="your_profile_is_stored_on_your_device">你的個人檔案,聯絡人和傳送的訊息只會儲存於你的個人裝置內。</string>
<string name="profile_is_only_shared_with_your_contacts">你的個人檔案只會和你的聯絡人分享</string>
<string name="create_profile_button">建立</string>
<string name="how_to_use_markdown">如何使用 Markdown 語法</string>
<string name="you_can_use_markdown_to_format_messages__prompt">你可以使用 Markdown 語法以更清楚標明你的訊息:</string>
<string name="strikethrough">刪除線</string>
<string name="callstatus_missed">你錯過了電話</string>
<string name="callstate_received_answer">收到回應 …</string>
<string name="callstate_connecting">連接中 …</string>
<string name="callstate_ended">通話完結</string>
<string name="show_QR_code_for_your_contact_to_scan_from_the_app__multiline">你的聯絡人可以在程式內使用二維碼</string>
<string name="connect_button">連接</string>
<string name="network_and_servers">網路 &amp; 伺服器</string>
<string name="network_settings_title">網路設定</string>
<string name="network_socks_toggle">使用 SOCKS 代理伺服器 (端口 9050)</string>
<string name="network_enable_socks">使用 SOCKS 代理伺服器</string>
<string name="save_and_notify_group_members">儲存並通知群組內的聯絡人</string>
<string name="exit_without_saving">退出並且不儲存紀錄</string>
<string name="you_control_your_chat">你的對話由你控制!</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">一個保護你的隱私和傳送安全通訊的應用程式平台。</string>
<string name="we_do_not_store_contacts_or_messages_on_servers">我們不會在伺服器內儲存你的任何聯絡人和消息(一旦傳送)。</string>
<string name="create_profile">建立個人檔案</string>
<string name="callstate_received_confirmation">回應已確認</string>
<string name="you_can_connect_to_simplex_chat_founder">你可以透過 <font color="#0088ff">連接到 <xliff:g id="appNameFull">SimpleX Chat</xliff:g> 開發人員提出任何問題並同意更新</font></string>
<string name="to_start_a_new_chat_help_header">開始新的對話</string>
<string name="set_contact_name">設定聯絡人名稱</string>
<string name="you_invited_your_contact">你已邀請了你的聯絡人</string>
<string name="you_accepted_connection">你接受了連接</string>
<string name="delete_pending_connection__question">刪除等待中的連接?</string>
<string name="contact_you_shared_link_with_wont_be_able_to_connect">當聯絡人發現此連結後,嘗試點擊的聯絡人將無法連線!</string>
<string name="connection_you_accepted_will_be_cancelled">你所接受的連接將會被取消!</string>
<string name="alert_title_contact_connection_pending">你的聯絡人現在還沒連接!</string>
<string name="icon_descr_close_button">關閉按鈕</string>
<string name="mark_code_verified">已標記為已驗證</string>
<string name="clear_verification">清除驗證</string>
<string name="to_verify_compare">如果要和你的聯絡人驗認端對端加密,在對方的程式內掃描二維碼。</string>
<string name="is_verified">%s 已驗證</string>
<string name="is_not_verified">%s 並未驗證</string>
<string name="your_simplex_contact_address">你的 <xliff:g id="appName">SimpleX</xliff:g> 聯絡地址</string>
<string name="your_chat_profiles">你的個人檔案</string>
<string name="database_passphrase_and_export">資料庫密碼及匯出</string>
<string name="send_us_an_email">傳送電郵</string>
<string name="chat_lock">SimpleX 鎖定</string>
<string name="smp_servers">SMP 服務</string>
<string name="smp_servers_preset_address">預設伺服器地址</string>
<string name="smp_servers_test_server">測試伺服器</string>
<string name="smp_servers_test_servers">測試多個伺服器</string>
<string name="smp_servers_save">儲存伺服器</string>
<string name="smp_servers_test_failed">伺服器測試失敗!</string>
<string name="smp_servers_test_some_failed">有一些伺服器測試失敗:</string>
<string name="smp_servers_scan_qr">使用二維碼掃描伺服器</string>
<string name="smp_servers_your_server">你的伺服器</string>
<string name="network_use_onion_hosts_required_desc">連接時將會需要使用 Onion 主機</string>
<string name="network_session_mode_user">對話檔案</string>
<string name="description_via_group_link">透過群組連結</string>
<string name="description_via_group_link_incognito">透過群組連結使用匿名聊天模式</string>
<string name="description_via_contact_address_link_incognito">一個使用了匿名聊天模式的人透過連結加入了群組。</string>
<string name="description_via_one_time_link_incognito">透過使用一次性連結匿名聊天模式連線</string>
<string name="many_people_asked_how_can_it_deliver">有很多人問:
\nxmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\"&gt;如果 &lt;xliff:g id=\"appName\"&gt;SimpleX&lt;/xliff:g&gt; 沒有任何的用戶標識符,應如何傳送訊息?&lt;/i&gt;</string>
<string name="onboarding_notifications_mode_service">即時</string>
<string name="onboarding_notifications_mode_periodic">定期的</string>
<string name="no_call_on_lock_screen">關閉</string>
<string name="icon_descr_call_missed">你錯過此通話</string>
<string name="open_verb">開啟</string>
<string name="open_simplex_chat_to_accept_call">開啟
\n<xliff:g id="appNameFull">
\nSimpleX Chat</xliff:g> 以接受通話</string>
<string name="icon_descr_call_rejected">已拒絕通話</string>
<string name="show_call_on_lock_screen">顯示</string>
<string name="icon_descr_call_connecting">連線通話中</string>
<string name="files_and_media_section">檔案及媒體檔案</string>
<string name="restart_the_app_to_create_a_new_chat_profile">重新啟動應用程式以建立新的個人檔案。</string>
<string name="delete_files_and_media_question">刪除所有檔案及媒體檔案?</string>
<string name="delete_files_and_media_for_all_users">刪除所有你的個人檔案及媒體檔案</string>
<string name="total_files_count_and_size">%d 檔案(s) 的總共大小為 %s</string>
<string name="messages_section_title">訊息</string>
<string name="chat_item_ttl_none">永不</string>
<string name="no_received_app_files">沒有收到或傳送的檔案</string>
<string name="current_passphrase">目前的密碼 …</string>
<string name="encrypt_database">加密</string>
<string name="error_changing_message_deletion">修改設定時出錯</string>
<string name="notifications_will_be_hidden">通知服務只會在應用程式關閉前才會傳送</string>
<string name="remove_passphrase">移除</string>
<string name="remove_passphrase_from_keychain">要從金鑰庫移除密碼?</string>
<string name="confirm_new_passphrase">確定新密碼 …</string>
<string name="new_passphrase">新密碼 …</string>
<string name="group_invitation_tap_to_join">點擊加入</string>
<string name="group_invitation_tap_to_join_incognito">點擊以使用匿名聊天模式加入</string>
<string name="rcv_group_event_changed_member_role">%s 的身份已更改為 %s</string>
<string name="rcv_group_event_member_added">已經邀請 <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="rcv_group_event_changed_your_role">已更改你的身份為 %s</string>
<string name="group_member_status_accepted">連線中 (已接受)</string>
<string name="group_member_status_left">退出</string>
<string name="group_member_role_owner">負責人</string>
<string name="group_member_status_removed">已移除</string>
<string name="group_member_status_complete">完成</string>
<string name="group_member_status_connecting">連線中</string>
<string name="group_member_status_creator">創建人</string>
<string name="new_member_role">新成員的身份</string>
<string name="group_info_section_title_num_members"><xliff:g id="num_members">%1$s</xliff:g> 位成員</string>
<string name="button_edit_group_profile">修改群組內的設定</string>
<string name="create_group_link">建立群組連結</string>
<string name="button_create_group_link">建立連結</string>
<string name="delete_link_question">確定要刪除連結?</string>
<string name="button_remove_member">移除成員</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="network_status">網路狀態</string>
<string name="network_options_reset_to_defaults">重置為預設值</string>
<string name="incognito_info_share">當你與某人分享已啟用匿名聊天模式的個人檔案時,此個人檔案將用於他們邀請你參加的群組。</string>
<string name="theme_dark">黑暗</string>
<string name="full_deletion">為所有人刪除</string>
<string name="voice_messages">語音訊息</string>
<string name="feature_offered_item_with_param">提供 %s: %2s</string>
<string name="v4_2_security_assessment">安全性評估</string>
<string name="v4_2_security_assessment_desc">SimpleX Chat 的安全性由 Trail of Bits 審核。</string>
<string name="v4_2_group_links">群組連結</string>
<string name="v4_5_multiple_chat_profiles">多個個人檔案</string>
<string name="v4_5_multiple_chat_profiles_descr">不同的名稱、頭像和傳輸隔離。</string>
<string name="v4_5_message_draft">訊息草稿</string>
<string name="v4_5_message_draft_descr">保留最後一則帶附件的訊息草稿。</string>
<string name="v4_5_transport_isolation">傳輸隔離</string>
<string name="import_database_question">匯入對話資料庫?</string>
<string name="store_passphrase_securely_without_recover">請放置你的密碼於安全的地方,如果你遺失了密碼將不可能再次存取它。</string>
<string name="keychain_error">鎖匙鏈錯誤</string>
<string name="no_contacts_selected">沒有聯絡人可選擇</string>
<string name="group_link">群組連結</string>
<string name="delete_link">刪除連結</string>
<string name="group_is_decentralized">群組是完全去中心化的 - 只有群組內的成員能看到。</string>
<string name="prohibit_sending_disappearing">禁止傳送自動銷毀的訊息。</string>
<string name="ttl_hours">%d 個小時</string>
<string name="whats_new">新功能</string>
<string name="v4_2_auto_accept_contact_requests_desc">帶有可選即時性的訊息</string>
<string name="error_deleting_database">刪除數據庫時出現錯誤</string>
<string name="import_database_confirmation">匯入</string>
<string name="chat_item_ttl_seconds">%s 秒(s)</string>
<string name="error_encrypting_database">加密數據庫時出錯</string>
<string name="save_passphrase_in_keychain">於金鑰庫儲存密碼</string>
<string name="archive_created_on_ts">建立於 <xliff:g id="archive_ts">%1$s</xliff:g></string>
<string name="restore_database">還原數據庫的備份</string>
<string name="icon_descr_group_inactive">群組為不活躍狀態</string>
<string name="alert_title_group_invitation_expired">邀請連結過時!</string>
<string name="delete_group_question">刪除群組?</string>
<string name="delete_group_for_all_members_cannot_undo_warning">群組會於所有成員刪除 - 這不能還原!</string>
<string name="delete_group_for_self_cannot_undo_warning">群組只會為你刪除 - 這不能還原!</string>
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">你可以分享連結或二維碼 - 任何人也可以加入至此群組內。直到你刪除群組前你也不會失去遺失群組。</string>
<string name="group_main_profile_sent">你的個人檔案會傳送給群組內的成員。</string>
<string name="save_group_profile">儲存群組檔案</string>
<string name="voice_prohibited_in_this_chat">語音訊息於這個聊天窒是禁止的。</string>
<string name="v4_3_irreversible_message_deletion_desc">允許你的聯絡人可以完全刪除訊息</string>
<string name="first_platform_without_user_ids">第一個沒有任何用戶識別符的通訊平台 – 以私隱為設計</string>
<string name="next_generation_of_private_messaging">新一代的私人訊息平台</string>
<string name="decentralized">去中心化的</string>
<string name="people_can_connect_only_via_links_you_share">人們只能在你分享了連結後,才能和你連接。</string>
<string name="privacy_redefined">重新定義私隱</string>
<string name="create_your_profile">建立你的個人檔案</string>
<string name="how_it_works">這是如何運作</string>
<string name="onboarding_notifications_mode_subtitle">你可以之後透過設定修改。</string>
<string name="make_private_connection">私下連接</string>
<string name="opensource_protocol_and_code_anybody_can_run_servers">開放源碼協議和程式碼 – 任何人也可以運行伺服器。</string>
<string name="ignore">無視</string>
<string name="incoming_audio_call">語音通話來電</string>
<string name="paste_the_link_you_received">貼上你收到的連結</string>
<string name="status_e2e_encrypted">已經端對端加密</string>
<string name="status_no_e2e_encryption">沒有端對端加密</string>
<string name="icon_descr_speaker_off">關閉喇叭</string>
<string name="settings_section_title_messages">訊息</string>
<string name="privacy_and_security">私隱 &amp; 安全性</string>
<string name="settings_section_title_themes">主題</string>
<string name="v4_4_french_interface">法國語言界面</string>
<string name="encrypted_audio_call">已經完成端對端加密的語音通話</string>
<string name="reject">拒絕</string>
<string name="integrity_msg_bad_id">錯誤的訊息 ID</string>
<string name="integrity_msg_duplicate">重覆的訊息</string>
<string name="protect_app_screen">保護應用程式螢幕</string>
<string name="send_link_previews">傳送可以預覽的連結</string>
<string name="settings_section_title_develop">開發</string>
<string name="settings_section_title_device">裝置</string>
<string name="settings_section_title_help">幫助</string>
<string name="settings_section_title_settings">設定</string>
<string name="settings_section_title_support">幫助 SIMPLEX CHAT</string>
<string name="settings_section_title_chats">對話</string>
<string name="settings_developer_tools">開發者工具</string>
<string name="settings_section_title_socks">SOCKS 代理伺服器</string>
<string name="restart_the_app_to_use_imported_chat_database">重新啟動應用程式以匯入對話數據庫</string>
<string name="delete_files_and_media_all">刪除所有檔案</string>
<string name="enable_automatic_deletion_question">啟用自動銷毀訊息?</string>
<string name="delete_messages">刪除訊息</string>
<string name="delete_messages_after">於多久後刪除訊息</string>
<string name="enter_correct_current_passphrase">請輸入正確的密碼。</string>
<string name="encrypted_with_random_passphrase">已受加密的數據庫密碼是使用隨機性的文字,你可以修改它。</string>
<string name="database_will_be_encrypted">數據庫將會加密。</string>
<string name="database_will_be_encrypted_and_passphrase_stored">數據庫將會加密並且密碼會儲存於金鑰庫。</string>
<string name="database_error">數據庫錯誤</string>
<string name="cannot_access_keychain">不能讀取金鑰庫以儲存資料庫密碼</string>
<string name="error_with_info">錯誤:%s</string>
<string name="file_with_path">檔案:%s</string>
<string name="database_passphrase_is_required">需要數據庫的密碼以開啟對話。</string>
<string name="enter_passphrase">輸入密碼 …</string>
<string name="enter_correct_passphrase">輸入正確的密碼。</string>
<string name="open_chat">開啟對話</string>
<string name="save_passphrase_and_open_chat">儲存密碼和開啟對話</string>
<string name="database_backup_can_be_restored">你未完成更改數據庫密碼的程序</string>
<string name="restore_passphrase_not_found_desc">密碼不存在於金鑰庫,請手動輸入它,有這種情況你可能是使用了備份用的工具。如果不是請聯絡開發人員。</string>
<string name="restore_database_alert_confirm">還原</string>
<string name="restore_database_alert_title">還原數據庫的備份?</string>
<string name="database_restore_error">還原數據庫時出錯</string>
<string name="save_archive">儲存存檔</string>
<string name="delete_archive">刪除封存</string>
<string name="join_group_button">加入</string>
<string name="join_group_question">確定要加入群組?</string>
<string name="join_group_incognito_button">加入匿名聊天模式</string>
<string name="joining_group">加入群組中</string>
<string name="alert_message_group_invitation_expired">群組的邀請連結無效,這連結已經被群組管理人刪除。</string>
<string name="group_invitation_expired">群組邀請連結已經過時</string>
<string name="rcv_group_event_user_deleted">移除了你</string>
<string name="no_contacts_to_add">沒有聯絡人可以新增</string>
<string name="select_contacts">選擇聯絡人</string>
<string name="skip_inviting_button">跳過邀請成員</string>
<string name="invite_to_group_button">邀請至群組</string>
<string name="button_add_members">邀請成員</string>
<string name="invite_prohibited_description">你正在嘗試邀請一位與你分享了匿名聊天模式的聯絡人進入至你正在使用真實的個人檔案聊天模式的群組中</string>
<string name="error_creating_link_for_group">建立群組邀請連結時出錯</string>
<string name="error_deleting_link_for_group">刪除群組邀請連結時出錯</string>
<string name="section_title_for_console">為終端機</string>
<string name="info_row_local_name">本機名稱</string>
<string name="info_row_database_id">數據庫 ID</string>
<string name="role_in_group">身份</string>
<string name="button_send_direct_message">傳送私人訊息</string>
<string name="member_will_be_removed_from_group_cannot_be_undone">成員將會被移除於此群組 - 這不能還原!</string>
<string name="remove_member_confirmation">移除</string>
<string name="member_info_section_title_member">成員</string>
<string name="change_role">修改身份</string>
<string name="switch_verb">切換</string>
<string name="change_member_role_question">修改這位成員的身份?</string>
<string name="switch_receiving_address">切換接收訊息的伺服器</string>
<string name="group_profile_is_stored_on_members_devices">群組的檔案只會儲存於成員內的本機裝置,不會儲存於伺服器內。</string>
<string name="network_option_seconds_label"></string>
<string name="network_option_tcp_connection_timeout">TCP 連線超時</string>
<string name="network_option_protocol_timeout">協議超時</string>
<string name="network_option_ping_interval">PING 的間隔時間</string>
<string name="network_option_ping_count">PING 的次數</string>
<string name="network_option_enable_tcp_keep_alive">啟用 TCP keep-alive</string>
<string name="network_options_save">儲存</string>
<string name="update_network_settings_question">更新網路設定?</string>
<string name="update_network_settings_confirmation">更新</string>
<string name="your_chat_profiles_stored_locally">你的個人檔案只會儲存於你的本機裝置內。</string>
<string name="updating_settings_will_reconnect_client_to_all_servers">更新設定會將客戶端重新連接到所有的伺服器。</string>
<string name="users_delete_question">刪除個人檔案?</string>
<string name="users_delete_profile_for">刪除個人檔案</string>
<string name="users_delete_with_connections">檔案和伺服器連接</string>
<string name="users_delete_data_only">只有本機檔案</string>
<string name="incognito_random_profile">你的隨機個人檔案</string>
<string name="incognito_random_profile_description">隨機的個人檔案將會傳送給你的聯絡人。</string>
<string name="theme_system">系統</string>
<string name="theme_light">明亮</string>
<string name="reset_color">重設顏色</string>
<string name="feature_off">關閉</string>
<string name="feature_received_prohibited">已接收,已禁止</string>
<string name="accept_feature_set_1_day">設定為一日</string>
<string name="contacts_can_mark_messages_for_deletion">聯絡人可以標記訊息為已刪除;你可以看到</string>
<string name="prohibit_sending_voice_messages">禁止傳送語音訊息</string>
<string name="only_your_contact_can_send_disappearing">只有你的聯絡人可以傳送自動銷毀的訊息</string>
<string name="disappearing_prohibited_in_this_chat">自動銷毀訊息已被禁止於此聊天室。</string>
<string name="message_deletion_prohibited">此聊天室禁止不可逆的訊息刪除。</string>
<string name="only_you_can_send_voice">只有你可以傳送語音訊息。</string>
<string name="direct_messages_are_prohibited_in_chat">私訊群組內的成員於這個群組內是禁用的。</string>
<string name="group_members_can_delete">群組內的成員可以不可逆地刪除訊息。</string>
<string name="v4_3_voice_messages">語音訊息</string>
<string name="v4_3_improved_server_configuration">改善伺服器配置</string>
<string name="v4_3_improved_privacy_and_security_desc">當你切換至最近應用程式版面時,程式畫面會自動隱藏,無法預覽。</string>
<string name="run_chat_section">運行對話</string>
<string name="database_passphrase">數據庫密碼</string>
<string name="export_database">匯出數據庫</string>
<string name="import_database">匯入資料庫</string>
<string name="new_database_archive">新的數據庫存檔</string>
<string name="old_database_archive">舊的數據庫存檔</string>
<string name="delete_database">刪除數據庫</string>
<string name="error_starting_chat">開始新對話時出錯</string>
<string name="stop_chat_question">停止對話?</string>
<string name="set_password_to_export">設定密碼以匯出</string>
<string name="error_stopping_chat">停止對話時出現錯誤</string>
<string name="set_password_to_export_desc">已受加密的數據庫是使用一個隨機性的文字。請在修改前將它匯出。</string>
<string name="error_exporting_chat_database">匯出數據庫時出現錯誤</string>
<string name="error_importing_database">匯入數據庫時出現錯誤</string>
<string name="database_passphrase_will_be_updated">受加密的數據庫密碼會再次更新。</string>
<string name="delete_chat_archive_question">刪除封存對話?</string>
<string name="encrypt_database_question">加密數據庫?</string>
<string name="group_invitation_item_description">邀請至群組 <xliff:g id="group_name">%1$s</xliff:g></string>
<string name="icon_descr_add_members">邀請成員</string>
<string name="alert_title_no_group">群組找不到!</string>
<string name="rcv_group_event_member_deleted">已移除
\n&lt;xliff:g xmlns:xliff=\"urn:oasis:names:tc:xliff:document:1.2\" id=\"member profile\" example=\"alice (Alice)\"&gt;</string>
<string name="rcv_group_event_group_deleted">已刪除群組</string>
<string name="group_member_status_group_deleted">群組已經刪除</string>
<string name="group_member_status_invited">已經邀請</string>
<string name="rcv_group_event_invited_via_your_group_link">已經透過連結邀請了你進群組</string>
<string name="chat_preferences_contact_allows">聯絡人允許</string>
<string name="ttl_s">%ds</string>
<string name="onboarding_notifications_mode_title">私人通知</string>
<string name="read_more_in_github_with_link"><font color="#0088ff">GitHub</font> \u0020查看更多。</string>
<string name="read_more_in_github">於 GitHub 查看更多</string>
<string name="incoming_video_call">視訊通話來電</string>
<string name="icon_descr_hang_up">掛斷電話來電</string>
<string name="call_connection_peer_to_peer">點對點</string>
<string name="status_contact_has_e2e_encryption">對話已經過端對端加密</string>
<string name="status_contact_has_no_e2e_encryption">對話沒有經過端對端加密</string>
<string name="database_encrypted">數據庫已加密!</string>
<string name="encrypted_database">已加密數據庫</string>
<string name="chat_archive_section">對話封存</string>
<string name="snd_group_event_group_profile_updated">群組資料已經更新</string>
<string name="group_member_role_member">成員</string>
<string name="group_info_member_you">你:<xliff:g id="group_info_you">%1$s</xliff:g></string>
<string name="button_delete_group">刪除群組</string>
<string name="v4_4_live_messages">即時訊息</string>
<string name="chat_archive_header">對話封存</string>
<string name="error_removing_member">移除成員時出現錯誤</string>
<string name="error_changing_role">修改身份時出現錯誤</string>
<string name="info_row_group">群組</string>
<string name="info_row_connection">連線</string>
<string name="conn_level_desc_direct">直接</string>
<string name="conn_level_desc_indirect">間接 (<xliff:g id="conn_level">%1$s</xliff:g>)</string>
<string name="conn_stats_section_title_servers">伺服器</string>
<string name="receiving_via">接收訊息透過</string>
<string name="sending_via">傳送訊息透過</string>
<string name="incognito_random_profile_from_contact_description">隨機的個人檔案將傳送給收到此連結的聯絡人</string>
<string name="prohibit_sending_disappearing_messages">禁止傳送自動銷毀的訊息。</string>
<string name="prohibit_message_deletion">禁止不可逆的訊息刪除。</string>
<string name="prohibit_sending_voice">禁止傳送語音訊息。</string>
<string name="group_members_can_send_disappearing">群組內的成員可以傳送自動銷毀的訊息。</string>
<string name="disappearing_messages_are_prohibited">自動銷毀訊息於這個群組內是禁用的。</string>
<string name="feature_offered_item">提供 %s</string>
<string name="error_saving_group_profile">儲存群組檔案時有錯誤</string>
<string name="network_options_revert">恢復</string>
<string name="theme">主題</string>
<string name="save_color">儲存顏色</string>
<string name="chat_preferences_you_allow">你允許</string>
<string name="set_group_preferences">修改群組內的設定</string>
<string name="direct_messages">私訊</string>
<string name="feature_enabled">已啟用</string>
<string name="feature_enabled_for_you">已為你啟用</string>
<string name="feature_enabled_for_contact">已為聯絡人啟用</string>
<string name="only_you_can_delete_messages">只有你能不可逆地刪除訊息(你的聯絡人可以將它標記為刪除)</string>
<string name="only_your_contact_can_delete">只有你的聊絡人可以不可逆的刪除訊息(你可以將它標記為刪除)</string>
<string name="only_your_contact_can_send_voice">只有你的聯絡人可以傳送語音訊息。</string>
<string name="prohibit_direct_messages">禁止私訊群組內的成員。</string>
<string name="message_deletion_prohibited_in_chat">不可逆地刪除訊息於這個群組內是禁用的。</string>
<string name="group_members_can_send_voice">群組內的成員可以傳送語音訊息。</string>
<string name="voice_messages_are_prohibited">語音訊息於這個群組內是禁用的。</string>
<string name="ttl_months">%d 個月</string>
<string name="ttl_m">%dm</string>
<string name="ttl_mth">%dmth</string>
<string name="ttl_hour">%d 小時</string>
<string name="ttl_h">%dh</string>
<string name="ttl_day">%d 日</string>
<string name="ttl_days">%d 天</string>
<string name="ttl_d">%dd</string>
<string name="ttl_week">%d 星期</string>
<string name="ttl_weeks">%d 個星期</string>
<string name="ttl_w">%dw</string>
<string name="new_in_version">新的更新 %s</string>
<string name="v4_3_voice_messages_desc">最多四十秒後刪除,接收人立即收到。</string>
<string name="v4_3_irreversible_message_deletion">不可逆地刪除訊息</string>
<string name="v4_3_improved_privacy_and_security">增強隱私和安全性</string>
<string name="v4_4_disappearing_messages_desc">已傳送的訊息將在設定的時間後被刪除。</string>
<string name="v4_4_live_messages_desc">當你輸入訊息時侯,對方將可以即時看到你輸入的內容。</string>
<string name="v4_4_verify_connection_security">驗證連線安全性。</string>
<string name="v4_4_verify_connection_security_desc">驗證你與聯絡人的安全碼。</string>
<string name="v4_4_french_interface_descr">感謝用戶 - 使用 Weblate 的翻譯貢獻!</string>
<string name="snd_conn_event_switch_queue_phase_changing_for_member">正在更改地址為 %s …</string>
<string name="database_encryption_will_be_updated">受加密的數據庫密碼會再次更新和儲存於金鑰庫。</string>
<string name="how_simplex_works"><xliff:g id="appName">SimpleX</xliff:g> 是怎樣運作</string>
<string name="alert_text_skipped_messages_it_can_happen_when">當發生:
\n1. 如果三十天內沒有收到訊息,那麼這些訊息將會在伺服器內過時。
\n2. 你用來接收該聯絡人的訊息伺服器已更新並且重新啟動。
\n3. 連接受到影響或被破壞。
\n請透過設定列尋找開發人員並且報告你的伺服器問題。
\n我們將會新增重複的伺服器以防止遺失伺服器。</string>
<string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages">只有對方的裝置才會儲存你的個人檔案,聯絡人,群組,所有訊息都會經過兩層的端對端加密</string>
<string name="store_passphrase_securely">請放置你的密碼於安全的地方,如果你遺失了密碼,將不可能更改你的密碼。</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">停止聊天室以匯出對話,匯入或刪除對話存檔。當聊天室停止後你將不能接收或傳送訊息。</string>
<string name="alert_title_cant_invite_contacts_descr">你正在使用匿名聊天模式進入此群組,為了避免分享你的真實個人檔案,邀請聯絡人是不允許的。</string>
<string name="you_sent_group_invitation">你傳送了一個群組連結</string>
<string name="snd_group_event_member_deleted">你移除了 <xliff:g id="member profile" example="alice (Alice)">%1$s</xliff:g></string>
<string name="snd_group_event_user_left">你退出了群組</string>
<string name="snd_conn_event_switch_queue_phase_completed_for_member">你修改了地址為 %s</string>
<string name="group_member_status_intro_invitation">連線中(邀請介紹階段)</string>
<string name="your_current_chat_database_will_be_deleted_and_replaced_with_the_imported_one">你目前的對話數據庫會刪除並且以你匯入的對話數據庫頂替上。
\n這操作不能還原 - 你現有的個人檔案,聯絡人,訊息和檔案將會不可逆地遺失。</string>
<string name="description_via_contact_address_link">透過聯絡人的邀請連結連線</string>
<string name="description_via_one_time_link">透過一次性連結連線</string>
<string name="network_session_mode_transport_isolation">傳輸隔離</string>
<string name="update_network_session_mode_question">更新傳輸隔離模式?</string>
<string name="to_protect_privacy_simplex_has_ids_for_queues">為了保護隱私,而不像是其他平台般需要提取和存儲用戶的 ID資料,<xliff:g id="appName">SimpleX</xliff:g> 本平台具有SimpleX自家隊列的標識符,對於你的每個聯絡人也是獨一無二的。</string>
<string name="onboarding_notifications_mode_off">當應用程式是開啟</string>
<string name="you_control_servers_to_receive_your_contacts_to_send">你可以控制通過哪一個伺服器 <b>來接收</b> 你的聯絡人訊息 – 這些伺服器用來接收他們傳送給你的訊息。</string>
<string name="allow_accepting_calls_from_lock_screen">透過設定啟用於上鎖畫面顯示來電通知</string>
<string name="delete_chat_profile_action_cannot_be_undone_warning">這操作不能還原 - 你現有的個人檔案,聯絡人,訊息和檔案將會不可逆地的失去。</string>
<string name="you_must_use_the_most_recent_version_of_database">你必須在裝置上使用最新版本的對話數據庫,否則你可能會停止接收某些聯絡人的訊息。</string>
<string name="delete_files_and_media_desc">這操作不能還原 - 所有已經接收和傳送的檔案和媒體檔案將會刪除。低解析度圖片將保留。</string>
<string name="messages_section_description">這設置適用於你當前的個人檔案</string>
<string name="enable_automatic_deletion_message">這操作無法撤銷 - 早於所選時間的發送和接收的訊息將被刪除。可能需要幾分鐘的時間。</string>
<string name="update_database_passphrase">更新數據庫密碼</string>
<string name="you_have_to_enter_passphrase_every_time">當每次啟動應用程式後你會需要輸入密碼 - 這不是儲存於你的個人裝置上。</string>
<string name="you_are_invited_to_group">你已經被邀請至群組</string>
<string name="you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved">你將停止接收來自此群組的訊息。群組內的記錄會保留。</string>
<string name="you_rejected_group_invitation">你已拒絕加入群組</string>
<string name="group_member_status_announced">連線中(宣布階段)</string>
<string name="num_contacts_selected"><xliff:g id="num_contacts">%1$s</xliff:g> 已選擇多個聊絡人</string>
<string name="your_ice_servers">你的 ICE 伺服器</string>
<string name="webrtc_ice_servers">WebRTC ICE 伺服器</string>
<string name="update_database">更新</string>
<string name="icon_descr_expand_role">添加更多身份選項</string>
<string name="icon_descr_context">聯絡人頭像</string>
<string name="icon_descr_profile_image_placeholder">個人資料頭像占位符</string>
<string name="immune_to_spam_and_abuse">不受垃圾郵件和濫用行為影響</string>
<string name="contact_wants_to_connect_via_call"><xliff:g id="contactName" example="Alice">%1$s</xliff:g> 希望透過以下方式聯絡你</string>
<string name="icon_descr_video_on">開啟視訊</string>
<string name="icon_descr_flip_camera">翻轉相機</string>
<string name="icon_descr_call_pending_sent">待確認通話</string>
<string name="your_privacy">你的私隱</string>
<string name="your_calls">你的通話</string>
<string name="always_use_relay">經由分程傳遞連接</string>
<string name="call_on_lock_screen">在上鎖畫面顯示來電通知:</string>
<string name="integrity_msg_skipped"><xliff:g id="connection ID" example="1">%1$d</xliff:g> 你錯過了多個訊息</string>
<string name="integrity_msg_bad_hash">錯誤訊息雜湊值</string>
<string name="alert_title_skipped_messages">你錯過了多個訊息</string>
<string name="settings_section_title_you"></string>
<string name="settings_experimental_features">實驗性功能</string>
<string name="database_is_not_encrypted">你對話的數據庫並未加受加密 - 設置密碼保護它。</string>
<string name="passphrase_is_different">資料庫密碼與保存在金鑰庫中的密碼不同。</string>
<string name="unknown_error">不明的錯誤</string>
<string name="restore_database_alert_desc">還原數據庫備份後請輸入舊密碼。這個操作是不能撤銷的!</string>
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">你可以透過應用程式的設置或重新啟動應用程式來開始新的對話。</string>
<string name="you_are_invited_to_group_join_to_connect_with_group_members">你已經被邀请加入至群組。加入後可與群組內的成員對話。</string>
<string name="you_joined_this_group">你已加入至群組</string>
<string name="icon_descr_contact_checked">已確認聯絡人</string>
<string name="your_chat_database">你的對話數據庫</string>
<string name="delete_chat_profile_question">刪除個人檔案?</string>
<string name="wrong_passphrase">錯誤的數據庫密碼</string>
<string name="unknown_database_error_with_info">未知的數據庫錯誤:%s</string>
<string name="wrong_passphrase_title">密碼錯誤!</string>
<string name="youve_accepted_group_invitation_connecting_to_inviting_group_member">你已經加入至群組。正在連線至群組內的成員。</string>
<string name="alert_message_no_group">這群組已經不存在。</string>
<string name="rcv_group_event_updated_group_profile">更新群組檔案</string>
<string name="snd_group_event_changed_member_role">你修改了 %s 的身份為 %s</string>
<string name="group_member_status_introduced">連線中(介紹階段)</string>
<string name="use_chat">使用對話</string>
<string name="call_connection_via_relay">透過轉送</string>
<string name="icon_descr_video_off">關閉視訊</string>
<string name="snd_group_event_changed_role_for_yourself">你修改了自己的身份為 %s</string>
<string name="snd_conn_event_switch_queue_phase_completed">你修改了地址</string>
<string name="moderated_item_description">由 %s 管理</string>
<string name="moderate_message_will_be_deleted_warning">將為所有成員刪除該消息。</string>
<string name="delete_member_message__question">刪除成員消息?</string>
<string name="moderate_verb">主持</string>
<string name="moderate_message_will_be_marked_warning">該消息將對所有成員標記為已審核。</string>
<string name="observer_cant_send_message_title">您不能發送消息!</string>
<string name="you_are_observer">您是觀察者</string>
<string name="group_member_role_observer">觀察者</string>
<string name="error_updating_link_for_group">更新群組鏈接時出錯</string>
<string name="observer_cant_send_message_desc">請聯繫群管理員。</string>
<string name="initial_member_role">初始角色</string>
<string name="language_system">系統</string>
</resources>
@@ -2,4 +2,5 @@
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="window_background_dark">#121212</color>
</resources>
@@ -22,12 +22,14 @@
<!-- Item Content - ChatModel.kt -->
<string name="deleted_description">deleted</string>
<string name="marked_deleted_description">marked deleted</string>
<string name="moderated_item_description">moderated by %s</string>
<string name="sending_files_not_yet_supported">sending files is not supported yet</string>
<string name="receiving_files_not_yet_supported">receiving files is not supported yet</string>
<string name="sender_you_pronoun">you</string>
<string name="unknown_message_format">unknown message format</string>
<string name="invalid_message_format">invalid message format</string>
<string name="live">LIVE</string>
<string name="moderated_description">moderated</string>
<string name="invalid_chat">invalid chat</string>
<string name="invalid_data">invalid data</string>
@@ -101,6 +103,7 @@
<string name="smp_server_test_delete_queue">Delete queue</string>
<string name="smp_server_test_disconnect">Disconnect</string>
<string name="error_deleting_user">Error deleting user profile</string>
<string name="error_updating_user_privacy">Error updating user privacy</string>
<!-- background service notice - SimpleXAPI.kt -->
<string name="icon_descr_instant_notifications">Instant notifications</string>
@@ -181,9 +184,13 @@
<string name="reveal_verb">Reveal</string>
<string name="hide_verb">Hide</string>
<string name="allow_verb">Allow</string>
<string name="moderate_verb">Moderate</string>
<string name="delete_message__question">Delete message?</string>
<string name="delete_message_cannot_be_undone_warning">Message will be deleted - this cannot be undone!</string>
<string name="delete_message_mark_deleted_warning">Message will be marked for deletion. The recipient(s) will be able to reveal this message.</string>
<string name="delete_member_message__question">Delete member message?</string>
<string name="moderate_message_will_be_deleted_warning">The message will be deleted for all members.</string>
<string name="moderate_message_will_be_marked_warning">The message will be marked as moderated for all members.</string>
<string name="for_me_only">Delete for me</string>
<string name="for_everybody">For everyone</string>
@@ -221,6 +228,9 @@
<string name="images_limit_desc">Only 10 images can be sent at the same time</string>
<string name="image_decoding_exception_title">Decoding error</string>
<string name="image_decoding_exception_desc">The image cannot be decoded. Please, try a different image or contact developers.</string>
<string name="you_are_observer">you are observer</string>
<string name="observer_cant_send_message_title">You can\'t send messages!</string>
<string name="observer_cant_send_message_desc">Please contact group admin.</string>
<!-- Images - chat.simplex.app.views.chat.item.CIImageView.kt -->
<string name="image_descr">Image</string>
@@ -450,6 +460,7 @@
<string name="smp_servers_check_address">Check server address and try again.</string>
<string name="smp_servers_delete_server">Delete server</string>
<string name="smp_servers_per_user">The servers for new connections of your current chat profile</string>
<string name="smp_save_servers_question">Save servers?</string>
<string name="install_simplex_chat_for_terminal">Install <xliff:g id="appNameFull">SimpleX Chat</xliff:g> for terminal</string>
<string name="star_on_github">Star on GitHub</string>
<string name="contribute">Contribute</string>
@@ -526,6 +537,16 @@
<string name="save_and_notify_group_members">Save and notify group members</string>
<string name="exit_without_saving">Exit without saving</string>
<!-- HiddenProfileView.kt -->
<string name="hide_profile">Hide profile</string>
<string name="password_to_show">Password to show</string>
<string name="save_profile_password">Save profile password</string>
<string name="hidden_profile_password">Hidden profile password</string>
<string name="confirm_password">Confirm password</string>
<string name="to_reveal_profile_enter_password">To reveal your hidden profile, enter a full password into a search field in "Your chat profiles" page.</string>
<string name="error_saving_user_password">Error saving user password</string>
<!-- Welcome Prompts - WelcomeView.kt -->
<string name="you_control_your_chat">You control your chat!</string>
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">The messaging and application platform protecting your privacy and security.</string>
@@ -622,13 +643,15 @@
<!-- Call settings -->
<string name="settings_audio_video_calls">Audio &amp; video calls</string>
<string name="your_calls">Your calls</string>
<string name="connect_calls_via_relay">Connect via relay</string>
<string name="always_use_relay">Always use relay</string>
<string name="call_on_lock_screen">Calls on lock screen:</string>
<string name="accept_call_on_lock_screen">Accept</string>
<string name="show_call_on_lock_screen">Show</string>
<string name="no_call_on_lock_screen">Disable</string>
<string name="your_ice_servers">Your ICE servers</string>
<string name="webrtc_ice_servers">WebRTC ICE servers</string>
<string name="relay_server_protects_ip">Relay server protects your IP address, but it can observe the duration of the call.</string>
<string name="relay_server_if_necessary">Relay server is only used if necessary. Another party can observe your IP address.</string>
<!-- Call Lock Screen -->
<string name="open_simplex_chat_to_accept_call">Open <xliff:g id="appNameFull">SimpleX Chat</xliff:g> to accept call</string>
@@ -687,6 +710,7 @@
<string name="settings_developer_tools">Developer tools</string>
<string name="settings_experimental_features">Experimental features</string>
<string name="settings_section_title_socks">SOCKS PROXY</string>
<string name="settings_section_title_language" translatable="false">LANGUAGE</string>
<string name="settings_section_title_icon">APP ICON</string>
<string name="settings_section_title_themes">THEMES</string>
<string name="settings_section_title_messages">MESSAGES</string>
@@ -867,6 +891,7 @@
<string name="snd_conn_event_switch_queue_phase_changing">changing address…</string>
<!-- GroupMemberRole -->
<string name="group_member_role_observer">observer</string>
<string name="group_member_role_member">member</string>
<string name="group_member_role_admin">admin</string>
<string name="group_member_role_owner">owner</string>
@@ -889,6 +914,7 @@
<!-- AddGroupMembersView.kt -->
<string name="no_contacts_to_add">No contacts to add</string>
<string name="new_member_role">New member role</string>
<string name="initial_member_role">Initial role</string>
<string name="icon_descr_expand_role">Expand role selection</string>
<string name="invite_to_group_button">Invite to group</string>
<string name="skip_inviting_button">Skip inviting members</string>
@@ -910,6 +936,8 @@
<string name="delete_group_for_self_cannot_undo_warning">Group will be deleted for you - this cannot be undone!</string>
<string name="button_leave_group">Leave group</string>
<string name="button_edit_group_profile">Edit group profile</string>
<string name="button_add_welcome_message">Add welcome message</string>
<string name="button_welcome_message">Welcome message</string>
<string name="group_link">Group link</string>
<string name="create_group_link">Create group link</string>
<string name="button_create_group_link">Create link</string>
@@ -918,6 +946,7 @@
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">You can share a link or a QR code - anybody will be able to join the group. You won\'t lose members of the group if you later delete it.</string>
<string name="all_group_members_will_remain_connected">All group members will remain connected.</string>
<string name="error_creating_link_for_group">Error creating group link</string>
<string name="error_updating_link_for_group">Error updating group link</string>
<string name="error_deleting_link_for_group">Error deleting group link</string>
<string name="only_group_owners_can_change_prefs">Only group owners can change group preferences.</string>
@@ -946,6 +975,11 @@
<string name="conn_level_desc_direct">direct</string>
<string name="conn_level_desc_indirect">indirect (<xliff:g id="conn_level">%1$s</xliff:g>)</string>
<!-- GroupWelcomeView.kt -->
<string name="group_welcome_title">Welcome message</string>
<string name="save_welcome_message_question">Save welcome message?</string>
<string name="save_and_update_group_profile">Save and update group profile</string>
<!-- ConnectionStats -->
<string name="conn_stats_section_title_servers">SERVERS</string>
<string name="receiving_via">Receiving via</string>
@@ -989,6 +1023,20 @@
<string name="users_delete_profile_for">Delete chat profile for</string>
<string name="users_delete_with_connections">Profile and server connections</string>
<string name="users_delete_data_only">Local profile data only</string>
<string name="user_hide">Hide</string>
<string name="user_unhide">Unhide</string>
<string name="user_mute">Mute</string>
<string name="user_unmute">Unmute</string>
<string name="enter_password_to_show">Enter password above to show!</string>
<string name="tap_to_activate_profile">Tap to activate profile.</string>
<string name="cant_delete_user_profile">Can\'t delete user profile!</string>
<string name="should_be_at_least_one_visible_profile">There should be at least one visible user profile.</string>
<string name="should_be_at_least_one_profile">There should be at least one user profile.</string>
<string name="make_profile_private">Make profile private!</string>
<string name="you_can_hide_or_mute_user_profile">You can hide or mute a user profile - hold it for the menu.\nSimpleX Lock must be enabled.</string>
<string name="dont_show_again">Don\'t show again</string>
<string name="muted_when_inactive">Muted when inactive!</string>
<string name="you_will_still_receive_calls_and_ntfs">You will still receive calls and notifications from muted profiles when they are active.</string>
<!-- Incognito mode -->
<string name="incognito">Incognito</string>
@@ -1006,6 +1054,9 @@
<string name="theme_light">Light</string>
<string name="theme_dark">Dark</string>
<!-- Languages -->
<string name="language_system">System</string>
<!-- Appearance.kt -->
<string name="theme">Theme</string>
<string name="save_color">Save color</string>
@@ -1132,4 +1183,16 @@
<string name="v4_5_reduced_battery_usage_descr">More improvements are coming soon!</string>
<string name="v4_5_italian_interface">Italian interface</string>
<string name="v4_5_italian_interface_descr">Thanks to the users contribute via Weblate!</string>
<string name="v4_6_hidden_chat_profiles">Hidden chat profiles</string>
<string name="v4_6_hidden_chat_profiles_descr">Protect your chat profiles with a password!</string>
<string name="v4_6_audio_video_calls">Audio and video calls</string>
<string name="v4_6_audio_video_calls_descr">Support bluetooth and other improvements.</string>
<string name="v4_6_group_moderation">Group moderation</string>
<string name="v4_6_group_moderation_descr">Now admins can:\n- delete members\' messages.\n- disable members (\"observer\" role)</string>
<string name="v4_6_group_welcome_message">Group welcome message</string>
<string name="v4_6_group_welcome_message_descr">Set the message shown to new members!</string>
<string name="v4_6_reduced_battery_usage">Further reduced battery usage</string>
<string name="v4_6_reduced_battery_usage_descr">More improvements are coming soon!</string>
<string name="v4_6_chinese_spanish_interface">Chinese and Spanish interface</string>
<string name="v4_6_chinese_spanish_interface_descr">Thanks to the users contribute via Weblate!</string>
</resources>
@@ -1,3 +1,4 @@
<paths>
<files-path name="my_files" path="/"/>
<files-path name="app_temp" path="../app_temp"/>
</paths>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
<locale android:name="en"/>
<locale android:name="ru"/>
<locale android:name="de"/>
<locale android:name="fr"/>
<locale android:name="it"/>
<locale android:name="nl"/>
<locale android:name="cs"/>
<locale android:name="zh-CN"/>
</locale-config>
+1
View File
@@ -0,0 +1 @@
# SimpleX Chat iOS app
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "decentralized_light.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "decentralized_light@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "decentralized_light@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "60.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "120.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "180.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 57 KiB

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